Devo scrivere un correlatore di eventi. Una parte fondamentale del sistema sarà un albero decisionale che riconosce l'origine dell'errore basandosi su stati registrati e file di registro.
Spesso molti incidenti differiscono con dettagli minori e molte decisioni prese saranno basate su dati confusi, incompleti o inaffidabili, ma la maggior parte di queste decisioni può essere scritta come funzioni binarie di logica.
Il fatto è che ce ne saranno molti. Mi aspetto almeno 100 nodi nell'albero decisionale, e potrei sottovalutare il valore di un ordine di grandezza. E soprattutto, quando emergono nuovi schemi imprevisti, i fallimenti imprevisti si verificano lasciando nuove tracce o con l'estensione del sistema diventano valide le nuove modalità di errore, l'albero delle decisioni dovrà essere mantenuto.
(e non sarà sempre una struttura ad albero pura - alcuni difetti dello stesso effetto hanno due o più modi di apparire, alcuni di questi si diramano in diverse modalità, ad esempio l'evento A significa fallimento X, l'evento B significa: controlla l'evento C. Se C è vero, è anche l'errore X, ma in caso contrario, si tratta di un errore Y. Sebbene possa sempre normalizzarlo in X1 e X2, che sono tecnicamente identici ma diversi dal punto di vista dell'albero.) Inoltre, il l'albero sarà spesso abbastanza profondamente annidato quindi temo che una semplice serie di if annidati svanirà rapidamente fuori controllo.
Ora la mia domanda è: come archiviare / scrivere / costruire quell'albero in modo che possa essere compilato in qualcosa che la macchina può digerire, ma comunque mantenibile per gli sviluppatori?
Si noti che questo è per un sistema embedded, quindi le soluzioni pesanti come JBoss non si adattano veramente a meno che non compaiano solo sul lato del compilatore, e il sistema finale esegue un set di regole compilato in qualcosa di molto più amichevole.
(il sistema è scritto in C ++, fa anche ampio uso di JSON, e funzionerà su una CPU ARM9 se questo è di qualche aiuto.)