From 66b3ccc0f0da34a4a6093d4d6458bf88fcc7069c Mon Sep 17 00:00:00 2001 From: Iain Learmonth Date: Fri, 17 Jun 2022 13:24:51 +0100 Subject: [PATCH] alarms: target really needs to be str --- app/alarms.py | 12 +++++++----- app/models/alarms.py | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/alarms.py b/app/alarms.py index e35e4ac..5f6dfb5 100644 --- a/app/alarms.py +++ b/app/alarms.py @@ -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.") diff --git a/app/models/alarms.py b/app/models/alarms.py index 5b4590e..b5657cf 100644 --- a/app/models/alarms.py +++ b/app/models/alarms.py @@ -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