alarms: target really needs to be str

This commit is contained in:
Iain Learmonth 2022-06-17 13:24:51 +01:00
parent 98895e47de
commit 66b3ccc0f0
2 changed files with 8 additions and 6 deletions

View file

@ -1,6 +1,7 @@
import datetime
from typing import Optional, List
from app.brm.brn import BRN
from app.extensions import db
from app.models.alarms import Alarm
@ -11,17 +12,18 @@ def alarms_for(target: str) -> List[Alarm]:
).all())
def _get_alarm(target: str,
def _get_alarm(target: BRN,
aspect: str,
create_if_missing: bool = True) -> Optional[Alarm]:
target_str = str(target)
alarm: Optional[Alarm] = Alarm.query.filter(
Alarm.aspect == aspect,
Alarm.target == target
Alarm.target == target_str
).first()
if create_if_missing and alarm is None:
alarm = Alarm()
alarm.aspect = aspect
alarm.target = target
alarm.target = target_str
alarm.text = "New alarm"
alarm.state_changed = datetime.datetime.utcnow()
alarm.last_updated = datetime.datetime.utcnow()
@ -29,11 +31,11 @@ def _get_alarm(target: str,
return alarm
def get_alarm(target: str, aspect: str) -> Optional[Alarm]:
def get_alarm(target: BRN, aspect: str) -> Optional[Alarm]:
return _get_alarm(target, aspect, create_if_missing=False)
def get_or_create_alarm(target: str, aspect: str) -> Alarm:
def get_or_create_alarm(target: BRN, aspect: str) -> Alarm:
alarm = _get_alarm(target, aspect, create_if_missing=True)
if alarm is None:
raise RuntimeError("Asked for an alarm to be created but got None.")

View file

@ -38,7 +38,7 @@ class Alarm(db.Model): # type: ignore
self.state_changed = datetime.utcnow()
activity = Activity(activity_type="alarm_state",
text=f"{self.alarm_state.name}->{state.name}! State changed for "
f"{self.aspect} on {str(self.target)}: {text}")
f"{self.aspect} on {self.target}: {text}")
if (self.alarm_state.name in ["WARNING", "CRITICAL"]
or state.name in ["WARNING", "CRITICAL", "UNKNOWN"]):
# Notifications are only sent on recovery from warning/critical state or on entry