mirror of
https://forgejo.altau.su/lego/lego-monitoring.git
synced 2026-03-12 05:35:19 +00:00
add temp monitoring
This commit is contained in:
parent
19ee6f487b
commit
758438382d
13 changed files with 272 additions and 25 deletions
51
src/lego_monitoring/config/__init__.py
Normal file
51
src/lego_monitoring/config/__init__.py
Normal 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
|
||||
24
src/lego_monitoring/config/checks/temp.py
Normal file
24
src/lego_monitoring/config/checks/temp.py
Normal 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]
|
||||
Loading…
Add table
Add a link
Reference in a new issue