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 import datetime
from typing import Optional, List from typing import Optional, List
from app.brm.brn import BRN
from app.extensions import db from app.extensions import db
from app.models.alarms import Alarm from app.models.alarms import Alarm
@ -11,17 +12,18 @@ def alarms_for(target: str) -> List[Alarm]:
).all()) ).all())
def _get_alarm(target: str, def _get_alarm(target: BRN,
aspect: str, aspect: str,
create_if_missing: bool = True) -> Optional[Alarm]: create_if_missing: bool = True) -> Optional[Alarm]:
target_str = str(target)
alarm: Optional[Alarm] = Alarm.query.filter( alarm: Optional[Alarm] = Alarm.query.filter(
Alarm.aspect == aspect, Alarm.aspect == aspect,
Alarm.target == target Alarm.target == target_str
).first() ).first()
if create_if_missing and alarm is None: if create_if_missing and alarm is None:
alarm = Alarm() alarm = Alarm()
alarm.aspect = aspect alarm.aspect = aspect
alarm.target = target alarm.target = target_str
alarm.text = "New alarm" alarm.text = "New alarm"
alarm.state_changed = datetime.datetime.utcnow() alarm.state_changed = datetime.datetime.utcnow()
alarm.last_updated = datetime.datetime.utcnow() alarm.last_updated = datetime.datetime.utcnow()
@ -29,11 +31,11 @@ def _get_alarm(target: str,
return alarm 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) 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) alarm = _get_alarm(target, aspect, create_if_missing=True)
if alarm is None: if alarm is None:
raise RuntimeError("Asked for an alarm to be created but got 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() self.state_changed = datetime.utcnow()
activity = Activity(activity_type="alarm_state", activity = Activity(activity_type="alarm_state",
text=f"{self.alarm_state.name}->{state.name}! State changed for " 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"] if (self.alarm_state.name in ["WARNING", "CRITICAL"]
or state.name in ["WARNING", "CRITICAL", "UNKNOWN"]): or state.name in ["WARNING", "CRITICAL", "UNKNOWN"]):
# Notifications are only sent on recovery from warning/critical state or on entry # Notifications are only sent on recovery from warning/critical state or on entry