app backend prima
This commit is contained in:
78
app/models/allarme.py
Normal file
78
app/models/allarme.py
Normal file
@@ -0,0 +1,78 @@
|
||||
from sqlalchemy import Column, Integer, String, DateTime, Float, ForeignKey, Enum as SQLEnum, JSON, Text
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
import enum
|
||||
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class SeveritaAllarme(str, enum.Enum):
|
||||
"""Livelli di severità degli allarmi"""
|
||||
CRITICAL = "critical" # Critico - richiede azione immediata
|
||||
WARNING = "warning" # Avviso - richiede attenzione
|
||||
INFO = "info" # Informativo
|
||||
|
||||
|
||||
class StatoAllarme(str, enum.Enum):
|
||||
"""Stati di un allarme"""
|
||||
NUOVO = "nuovo"
|
||||
VISUALIZZATO = "visualizzato"
|
||||
IN_GESTIONE = "in_gestione"
|
||||
RISOLTO = "risolto"
|
||||
FALSO_POSITIVO = "falso_positivo"
|
||||
|
||||
|
||||
class TipoAllarme(str, enum.Enum):
|
||||
"""Tipologie di allarmi"""
|
||||
MOVIMENTO_TERRENO = "movimento_terreno"
|
||||
DEFORMAZIONE = "deformazione"
|
||||
ACCELERAZIONE = "accelerazione"
|
||||
INCLINAZIONE = "inclinazione"
|
||||
FESSURAZIONE = "fessurazione"
|
||||
VIBRAZIONE = "vibrazione"
|
||||
TEMPERATURA_ANOMALA = "temperatura_anomala"
|
||||
UMIDITA_ANOMALA = "umidita_anomala"
|
||||
PERDITA_SEGNALE = "perdita_segnale"
|
||||
BATTERIA_SCARICA = "batteria_scarica"
|
||||
ALTRO = "altro"
|
||||
|
||||
|
||||
class Allarme(Base):
|
||||
"""Modello per gli allarmi generati dal sistema di monitoraggio"""
|
||||
|
||||
__tablename__ = "allarmi"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
sito_id = Column(Integer, ForeignKey("siti.id"), nullable=False)
|
||||
|
||||
# Classificazione allarme
|
||||
tipo = Column(SQLEnum(TipoAllarme), nullable=False)
|
||||
severita = Column(SQLEnum(SeveritaAllarme), nullable=False, index=True)
|
||||
stato = Column(SQLEnum(StatoAllarme), default=StatoAllarme.NUOVO, index=True)
|
||||
|
||||
# Dettagli allarme
|
||||
titolo = Column(String(255), nullable=False)
|
||||
descrizione = Column(Text)
|
||||
messaggio = Column(Text)
|
||||
|
||||
# Dati sensori (JSON con i valori rilevati)
|
||||
dati_sensori = Column(JSON)
|
||||
|
||||
# Valori soglia
|
||||
valore_rilevato = Column(Float)
|
||||
valore_soglia = Column(Float)
|
||||
unita_misura = Column(String(20))
|
||||
|
||||
# Metadata temporale
|
||||
timestamp_rilevamento = Column(DateTime(timezone=True), nullable=False, index=True)
|
||||
timestamp_notifica = Column(DateTime(timezone=True))
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
# Note operative
|
||||
note = Column(Text)
|
||||
risolto_da = Column(String(255))
|
||||
timestamp_risoluzione = Column(DateTime(timezone=True))
|
||||
|
||||
# Relazioni
|
||||
sito = relationship("Sito", back_populates="allarmi")
|
||||
Reference in New Issue
Block a user