Skip to main content

Module health

Module health 

Source
Expand description

The alert rules the credit registration dashboard renders.

An alert carries identifiers and numbers, never prose: the study registry’s own error text is written for an integrator and is not translated, so the frontend renders one key per alert id with these values interpolated. The thresholds travel with the alerts, not hardcoded twice.

StructsΒ§

CreditRegistrationAlert
CreditRegistrationHealth

EnumsΒ§

CreditRegistrationAlertId
CreditRegistrationAlertSeverity

ConstantsΒ§

CREDENTIAL_REJECTION_WINDOW_SECS πŸ”’
Within this much of the past, one rejected credential is enough.
FAST_TRACK_NAME_MISMATCH_COUNT πŸ”’
One person the registry names differently from the account whose address matched is worth a look: it is the only signal we get that a university address was reissued.
IDLE_QUEUE_DEPTH πŸ”’
Queued work that makes a day without a single completion mean something.
LATENCY_REGRESSION_FACTOR πŸ”’
LATENCY_REGRESSION_FLOOR_SECS πŸ”’
Under this the registry is quick enough that a doubling says nothing.
LATENCY_WINDOW_SECS πŸ”’
LINKING_MAIL_HOURLY_CAP πŸ”’
Linking mails one hour may hand over before the volume itself is the problem.
LINKING_MAIL_WINDOW_SECS πŸ”’
MISREGISTRATION_CRITICAL_COUNT πŸ”’
A reversal is always worth saying; this many at once is an incident.
NEVER_ENTERED_MIN_AGE_SECS πŸ”’
How long a completion may sit outside the ledger before materialize is the suspect rather than the clock.
NEVER_ENTERED_SAMPLE_LIMIT πŸ”’
Bounds the anti-join behind that rule; a bigger backlog reports as this many.
PERMANENT_FAILURE_COUNT πŸ”’
PERMANENT_FAILURE_RATE_PERCENT πŸ”’
PHASE_CONSECUTIVE_FAILURE_LIMIT πŸ”’
Failures in a row before a phase counts as broken rather than unlucky.
PHASE_HEARTBEAT_INTERVAL_MULTIPLIER πŸ”’
A phase is late once this many of its own intervals have passed without a heartbeat. pub(crate) because the dashboard’s phase rows apply the same threshold server-side.
PHASE_SUCCESS_INTERVAL_MULTIPLIER πŸ”’
A phase that owns a nonempty queue and has not succeeded within this many of its own intervals is running without getting anywhere, which no failure count catches.
SISU_OUTAGE_FAILURE_SHARE_PERCENT πŸ”’
SISU_OUTAGE_MIN_ITEMS πŸ”’
Below this many items the share below is one bad batch, not a signal.
SISU_OUTAGE_WINDOW_SECS πŸ”’
STUCK_CRITICAL_COUNT πŸ”’
Above this many stuck rows the backlog stops being something to look at tomorrow.
STUCK_THRESHOLDS πŸ”’
TERMINAL_WINDOW_SECS πŸ”’
The window every β€œin the last day” rule shares.
UNREACHABLE_CONSECUTIVE_FAILURES πŸ”’
Below this the run is a bad minute rather than an outage.
UNREACHABLE_WINDOW_SECS πŸ”’

FunctionsΒ§

course_configuration_alert πŸ”’
Modules the last configuration check found broken. Never checked is not counted: the Courses tab renders unknown and broken differently, and so must this.
depth_of πŸ”’
evaluate
Runs every rule and ranks what it found.
fast_track_name_mismatch_alert πŸ”’
Persons whose university address matched a verified account under a different name. The observable signature of an address reissued to somebody else, and the only warning we get before a link is made to the wrong account.
is_heartbeat_late πŸ”’
A phase counts as late once more than PHASE_HEARTBEAT_INTERVAL_MULTIPLIER of its own interval has passed since its last heartbeat. A paused phase is never late: it is not expected to be heartbeating at all.
latency_regression_alert πŸ”’
How long the study registry is taking to confirm, this week against last. count is this week’s p95 in seconds and total last week’s, so the banner can name both.
linking_mail_alert πŸ”’
Linking mails we could not hand over at all. The recipient domain rides along because an undeliverable host is the usual cause.
linking_mail_rate_alert πŸ”’
The volume guard: how many people we mailed in the last hour against what an hour should hold. Counts addresses, which is what the per-person caps govern.
never_entered_alert πŸ”’
Completions old enough that materialize has had every chance and still has no ledger row for them. Sampled rather than counted, so the anti-join stops early on a large backlog.
owned_depth πŸ”’
phase_alerts πŸ”’
What the phase table says about itself: phases that stopped reporting, and phases that report but get nowhere.
sisu_outage_alert πŸ”’
The share of recent items the study registry blamed on Sisu. Our only proxy for Sisu’s uptime, which is why it is a rule of its own rather than part of the request-level one above.
state_name πŸ”’
The state’s own wire name, taken from its serialisation so the two cannot drift.
stuck_alert πŸ”’
Rows the pipeline should have moved on by now. Terminal states are outside this by construction rather than by a filter that could be forgotten.
stuck_thresholds
terminal_outcome_alerts πŸ”’
The three rules read off the last day’s terminal outcomes: failures piling up, reversals, and a pipeline that finished nothing while holding work.
thresholds
Alias for stuck_thresholds: the same values, named for the health-poll wire response.

Type AliasesΒ§

CreditRegistrationAlertThresholds
The only thresholds the frontend reads off the health poll: how long a row may sit in each state before it counts as stuck. The other rule constants stay server-side.