Stiamo costruendo un'applicazione web per monitorare le strutture industriali e abbiamo bisogno di aggiungere un modulo per avvisare gli utenti quando accadono certe cose nel sistema.
Otteniamo dati (molti dati) dalle macchine dell'impianto come serie di dati di 10 minuti (un valore ogni 10 minuti, come temperature dei componenti della macchina, prestazioni di uscita, consumo di energia, ecc.) e memorizziamo i dati in un DB cassandra . Il framework utilizzato è Django.
Questi sono il tipo di cose che dobbiamo notificare (e dobbiamo emettere la notifica quando si verifica l'evento, quindi nessuna elaborazione in batch):
-
Quando una macchina è stata inferiore al 90% delle sue prestazioni teoriche per 60 minuti consecutivi (ovvero 6 righe di dati di 10 minuti), ma non se la macchina è stata arrestata manualmente.
-
Quando l'intera struttura è stata inferiore al 95% della sua prestazione teorica per due ore consecutive.
-
Quando una macchina viene arrestata manualmente.
-
Quando la produzione mensile raggiunge il 50% del previsto.
-
Etc, ecc.
I dettagli della notifica (percentuali, intervalli temporali, ecc.) dovrebbero essere configurabili per utente.
Stiamo cercando un design tanto generico quanto posible, perché l'elenco delle notifiche disponibili crescerà in futuro. Qualcuno ha affrontato un problema simile? Come ti sei comportato?
Sto solo cercando suggerimenti generali su come progettarlo, ecco perché non sto dando troppe informazioni specifiche.
Aggiorna
Sto chiedendo aiuto su come progettare il sistema generale. Il problema è come definire le regole per ogni notifica, dato che devo tenere d'occhio l'evoluzione dei dati (la notifica non è definita come "qualcosa è successo", ma come "qualcosa è successo e ha continuato a succedere per X volta in una riga ".
Le domande principali sono:
-
Come dovrei memorizzare le regole delle notifiche?
-
Come dovrei controllare se una nuova notifica deve essere inviata all'utente? Interrogare il database ogni volta che inserisco i dati o esiste un modo più elegante? Devo mantenere lo stato di ogni possibile positivo fino a quando non diventa una notifica effettiva, o è eccessivo?
Non concentrarti sulle impostazioni utente o se gli eventi devono essere notificati via email o inviati a un'app mobile, ciò non è importante: -)