from typing import List, Optional from pydantic import UUID4, BaseModel, ConfigDict, Field from time import time_ns class CPU(BaseModel): model_config = ConfigDict() current_time:int = Field(default_factory=time_ns) time:int = Field() user:int = Field() system:int = Field() count:int = Field() class DiskFlows(BaseModel): bytes:int = Field() reqs:int = Field() times:int = Field() class Disk(BaseModel): model_config = ConfigDict() current_time:int = Field(default_factory=time_ns) uuid:UUID4 = Field() name:str = Field() read:DiskFlows = Field() write:DiskFlows = Field() class MemorySwap(BaseModel): swp_in:Optional[int] = Field(default=None, serialization_alias="in") swp_out:Optional[int] = Field(default=None, serialization_alias="out") class Memory(BaseModel): model_config = ConfigDict() current_time:int = Field() available:Optional[int] = Field(default=None) current:int = Field() maximum:int = Field() disk_caches:Optional[int] = Field(default=None) rss:int = Field() swap:MemorySwap = Field() unused:Optional[int] = Field(default=None) usable:Optional[int] = Field(default=None) class InterfaceFlows(BaseModel): bytes:int = Field() drop:int = Field() errs:int = Field() pkts:int = Field() class Interface(BaseModel): model_config = ConfigDict() uuid:UUID4 = Field() current_time:int = Field(default_factory=time_ns) name:str = Field() rx:InterfaceFlows = Field() tx:InterfaceFlows = Field() class Stats(BaseModel): company_id:UUID4 = Field() datacenter_id:UUID4 = Field() vm_id:UUID4 = Field() cpu:CPU = Field() memory:Memory = Field() network:List[Interface] = Field() disk:List[Disk] = Field()