Files
ModelForge-Public/backend/src/modelforge_api/domain/self_check.py
T

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)