static void UpdatePromiseComplianceStatus(PromiseResult status, const Promise *pp, char *reason) { if (!IsPromiseValuableForLogging(pp)) { return; } char compliance_status; switch (status) { case PROMISE_RESULT_CHANGE: compliance_status = PROMISE_STATE_REPAIRED; break; case PROMISE_RESULT_WARN: case PROMISE_RESULT_TIMEOUT: case PROMISE_RESULT_FAIL: case PROMISE_RESULT_DENIED: case PROMISE_RESULT_INTERRUPTED: compliance_status = PROMISE_STATE_NOTKEPT; break; case PROMISE_RESULT_NOOP: compliance_status = PROMISE_STATE_ANY; break; default: ProgrammingError("Unknown status '%c' has been passed to UpdatePromiseComplianceStatus", status); } NotePromiseCompliance(pp, compliance_status, reason); }
static void DoSummarizeTransaction(EvalContext *ctx, PromiseResult status, const Promise *pp, TransactionContext tc) { if (!IsPromiseValuableForLogging(pp)) { return; } char *log_name; switch (status) { case PROMISE_RESULT_CHANGE: log_name = tc.log_repaired; break; case PROMISE_RESULT_WARN: /* FIXME: nothing? */ return; case PROMISE_RESULT_TIMEOUT: case PROMISE_RESULT_FAIL: case PROMISE_RESULT_DENIED: case PROMISE_RESULT_INTERRUPTED: log_name = tc.log_failed; break; case PROMISE_RESULT_NOOP: log_name = tc.log_kept; break; } SummarizeTransaction(ctx, tc, log_name); }
void ClassAuditLog(const Promise *pp, Attributes attr, char status, char *reason) { switch (status) { case CF_CHG: if (IsPromiseValuableForStatus(pp)) { if (!EDIT_MODEL) { PR_REPAIRED++; VAL_REPAIRED += attr.transaction.value_repaired; #ifdef HAVE_NOVA EnterpriseTrackTotalCompliance(pp, 'r'); #endif } } AddAllClasses(pp->ns, attr.classes.change, attr.classes.persist, attr.classes.timer); MarkPromiseHandleDone(pp); DeleteAllClasses(attr.classes.del_change); if (IsPromiseValuableForLogging(pp)) { NotePromiseCompliance(pp, 0.5, PROMISE_STATE_REPAIRED, reason); SummarizeTransaction(attr, pp, attr.transaction.log_repaired); } break; case CF_WARN: if (IsPromiseValuableForStatus(pp)) { PR_NOTKEPT++; VAL_NOTKEPT += attr.transaction.value_notkept; #ifdef HAVE_NOVA EnterpriseTrackTotalCompliance(pp, 'n'); #endif } if (IsPromiseValuableForLogging(pp)) { NotePromiseCompliance(pp, 1.0, PROMISE_STATE_NOTKEPT, reason); } break; case CF_TIMEX: if (IsPromiseValuableForStatus(pp)) { PR_NOTKEPT++; VAL_NOTKEPT += attr.transaction.value_notkept; #ifdef HAVE_NOVA EnterpriseTrackTotalCompliance(pp, 'n'); #endif } AddAllClasses(pp->ns, attr.classes.timeout, attr.classes.persist, attr.classes.timer); DeleteAllClasses(attr.classes.del_notkept); if (IsPromiseValuableForLogging(pp)) { NotePromiseCompliance(pp, 0.0, PROMISE_STATE_NOTKEPT, reason); SummarizeTransaction(attr, pp, attr.transaction.log_failed); } break; case CF_FAIL: if (IsPromiseValuableForStatus(pp)) { PR_NOTKEPT++; VAL_NOTKEPT += attr.transaction.value_notkept; #ifdef HAVE_NOVA EnterpriseTrackTotalCompliance(pp, 'n'); #endif } AddAllClasses(pp->ns, attr.classes.failure, attr.classes.persist, attr.classes.timer); DeleteAllClasses(attr.classes.del_notkept); if (IsPromiseValuableForLogging(pp)) { NotePromiseCompliance(pp, 0.0, PROMISE_STATE_NOTKEPT, reason); SummarizeTransaction(attr, pp, attr.transaction.log_failed); } break; case CF_DENIED: if (IsPromiseValuableForStatus(pp)) { PR_NOTKEPT++; VAL_NOTKEPT += attr.transaction.value_notkept; #ifdef HAVE_NOVA EnterpriseTrackTotalCompliance(pp, 'n'); #endif } AddAllClasses(pp->ns, attr.classes.denied, attr.classes.persist, attr.classes.timer); DeleteAllClasses(attr.classes.del_notkept); if (IsPromiseValuableForLogging(pp)) { NotePromiseCompliance(pp, 0.0, PROMISE_STATE_NOTKEPT, reason); SummarizeTransaction(attr, pp, attr.transaction.log_failed); } break; case CF_INTERPT: if (IsPromiseValuableForStatus(pp)) { PR_NOTKEPT++; VAL_NOTKEPT += attr.transaction.value_notkept; #ifdef HAVE_NOVA EnterpriseTrackTotalCompliance(pp, 'n'); #endif } AddAllClasses(pp->ns, attr.classes.interrupt, attr.classes.persist, attr.classes.timer); DeleteAllClasses(attr.classes.del_notkept); if (IsPromiseValuableForLogging(pp)) { NotePromiseCompliance(pp, 0.0, PROMISE_STATE_NOTKEPT, reason); SummarizeTransaction(attr, pp, attr.transaction.log_failed); } break; case CF_UNKNOWN: case CF_NOP: AddAllClasses(pp->ns, attr.classes.kept, attr.classes.persist, attr.classes.timer); DeleteAllClasses(attr.classes.del_kept); if (IsPromiseValuableForLogging(pp)) { NotePromiseCompliance(pp, 1.0, PROMISE_STATE_ANY, reason); SummarizeTransaction(attr, pp, attr.transaction.log_kept); } if (IsPromiseValuableForStatus(pp)) { PR_KEPT++; VAL_KEPT += attr.transaction.value_kept; #ifdef HAVE_NOVA EnterpriseTrackTotalCompliance(pp, 'c'); #endif } MarkPromiseHandleDone(pp); break; } }