fester/backend/metrics/node_state.py

40 lines
745 B
Python

from dataclasses import dataclass, field
from typing import Dict
@dataclass
class NodeState:
name: str
cpu_load: float = 0.0
memory_load: float = 0.0
temp: float = 0.0
instability: float = 0.0
active_jobs: int = 0
last_seen: float = 0.0
labels: Dict = field(default_factory=dict)
class NodeStateRegistry:
def __init__(self):
self.nodes = {}
def update(self, name, **kwargs):
if name not in self.nodes:
self.nodes[name] = NodeState(name=name)
node = self.nodes[name]
for k, v in kwargs.items():
setattr(node, k, v)
def get(self, name):
return self.nodes.get(name)
def all(self):
return list(self.nodes.values())