64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
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() |