from typing import Sequence from .monitor_check_status import CheckStatus from .monitor_component_state_types import ComponentState def component_state(statuses: Sequence[CheckStatus], under_maintenance: bool) -> ComponentState: """One component's state in Atlassian Statuspage's vocabulary. Maintenance wins, so planned work never pages anyone as an outage; the statuses are still checked, so a bad feed fails loudly even during maintenance.""" if len(statuses) == 0: raise ValueError("statuses must not be empty") if not isinstance(under_maintenance, bool): raise ValueError("underMaintenance must be true or false") down = 0 degraded = 0 for s in statuses: if s == "down": down += 1 elif s == "degraded": degraded += 1 elif s != "up": raise ValueError("unknown check status: %s" % (s,)) if under_maintenance: return "maintenance" if down == len(statuses): return "major-outage" if down > 0: return "partial-outage" return "degraded" if degraded > 0 else "operational"