"""Per-printer supply alert state. The supply poller (flask printers check-toner-alerts) is stateless: it reads live levels from Zabbix each run. To alert once per downward crossing (and re-arm after a refill) it needs to remember the last tier it alerted for each printer + supply. One row per (printerid, supplykey); supplykey is the toner color (black/cyan/magenta/yellow) or the raw item name when color is unknown. """ from shopdb.extensions import db from shopdb.core.models.base import BaseModel class PrinterSupplyAlert(BaseModel): """Last-alerted tier for one printer supply. lasttier in ok/warning/critical.""" __tablename__ = 'printersupplyalerts' printersupplyalertid = db.Column(db.Integer, primary_key=True) printerid = db.Column( db.Integer, db.ForeignKey('printers.printerid', ondelete='CASCADE'), nullable=False, index=True, ) supplykey = db.Column( db.String(64), nullable=False, comment='Toner color, or Zabbix item name when color is unknown', ) lasttier = db.Column( db.String(16), nullable=False, default='ok', comment='Last tier alerted: ok, warning, or critical', ) __table_args__ = ( db.UniqueConstraint('printerid', 'supplykey', name='uq_printersupplyalert_printer_key'), )