Watchers: 2. Service watcher
Deuxième partie de l'implémentation du service watcher (spécifié ici).
Un service Watcher doit être ajouté, avec une méthode ProcessEvent(event types.Event) error.
Cette méthode doit être appelée avec tous les événements dans la méthode
WorkerProcess du fichier cmd/engine-axe/engine.go.
Note : Il pourrait être intéressant d'utiliser l'AlarmChange renvoyé par l'alarm.Service plutôt que l'événement en argument de ProcessEvent, pour que le service watcher ne dépende pas du tout du fonctionnement du service d'alarmes.
Cette méthode doit :
- ignorer les événements autres que
check,ackouack_remove, qui ne modifient ni l'état, ni l'output des alarmes. Il faut aussi prendre en compte les événements de typechangestate. Utiliser l'AlarmChangepermettra d'éviter ce genre d'oublis. - pour chacun des watchers actifs (
enabled = true) dansevent.Entity.Impacts:- recalculer l'état et l'output du watcher. Pour l'instant, seule la méthode
worstest à implémenter. - en cas de changement, envoyer un événement
checkavec le nouvel état dans l'exchangecanopsis.events. Voir la méthodesendEventdanslib/canopsis/statsng/service.gopour un exemple d'envoi d'événement.
- recalculer l'état et l'output du watcher. Pour l'instant, seule la méthode
Ce service devrait aussi avoir une méthode ProcessResolvedAlarms(alarms []type.Alarm) error,
appelée dans la méthode PeriodicalProcess, qui met à jour les watchers quand
une alarme surveillée a été résolue.