125 lines
3.3 KiB
Python
125 lines
3.3 KiB
Python
"""Typed contracts for the System Health overview."""
|
|
|
|
from datetime import date, datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
Availability = Literal["available", "unavailable"]
|
|
MigrationState = Literal["current", "mismatch", "unavailable"]
|
|
|
|
|
|
class ApplicationDiagnostics(BaseModel):
|
|
status: Literal["available"] = "available"
|
|
environment: str
|
|
build_commit: str | None = None
|
|
build_version: str | None = None
|
|
server_time: datetime
|
|
expected_migration_head: str | None = None
|
|
|
|
|
|
class MigrationDiagnostics(BaseModel):
|
|
state: MigrationState
|
|
current_revision: str | None = None
|
|
expected_revision: str | None = None
|
|
|
|
|
|
class TableCount(BaseModel):
|
|
name: str
|
|
row_count: int
|
|
|
|
|
|
class TableSize(BaseModel):
|
|
name: str
|
|
total_bytes: int
|
|
|
|
|
|
class TelemetryDiagnostics(BaseModel):
|
|
snapshot_count: int
|
|
oldest_observed_at: datetime | None = None
|
|
latest_observed_at: datetime | None = None
|
|
|
|
|
|
class FleetIntegrityDiagnostics(BaseModel):
|
|
total_miners: int
|
|
miners_without_asset_id: int
|
|
unmapped_miners: int
|
|
miners_in_multiple_positions: int
|
|
duplicate_current_mac_groups: int
|
|
|
|
|
|
class LocationIntegrityDiagnostics(BaseModel):
|
|
sites: int
|
|
rooms: int
|
|
positions: int
|
|
occupied_positions: int
|
|
empty_positions: int
|
|
unscoped_legacy_positions: int
|
|
expected_mac_mismatches: int
|
|
|
|
|
|
class RepairIntegrityDiagnostics(BaseModel):
|
|
active_modular_repairs: int
|
|
duplicate_active_repair_groups: int
|
|
legacy_repair_only_miners: int
|
|
lifecycle_repair_without_active_repair: int
|
|
active_repair_lifecycle_mismatches: int
|
|
waiting_placement_records: int
|
|
repair_events: int
|
|
repair_parts: int
|
|
|
|
|
|
class RollupDiagnostics(BaseModel):
|
|
table_present: bool
|
|
row_count: int | None = None
|
|
latest_bucket: datetime | date | None = None
|
|
population: Literal["manual"] = "manual"
|
|
|
|
|
|
class RetentionDiagnostics(BaseModel):
|
|
raw_retention_enabled: Literal[False] = False
|
|
raw_retention_mode: Literal["not_enabled"] = "not_enabled"
|
|
hourly: RollupDiagnostics
|
|
daily: RollupDiagnostics
|
|
latest_recorded_run_at: datetime | None = None
|
|
latest_recorded_run_mode: str | None = None
|
|
completeness: Literal["not_guaranteed"] = "not_guaranteed"
|
|
|
|
|
|
class PostgreSQLDiagnostics(BaseModel):
|
|
status: Availability
|
|
migration: MigrationDiagnostics
|
|
table_counts: list[TableCount] = Field(default_factory=list)
|
|
largest_tables: list[TableSize] = Field(default_factory=list)
|
|
telemetry: TelemetryDiagnostics | None = None
|
|
fleet: FleetIntegrityDiagnostics | None = None
|
|
locations: LocationIntegrityDiagnostics | None = None
|
|
repairs: RepairIntegrityDiagnostics | None = None
|
|
retention: RetentionDiagnostics | None = None
|
|
|
|
|
|
class RedisDiagnostics(BaseModel):
|
|
status: Availability
|
|
|
|
|
|
class SystemHealthOverviewData(BaseModel):
|
|
application: ApplicationDiagnostics
|
|
postgresql: PostgreSQLDiagnostics
|
|
redis: RedisDiagnostics
|
|
|
|
|
|
class SystemHealthOverviewMeta(BaseModel):
|
|
generated_at: datetime
|
|
partial: bool
|
|
unavailable_sections: list[str] = Field(default_factory=list)
|
|
frontend_request_count: Literal[1] = 1
|
|
postgresql_statement_count: Literal[3] = 3
|
|
redis_call_count: Literal[1] = 1
|
|
|
|
|
|
class SystemHealthOverviewResponse(BaseModel):
|
|
data: SystemHealthOverviewData
|
|
meta: SystemHealthOverviewMeta
|
|
error: None = None
|