platypush/platypush/schemas/system/_cpu/_model.py

179 lines
3.9 KiB
Python

from dataclasses import dataclass, field
from typing import List, Optional, Tuple
from platypush.schemas.dataclasses import percent_field
@dataclass
class CpuInfo:
"""
CPU info data class.
"""
architecture: Optional[str] = field(
metadata={
'data_key': 'arch_string_raw',
'metadata': {
'description': 'CPU architecture',
'example': 'x86_64',
},
}
)
bits: int = field(
metadata={
'metadata': {
'description': 'CPU bits / register size',
'example': 64,
}
}
)
cores: int = field(
metadata={
'data_key': 'count',
'metadata': {
'description': 'Number of cores',
'example': 4,
},
}
)
vendor: Optional[str] = field(
metadata={
'data_key': 'vendor_id_raw',
'metadata': {
'description': 'Vendor string',
'example': 'GenuineIntel',
},
}
)
brand: Optional[str] = field(
metadata={
'data_key': 'brand_raw',
'metadata': {
'description': 'CPU brand string',
'example': 'Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz',
},
}
)
frequency_advertised: Optional[int] = field(
metadata={
'metadata': {
'description': 'Advertised CPU frequency, in Hz',
'example': 2400000000,
}
}
)
frequency_actual: Optional[int] = field(
metadata={
'metadata': {
'description': 'Actual CPU frequency, in Hz',
'example': 2350000000,
}
}
)
flags: List[str] = field(
metadata={
'metadata': {
'description': 'CPU flags',
'example': ['acpi', 'aes', 'cpuid'],
}
}
)
l1_instruction_cache_size: Optional[int] = field(
metadata={
'metadata': {
'description': 'Size of the L1 instruction cache, in bytes',
'example': 65536,
}
}
)
l1_data_cache_size: Optional[int] = field(
metadata={
'metadata': {
'description': 'Size of the L1 data cache, in bytes',
'example': 65536,
}
}
)
l2_cache_size: Optional[int] = field(
metadata={
'metadata': {
'description': 'Size of the L2 cache, in bytes',
'example': 524288,
}
}
)
l3_cache_size: Optional[int] = field(
metadata={
'metadata': {
'description': 'Size of the L2 cache, in bytes',
'example': 4194304,
}
}
)
@dataclass
class CpuTimes:
"""
CPU times data class.
"""
user: Optional[float] = percent_field()
nice: Optional[float] = percent_field()
system: Optional[float] = percent_field()
idle: Optional[float] = percent_field()
iowait: Optional[float] = percent_field()
irq: Optional[float] = percent_field()
softirq: Optional[float] = percent_field()
steal: Optional[float] = percent_field()
guest: Optional[float] = percent_field()
guest_nice: Optional[float] = percent_field()
@dataclass
class CpuStats:
"""
CPU stats data class.
"""
ctx_switches: int
interrupts: int
soft_interrupts: int
syscalls: int
@dataclass
class CpuFrequency:
"""
CPU frequency data class.
"""
current: float
min: float
max: float
@dataclass
class Cpu:
"""
CPU data aggregate dataclass.
"""
info: CpuInfo
times: CpuTimes
frequency: CpuFrequency
stats: CpuStats
load_avg: Tuple[float, float, float]
percent: float = percent_field()