51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
|
import enum
|
||
|
from datetime import datetime
|
||
|
|
||
|
from app import db
|
||
|
|
||
|
|
||
|
class AlarmState(enum.Enum):
|
||
|
UNKNOWN = 0
|
||
|
OK = 1
|
||
|
WARNING = 2
|
||
|
CRITICAL = 3
|
||
|
|
||
|
|
||
|
class Alarm(db.Model):
|
||
|
id = db.Column(db.Integer, primary_key=True)
|
||
|
target = db.Column(db.String(60), nullable=False)
|
||
|
group_id = db.Column(db.Integer, db.ForeignKey("group.id"))
|
||
|
origin_id = db.Column(db.Integer, db.ForeignKey("origin.id"))
|
||
|
proxy_id = db.Column(db.Integer, db.ForeignKey("proxy.id"))
|
||
|
bridge_id = db.Column(db.Integer, db.ForeignKey("bridge.id"))
|
||
|
alarm_type = db.Column(db.String(255), nullable=False)
|
||
|
alarm_state = db.Column(db.Enum(AlarmState), default=AlarmState.UNKNOWN, nullable=False)
|
||
|
state_changed = db.Column(db.DateTime(), nullable=False)
|
||
|
last_updated = db.Column(db.DateTime())
|
||
|
text = db.Column(db.String(255))
|
||
|
|
||
|
group = db.relationship("Group", back_populates="alarms")
|
||
|
origin = db.relationship("Origin", back_populates="alarms")
|
||
|
proxy = db.relationship("Proxy", back_populates="alarms")
|
||
|
bridge = db.relationship("Bridge", back_populates="alarms")
|
||
|
|
||
|
@classmethod
|
||
|
def csv_header(cls):
|
||
|
return [
|
||
|
"id", "target", "group_id", "origin_id", "proxy_id", "bridge_id", "alarm_type",
|
||
|
"alarm_state", "state_changed", "last_updated", "text"
|
||
|
]
|
||
|
|
||
|
def csv_row(self):
|
||
|
return [
|
||
|
self[x] for x in self.csv_header()
|
||
|
]
|
||
|
|
||
|
def update_state(self, state: AlarmState, text: str):
|
||
|
if self.alarm_state != state or self.state_changed is None:
|
||
|
self.state_changed = datetime.utcnow()
|
||
|
self.alarm_state = state
|
||
|
self.text = text
|
||
|
self.last_updated = datetime.utcnow()
|
||
|
db.session.commit()
|