add temp monitoring

This commit is contained in:
Alex Tau 2025-05-02 15:25:27 +03:00
parent 19ee6f487b
commit 758438382d
13 changed files with 272 additions and 25 deletions

View file

@ -0,0 +1,51 @@
import json
from dataclasses import dataclass
from alt_utils import NestedDeserializableDataclass
from .checks.temp import TempCheckConfig
@dataclass
class ChecksConfig(NestedDeserializableDataclass):
temp: TempCheckConfig
@dataclass
class TelegramConfig:
creds: str
room_id: int
@dataclass
class Config(NestedDeserializableDataclass):
enabled_check_sets: list[str]
checks: ChecksConfig
telegram: TelegramConfig
def load_config(filepath: str) -> Config:
def load_secrets(d: dict) -> dict:
new_d = {}
for k in d:
if k.endswith("_secret_path"):
actual_opt_key = k[:-12]
secret_path = d[k]
if secret_path is None:
new_d[actual_opt_key] = None
else:
with open(secret_path) as sf:
new_d[actual_opt_key] = sf.read().rstrip()
elif type(d[k]) == dict:
new_d[k] = load_secrets(d[k])
else:
new_d[k] = d[k]
return new_d
with open(filepath) as f:
cfg_dict = json.load(f)
new_cfg_dict = load_secrets(cfg_dict)
cfg = Config.from_dict(new_cfg_dict)
return cfg

View file

@ -0,0 +1,24 @@
from dataclasses import dataclass
from typing import Optional
from alt_utils import NestedDeserializableDataclass
@dataclass
class TempReadingConfig:
label: Optional[str]
enabled: bool
warning_temp: Optional[float]
critical_temp: Optional[float]
@dataclass
class TempSensorConfig(NestedDeserializableDataclass):
name: Optional[str]
enabled: bool
readings: dict[str, TempReadingConfig]
@dataclass
class TempCheckConfig(NestedDeserializableDataclass):
sensors: dict[str, TempSensorConfig]