27 lines
713 B
TypeScript
27 lines
713 B
TypeScript
export type IncidentSeverity = "maintenance" | "degraded" | "outage";
|
|
|
|
export type ServiceStatusLevel =
|
|
| "operational"
|
|
| "maintenance"
|
|
| "degraded"
|
|
| "outage";
|
|
|
|
const severityRank: Record<IncidentSeverity, number> = {
|
|
maintenance: 1,
|
|
degraded: 2,
|
|
outage: 3,
|
|
};
|
|
|
|
export function deriveServiceStatus(
|
|
incidents: ReadonlyArray<{ severity: IncidentSeverity; status: string }>,
|
|
): ServiceStatusLevel {
|
|
let selected: IncidentSeverity | null = null;
|
|
for (const incident of incidents) {
|
|
if (incident.status !== "active") continue;
|
|
if (!selected || severityRank[incident.severity] > severityRank[selected]) {
|
|
selected = incident.severity;
|
|
}
|
|
}
|
|
return selected ?? "operational";
|
|
}
|