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
,ack
ouack_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'AlarmChange
permettra 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
worst
est à implémenter. - en cas de changement, envoyer un événement
check
avec le nouvel état dans l'exchangecanopsis.events
. Voir la méthodesendEvent
danslib/canopsis/statsng/service.go
pour 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.