86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
"""Typed contracts for miner control capabilities and operations."""
|
|
|
|
from datetime import datetime
|
|
from typing import Literal
|
|
from uuid import UUID
|
|
|
|
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field
|
|
|
|
|
|
ControlAction = Literal["suspend", "resume", "performance_mode"]
|
|
CapabilityState = Literal["supported", "unavailable", "unknown"]
|
|
QueueStatus = Literal["pending", "claimed", "completed", "failed", "cancelled"]
|
|
VerificationStatus = Literal[
|
|
"confirmed", "verification_failed", "unconfirmed", "unavailable"
|
|
]
|
|
PerformanceMode = Literal["low", "normal", "high"]
|
|
|
|
|
|
class EmptyControlRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
|
|
class PerformanceModeRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
mode: PerformanceMode
|
|
|
|
|
|
class ControlCapability(BaseModel):
|
|
state: CapabilityState
|
|
reason: str | None = None
|
|
|
|
|
|
class ControlAgentAvailability(BaseModel):
|
|
state: CapabilityState
|
|
reason: str | None = None
|
|
last_checkin_at: AwareDatetime | None = None
|
|
version: str | None = None
|
|
|
|
|
|
class MinerControlOperation(BaseModel):
|
|
operation_id: str
|
|
miner_id: UUID
|
|
action: ControlAction
|
|
requested_value: str | None = None
|
|
status: QueueStatus
|
|
verification_status: VerificationStatus | None = None
|
|
command_accepted: bool | None = None
|
|
observed_performance_mode: PerformanceMode | None = None
|
|
failure_code: str | None = None
|
|
created_at: AwareDatetime
|
|
claimed_at: AwareDatetime | None = None
|
|
completed_at: AwareDatetime | None = None
|
|
|
|
|
|
class MinerControlProjection(BaseModel):
|
|
miner_id: UUID
|
|
runtime_state: str | None = None
|
|
performance_mode: PerformanceMode | None = None
|
|
agent: ControlAgentAvailability
|
|
service_control: ControlCapability
|
|
performance_mode_control: ControlCapability
|
|
available_service_action: Literal["suspend", "resume"] | None = None
|
|
recent_operations: list[MinerControlOperation]
|
|
|
|
|
|
class MinerControlResponse(BaseModel):
|
|
data: MinerControlProjection
|
|
meta: dict[str, object] = Field(default_factory=dict)
|
|
error: None = None
|
|
|
|
|
|
class MinerControlAccepted(BaseModel):
|
|
operation_id: str
|
|
miner_id: UUID
|
|
action: ControlAction
|
|
requested_value: str | None = None
|
|
status: Literal["pending"]
|
|
created_at: datetime
|
|
|
|
|
|
class MinerControlAcceptedResponse(BaseModel):
|
|
data: MinerControlAccepted
|
|
meta: dict[str, object] = Field(default_factory=dict)
|
|
error: None = None
|