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 πŸ”’
Within this much of the past, one rejected credential is enough.
IDLE_QUEUE_DEPTH πŸ”’
Queued work that makes a day without a single completion mean something.
LATENCY_REGRESSION_FACTOR πŸ”’
LATENCY_REGRESSION_FLOOR πŸ”’
Under this the registry is quick enough that a doubling says nothing.
LATENCY_WINDOW πŸ”’
LINKING_MAIL_HOURLY_CAP πŸ”’
Linking mails one hour may hand over before the volume itself is the problem.
LINKING_MAIL_RATE_WINDOW πŸ”’
LINKING_MAIL_WINDOW πŸ”’
MISREGISTRATION_CRITICAL_COUNT πŸ”’
A reversal is always worth saying; this many at once is an incident.
NEVER_ENTERED_MIN_AGE πŸ”’
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.
PHASE_SUCCESS_CALL_MARGIN πŸ”’
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. Never less than its slowest possible iteration plus PHASE_SUCCESS_CALL_MARGIN, or one slow call would look like a wedge.
SERVICE_OUTAGE_FAILURE_SHARE_PERCENT πŸ”’
SERVICE_OUTAGE_MIN_ITEMS πŸ”’
Below this many items the share below is one bad batch, not a signal.
SERVICE_OUTAGE_WINDOW πŸ”’
STUCK_CRITICAL_COUNT πŸ”’
Above this many stuck rows the backlog stops being something to look at tomorrow.
STUCK_THRESHOLDS πŸ”’
SUOTAR_PENDING_WAIT πŸ”’
The longest submissionPending asks verify to wait before polling again.
TERMINAL_WINDOW πŸ”’
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 πŸ”’
Long enough to hold three failed calls at the longest request timeout.

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.
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.
is_phase_failing πŸ”’
Whether a phase counts as failing: too many failures in a row, or a nonempty queue with no success for too long, or an iteration hung past that same bound. Never while paused. The one definition behind both the PhaseFailing alert and the Workers tab’s failing flag.
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.
phase_alerts πŸ”’
What the phase table says about itself: phases that stopped reporting, and phases that report but get nowhere.
roster_course_code_alert πŸ”’
Course codes whose roster fails even when listed on their own, so enrolment discovery is backing them off. The worst one rides along, since the usual cause is that one code’s configuration.
service_outage_alert πŸ”’
The share of recent items that failed on Suotar or Sisu being unavailable. 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
study_registry_conflict_alert πŸ”’
Accounts the study registry reported a number for that another live link kept us from linking.
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.