Compare spent error budget with the available budget and report burn status.

budget spend Budget spend is kept as a scalar so each selector variant has a clear report input.
burn status The burn status switches from ok to watch to halt as the budget is consumed.

Error Budget Reliability Report

spent
error_budget_reliability_report.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

int main(void) {
    int spent = 2;
    int budget = 5;
    const char *status = "ok";

    if (spent >= budget - 1) {
        status = "watch";
    }

    if (spent > budget) {
        status = "halt";
    }

    printf("spent=%d\n", spent);
    printf("budget=%d\n", budget);
    printf("status=%s\n", status);
    return 0;
}
#include <stdio.h>

int main(void) {
    int spent = 4;
    int budget = 5;
    const char *status = "ok";

    if (spent >= budget - 1) {
        status = "watch";
    }

    if (spent > budget) {
        status = "halt";
    }

    printf("spent=%d\n", spent);
    printf("budget=%d\n", budget);
    printf("status=%s\n", status);
    return 0;
}
#include <stdio.h>

int main(void) {
    int spent = 7;
    int budget = 5;
    const char *status = "ok";

    if (spent >= budget - 1) {
        status = "watch";
    }

    if (spent > budget) {
        status = "halt";
    }

    printf("spent=%d\n", spent);
    printf("budget=%d\n", budget);
    printf("status=%s\n", status);
    return 0;
}
  1. spent ← 2, budget ← 5, status ← ok

    3int main(void) {4    int spent→ 2 = 2; //@spent=4, 75    int budget→ 5 = 5;6    const char *status→ ok = "ok";78    if (spent >= budget - 1) {9        status = "watch";10    }1112    if (spent > budget) {13        status = "halt";14    }1516    printf("spent=%d\n", spent2);17    printf("budget=%d\n", budget5);18    printf("status=%s\n", statusok);19    return 0;20}
    outputspent=2
    budget=5
    status=ok
  1. spent ← 4, budget ← 5, status ← ok

    3int main(void) {4    int spent→ 4 = 4;5    int budget→ 5 = 5;6    const char *status→ ok = "ok";
  2. status ← watch

    8if (spent4 >= budget5 - 1) {9    status→ watch = "watch";10}
  3. printf("spent=%d ", spent);

    16    printf("spent=%d\n", spent4);17    printf("budget=%d\n", budget5);18    printf("status=%s\n", statuswatch);19    return 0;20}
    outputspent=4
    budget=5
    status=watch
  1. spent ← 7, budget ← 5, status ← ok

    3int main(void) {4    int spent→ 7 = 7;5    int budget→ 5 = 5;6    const char *status→ ok = "ok";
  2. status ← watch

    8if (spent7 >= budget5 - 1) {9    status→ watch = "watch";10}
  3. status ← halt

    12if (spent7 > budget5) {13    status→ halt = "halt";14}
  4. printf("spent=%d ", spent);

    16    printf("spent=%d\n", spent7);17    printf("budget=%d\n", budget5);18    printf("status=%s\n", statushalt);19    return 0;20}
    outputspent=7
    budget=5
    status=halt