119 lines
3.1 KiB
Python
119 lines
3.1 KiB
Python
"""Typed contracts for the read-only Mine Map."""
|
|
|
|
from datetime import datetime
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class MapSite(BaseModel):
|
|
id: UUID
|
|
name: str
|
|
|
|
|
|
class MapRoom(BaseModel):
|
|
id: UUID
|
|
site_id: UUID
|
|
site_name: str
|
|
name: str
|
|
sort_order: int
|
|
|
|
|
|
class MapActiveRepair(BaseModel):
|
|
id: UUID
|
|
status: str
|
|
reason: str
|
|
|
|
|
|
class MapPosition(BaseModel):
|
|
location_position_id: UUID
|
|
site_id: UUID | None = None
|
|
site_name: str | None = None
|
|
room_id: UUID | None = None
|
|
room_name: str
|
|
rack_name: str
|
|
shelf_name: str
|
|
shelf_index: int | None = None
|
|
position_index: int
|
|
position_label: str | None = None
|
|
position_kind: str
|
|
position_status: str
|
|
occupied: bool
|
|
expected_mac: str | None = None
|
|
equipment_label: str | None = None
|
|
notes: str | None = None
|
|
source_file: str | None = None
|
|
source_cell: str | None = None
|
|
conflict_reason: str | None = None
|
|
miner_id: UUID | None = None
|
|
asset_id: str | None = None
|
|
current_mac: str | None = None
|
|
current_ip: str | None = None
|
|
miner_status: str | None = None
|
|
hostname: str | None = None
|
|
miner_sn: str | None = None
|
|
power_sn: str | None = None
|
|
model: str | None = None
|
|
miner_type: str | None = None
|
|
firmware_version: str | None = None
|
|
lifecycle_status: str | None = None
|
|
last_seen_at: datetime | None = None
|
|
asset_state: str | None = None
|
|
observed_at: datetime | None = None
|
|
hashrate_ths: float | None = None
|
|
power_w: float | None = None
|
|
chip_temp_max_c: float | None = None
|
|
chip_temp_avg_c: float | None = None
|
|
hash_stable: bool | None = None
|
|
pool_rejected_percent: float | None = None
|
|
active_repair: MapActiveRepair | None = None
|
|
|
|
|
|
class MapVirtualMiner(BaseModel):
|
|
miner_id: UUID | None = None
|
|
site_id: UUID | None = None
|
|
room_id: UUID | None = None
|
|
asset_id: str | None = None
|
|
asset_state: str
|
|
current_mac: str | None = None
|
|
current_ip: str | None = None
|
|
miner_status: str | None = None
|
|
status: str | None = None
|
|
hostname: str | None = None
|
|
miner_sn: str | None = None
|
|
power_sn: str | None = None
|
|
model: str | None = None
|
|
miner_type: str | None = None
|
|
firmware_version: str | None = None
|
|
lifecycle_status: str | None = None
|
|
last_seen_at: datetime | None = None
|
|
observed_at: datetime | None = None
|
|
hashrate_ths: float | None = None
|
|
power_w: float | None = None
|
|
chip_temp_max_c: float | None = None
|
|
chip_temp_avg_c: float | None = None
|
|
hash_stable: bool | None = None
|
|
active_repair: MapActiveRepair | None = None
|
|
|
|
|
|
class MineMapData(BaseModel):
|
|
sites: list[MapSite]
|
|
rooms: list[MapRoom]
|
|
positions: list[MapPosition]
|
|
virtual_miners: list[MapVirtualMiner]
|
|
|
|
|
|
class MineMapMeta(BaseModel):
|
|
generated_at: datetime
|
|
site_id: UUID | None = None
|
|
room_id: UUID | None = None
|
|
position_count: int
|
|
virtual_miner_count: int
|
|
miner_details_included: bool
|
|
|
|
|
|
class MineMapResponse(BaseModel):
|
|
data: MineMapData
|
|
meta: MineMapMeta
|
|
error: None = None
|