phpWatch est un petit outil écrit en PHP permettant de faire du monitoring de site web et/ou de port.
Il n'a pas la prétention d'être aussi puissant qu'un Nagios mais se révèle très pratique pour monitorer de petite infra / appli / outil, comme un NAS à la maison, un routeur, son site perso, son intranet, etc…
Bien que phpWatch fonctionne très bien pour déclancher des alertes de downtime, il lui manque une petite fonction de base… celle de déclancher une alerte lors d'un retour à la normal (uptime).

Pour résoudre ce petit manque, rien de plus simple :

Dans src/Monitor.php
On va passer un "status" (DOWN/UP) pour modifier le message de notification.
Par défaut, on passera le status "DOWN".

Ligne 167 :  public function sendNotifications();
On ajoute : $status="DOWN" à la fonction "sendNotifications()", ce qui donne :

public function sendNotifications($status="DOWN");

 

Ligne 171 : doNotify($this);
On ajoute : ,$status à la fonction doNotify(), ce qui donne : 

$channel->doNotify($this,$status); 

 

Ligne 199 : On va ajouter une condition, pour le cas d'un UPTIME avec une notification à 0. Ainsi, lors du changement de status "DOWN => UP" une notification est déclenchée et ce, qu'une fois. 

On va remplacer  : 
$this->status = STATUS_ONLINE;
$this->fail_count = 0;
$this->send_notifications = true; 

Par :

$this->status = STATUS_ONLINE;

  if($this->status == "1" && $this->send_notifications == "0")
    {
       //on envoie un UP
       $this->sendNotifications("UP");
    }

$this->fail_count = 0;
$this->send_notifications = true; 

ligne ~ 223 : On ajoute le "DOWN" à la fonction "sendNotifications()" ce qui donne :

$this->sendNotifications("DOWN");

 

Dans src/Channel.php : 

Ligne 89 :  Ajout de la variable "$status="DOWN""

public abstract function doNotify($monitor,$status="DOWN"); 

Dans src/channels/EmailChannel.php et SmsCHannel.php :
Exemple ici avec Smschannel.php

ligne 39 : Ajout de la variable "$status="DOWN"

public function doNotify($monitor,$status="DOWN")

Puis on ajoute avant l'appel de $this->getMessage($monitor); la variable $status 

ce qui donne :

$status." : ".$this->getMessage($monitor); 

A faire également dans EmailChannel.php 

Le message sera ainsi composé de :
UP/DOWN : Message configuré dans les contacts notification channels de votre phpWatch.