Skip to content

Health Auto Resolve

Taxi & Private HireProductsTrip › Health Auto Resolve

Generally available

Baseline-driven health resolution engine (ported from the decommissioned go-agent). Compares each active health alert's age against the historical median resolution time for that check at this hour and weekday; alerts that outlive the norm are either suggested to the operator (SUGGEST mode — a pending queue with confirm/dismiss) or queued for the guarded auto-resolution machinery (AUTO mode). Mode is the per-client health.auto_resolve Configuration (OFF by default).

Fields

FieldTypeDescription
tripId bigint Trip the suggested action applies to. Raw id (no relation) — the suggestion outlives trip-state churn and is serialized bespoke for the operator drawer.
checkName string Health check that raised the underlying alert (e.g. transporter_disconnected, route_progress).
action string Proposed resolution action — currently always "reclaim".
status string Lifecycle: PENDING (awaiting operator), EXECUTED (operator-confirmed or AUTO-queued), DISMISSED (operator declined), EXPIRED (went stale unactioned — the engine re-suggests if the alert persists).
reason string Human-readable rationale ("alert age 840s exceeds threshold 600s for transporter_disconnected").
result string Execution outcome detail when EXECUTED (e.g. "resolved", "auto_resolve_scheduled").
context json Structured decision context: checkName, alertAgeSeconds, threshold — what the operator drawer renders.
confirmedByUserId bigint Operator who confirmed/dismissed the suggestion. Null for AUTO-mode rows.
executedDate integer Unix timestamp the action was executed. Null while PENDING/DISMISSED/EXPIRED.
clientId bigint Tenant scope. Every tenant-aware entity carries this; `ClientFilter` enforces row-level isolation on read; the multi-tenancy routing layer (`/client/{clientId}`) sets it at create time. Surfaced only under `admin` / `tripLog` groups — never to end users.
internalKey string Optional client-supplied external reference / idempotency key. When present, lets external systems correlate platform-side records back to their own source-of-truth ids. Not persisted to a column — populated by the request handler when the caller sets it.
__objectType string Discriminator string (entity class short-name) emitted alongside the id in serialized output. Resolved at read time by `getObjectType()`; lets the FE dispatch entity-specific rendering without inspecting the URL.
id bigint Snowflake-style primary key (unsigned BIGINT). Generated by `IdFactory` at create time; surfaced to the FE / API as a `G`-prefixed string and stripped back to plain bigint server-side before Doctrine lookup.
createdDate integer Unix timestamp the row was first persisted. Set in the entity's PrePersist hook; never rewritten on subsequent updates.
updatedDate integer Unix timestamp the row was last touched. Bumped on every commit that hits the Doctrine UoW for this entity; drives FE invalidation + the listing change cursor.
passiveUpdatedDate int Read-through alias for `updatedDate` exposed under different serializer groups. Lets the FE distinguish "real edit" from "background touch" projections without changing the underlying column.
listingUpdatedDate int Listing-projection timestamp surfaced only under the `listMode` group. Driven by `TripCache` and other listing-shape refreshers separately from `updatedDate` so a listing rebuild doesn't trigger detail-page invalidation.