Skip to content

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 ou ack_remove, qui ne modifient ni l'état, ni l'output des alarmes. Il faut aussi prendre en compte les événements de type changestate. Utiliser l'AlarmChange permettra d'éviter ce genre d'oublis.
  • pour chacun des watchers actifs (enabled = true) dans event.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'exchange canopsis.events. Voir la méthode sendEvent dans lib/canopsis/statsng/service.go pour un exemple d'envoi d'événement.

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.