Source code for perun.data_model.sensor
"""Device module."""
import enum
from dataclasses import asdict, dataclass
from typing import Any, Callable
from perun.data_model.measurement_type import MetricMetaData, Number
[docs]
class DeviceType(str, enum.Enum):
"""DeviceType enum."""
RACK = "rack"
NODE = "node"
CPU = "cpu"
GPU = "gpu"
RAM = "ram"
DISK = "disk"
NET = "net"
FAN = "fan"
OTHER = "other"
[docs]
@dataclass
class Sensor:
"""Defines a devices sensor properties."""
id: str
type: DeviceType
metadata: dict
dataType: MetricMetaData
measureCallback: Callable[[], Number]
[docs]
def read(self) -> Number:
"""Read value from sensor."""
return self.measureCallback()
[docs]
def toDict(self) -> dict[str, Any]:
"""Return device as a dictionary."""
return {
"id": self.id,
"type": self.type.value,
"metadata": self.metadata,
"dataType": asdict(self.dataType),
}