fix(checks): process check is opt-in for url-fronted services
The ontology's stated intent was "http when it has a url, else a process check", but the implementation emitted BOTH for every url-service — so ~17 fronted services carried a redundant process check that, under worst-of aggregation, let a fragile supplementary probe (wrong unit name, unreachable host, no guest agent) veto two healthy http checks and report the service "down" while it was up (authentik, zimaos, house, matrix, ...). buildKind now emits a process check only for services WITHOUT a url, or when an explicit probe_unit opts into binary-level depth. http is the canonical service-liveness probe (tests the real endpoint through the TLS terminator); the redundant process checks were removed.
This commit is contained in:
@@ -213,7 +213,17 @@ func buildKind(kind string, t Target, attrs map[string]any, host, user string, p
|
||||
break
|
||||
}
|
||||
}
|
||||
// Ontology intent: "http when it has a url, else a process check." A
|
||||
// url-fronted service is already liveness-probed via http (the real
|
||||
// endpoint, through the TLS terminator); the process check is redundant
|
||||
// and fragile (needs host access + the exact unit/container name), and
|
||||
// under worst-of aggregation it lets a broken supplementary probe veto
|
||||
// a working service. Emit it only for services WITHOUT a url, or when
|
||||
// an explicit probe_unit opts into binary-level depth.
|
||||
if unit == "" {
|
||||
if httpURL(t, attrs) != "" {
|
||||
return nil, "url present and no probe_unit; http check covers liveness"
|
||||
}
|
||||
unit = t.Name
|
||||
}
|
||||
if unit == "" {
|
||||
|
||||
@@ -217,8 +217,7 @@ entities:
|
||||
- {slug: "service:proxmox-ui", type: service, name: proxmox_ui,
|
||||
attributes: {url: "https://proxmox.hubris.network", port: 8006,
|
||||
doc_page: knowledge/wiki/hosts/hubris.md,
|
||||
risk_notes: "hypervisor UI — changes affect every guest on the node",
|
||||
probe_unit: pveproxy.service}}
|
||||
risk_notes: "hypervisor UI — changes affect every guest on the node"}}
|
||||
- {slug: "service:gitea", type: service, name: gitea,
|
||||
attributes: {url: "https://git.hubris.network", port: 3000,
|
||||
doc_page: knowledge/wiki/containers/104-gitea.md,
|
||||
@@ -240,8 +239,7 @@ entities:
|
||||
risk_notes: "native Authentik OIDC (no forward-auth gate); VAAPI depends on GPU passthrough on strong"}}
|
||||
- {slug: "service:nextcloud", type: service, name: nextcloud,
|
||||
attributes: {url: "https://cloud.hubris.network",
|
||||
doc_page: knowledge/wiki/containers/114-nextcloud.md,
|
||||
probe_unit: apache2.service}}
|
||||
doc_page: knowledge/wiki/containers/114-nextcloud.md}}
|
||||
- {slug: "service:paperless", type: service, name: paperless,
|
||||
attributes: {url: "https://paperless.hubris.network",
|
||||
doc_page: knowledge/wiki/containers/103-paperless.md,
|
||||
@@ -252,8 +250,7 @@ entities:
|
||||
risk_notes: "alert/approval channel for Oikos — outage silences agent escalation"}}
|
||||
- {slug: "service:photos", type: service, name: photos,
|
||||
attributes: {url: "https://photos.hubris.network",
|
||||
doc_page: knowledge/wiki/containers/120-mule-images.md,
|
||||
probe_unit: pp-app}}
|
||||
doc_page: knowledge/wiki/containers/120-mule-images.md}}
|
||||
- {slug: "service:arr-stack", type: service, name: arr_stack,
|
||||
attributes: {doc_page: knowledge/wiki/containers/122-arriman.md,
|
||||
note: "jellyseerr / qbit / sab on docker compose"}}
|
||||
|
||||
Reference in New Issue
Block a user