alarms: target really needs to be str
This commit is contained in:
parent
98895e47de
commit
66b3ccc0f0
2 changed files with 8 additions and 6 deletions
|
@ -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.")
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue