73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from enum import StrEnum
|
|
|
|
from pydantic import BaseModel, Field, JsonValue
|
|
|
|
|
|
class SelfCheckStatus(StrEnum):
|
|
PASS = "pass" # noqa: S105 - diagnostic status, not a credential
|
|
WARN = "warn"
|
|
FAIL = "fail"
|
|
UNKNOWN = "unknown"
|
|
|
|
|
|
class SelfCheckKey(StrEnum):
|
|
API = "api"
|
|
DATABASE = "database"
|
|
REDIS = "redis"
|
|
MANIFESTS = "manifests"
|
|
STORAGE = "storage"
|
|
NODES = "nodes"
|
|
SCHEDULER = "scheduler"
|
|
DEPLOYMENTS = "deployments"
|
|
BACKUP = "backup"
|
|
CREDENTIALS = "credentials"
|
|
CONFIGURATION = "configuration"
|
|
RELEASE = "release"
|
|
|
|
|
|
class SelfCheckActionCode(StrEnum):
|
|
NONE_REQUIRED = "none_required"
|
|
REVIEW_API_IDENTITY = "review_api_identity"
|
|
CHECK_DATABASE = "check_database"
|
|
CHECK_REDIS = "check_redis"
|
|
REVIEW_MANIFESTS = "review_manifests"
|
|
REVIEW_STORAGE = "review_storage"
|
|
REVIEW_NODE_FRESHNESS = "review_node_freshness"
|
|
REVIEW_SCHEDULER_INPUTS = "review_scheduler_inputs"
|
|
REVIEW_DEPLOYMENTS = "review_deployments"
|
|
VERIFY_BACKUP_PAYLOAD = "verify_backup_payload"
|
|
REVIEW_CREDENTIALS = "review_credentials"
|
|
COMPLETE_CONFIGURATION = "complete_configuration"
|
|
VERIFY_RELEASE_IDENTITY = "verify_release_identity"
|
|
|
|
|
|
class SelfCheckOverall(StrEnum):
|
|
HEALTHY = "healthy"
|
|
DEGRADED = "degraded"
|
|
UNHEALTHY = "unhealthy"
|
|
|
|
|
|
class SelfCheckNextAction(BaseModel):
|
|
code: SelfCheckActionCode
|
|
summary: str
|
|
|
|
|
|
class SelfCheckResult(BaseModel):
|
|
key: SelfCheckKey
|
|
label: str
|
|
status: SelfCheckStatus
|
|
summary: str
|
|
detail: str | None = None
|
|
evidence: dict[str, JsonValue] = Field(default_factory=dict)
|
|
next_action: SelfCheckNextAction
|
|
|
|
|
|
class SelfCheckReport(BaseModel):
|
|
observed_at: datetime
|
|
overall: SelfCheckOverall
|
|
read_only: bool = True
|
|
checks: list[SelfCheckResult] = Field(default_factory=list)
|