40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
import datetime
|
|
from typing import Optional, List
|
|
|
|
from app.extensions import db
|
|
from app.models.alarms import Alarm
|
|
|
|
|
|
def alarms_for(target: str) -> List[Alarm]:
|
|
return list(Alarm.query.filter(
|
|
Alarm.target == target
|
|
).all())
|
|
|
|
|
|
def _get_alarm(target: str,
|
|
aspect: str,
|
|
create_if_missing: bool = True) -> Optional[Alarm]:
|
|
alarm: Optional[Alarm] = Alarm.query.filter(
|
|
Alarm.aspect == aspect,
|
|
Alarm.target == target
|
|
).first()
|
|
if create_if_missing and alarm is None:
|
|
alarm = Alarm()
|
|
alarm.aspect = aspect
|
|
alarm.target = target
|
|
alarm.text = "New alarm"
|
|
alarm.state_changed = datetime.datetime.utcnow()
|
|
alarm.last_updated = datetime.datetime.utcnow()
|
|
db.session.add(alarm)
|
|
return alarm
|
|
|
|
|
|
def get_alarm(target: str, aspect: str) -> Optional[Alarm]:
|
|
return _get_alarm(target, aspect, create_if_missing=False)
|
|
|
|
|
|
def get_or_create_alarm(target: str, 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.")
|
|
return alarm
|