Vous êtes ici:

Menu

Bug dans Tactical Overview avec Centreon 2.3.9 et Centreon-broker

broker
Je me suis aperçu d'un dysfonctionnement d'affichage dans la page Tactical Overview avec les services lorsque le broker Centreon-Broker est utilisé. Ce phénomène se produit lorsque l'on acquitte des services ou que l'on a appliqué un "SetDownTime". J'utilise la dernière version de Centreon 2.3.9 avec Centreon-Broker 2.1.2. J'ai volontairement créé cinq services provoquant une alerte. Voici une copie d'écran qui démontre le problème.





bug-tactical01
On remarque bien la différence entre la page Tactical Overview et la page Monitoring des services. Ce problème n'existe pas avec le broker NDOutils. J'ai donc regardé de plus près le code de Centreon. La requête SQL pour récupérer l'état des services se trouve dans le fichier /usr/local/centreon/www/include/home/tacticalOverview/xml/broker/tacticalOverviewXml.php. Dans notre exemple, la requête nous donnera ce résultat :

mysql> SELECT DISTINCT s.state,s.acknowledged,s.scheduled_downtime_depth FROM services s, hosts h WHERE h.host_id = s.host_id AND (s.acknowledged = 1 OR s.scheduled_downtime_depth > 0) AND s.enabled = 1 AND s.state_type = 1 AND h.name NOT LIKE '_Module_%' ;
+-------+--------------+--------------------------+
| state | acknowledged | scheduled_downtime_depth |
+-------+--------------+--------------------------+
| 2 | 1 | 0 |
+-------+--------------+--------------------------+
1 row in set (0.00 sec)


La requête ne retourne qu'un seul enregistrement, car l'option DISTINCT est activée et le résultat est identique pour les trois services en défaut. Deux solutions sont possibles pour corriger l'erreur, soit de supprimer l'option DISTINCT, soit d'ajouter un champ ayant une valeur unique pour chaque enregistrement. J'ai préféré la deuxième solution pour garder une certaine cohérence du code en ajoutant le champ service_id de la table services dans la base Centstorage. Le résultat donne ceci :

mysql> SELECT DISTINCT s.state,s.acknowledged,s.service_id,s.scheduled_downtime_depth FROM services s, hosts h WHERE h.host_id = s.host_id AND (s.acknowledged = 1 OR s.scheduled_downtime_depth > 0) AND s.enabled = 1 AND s.state_type = 1 AND h.name NOT LIKE '_Module_%' ;
+-------+--------------+------------+--------------------------+
| state | acknowledged | service_id | scheduled_downtime_depth |
+-------+--------------+------------+--------------------------+
| 2 | 1 | 21 | 0 |
| 2 | 1 | 27 | 0 |
| 2 | 1 | 30 | 0 |
+-------+--------------+------------+--------------------------+
3 rows in set (0.00 sec)


La requête indique bien trois acquittements. Voici la modification sur le fichier /usr/local/centreon/www/include/home/tacticalOverview/xml/broker/tacticalOverviewXml.php :
/* * Get Service Acknowledgements and Downtimes OK(0), WARNING(1), CRITICAL(2), UNKNOWN(3) */ if (!$is_admin) { $rq1 = " SELECT DISTINCT s.state, " . " s.acknowledged, s.service_id, " . " s.scheduled_downtime_depth " . " FROM services s, centreon_acl, hosts h" . " WHERE h.host_id = s.host_id " . " AND (s.acknowledged = 1 OR " . " s.scheduled_downtime_depth > 0) " . " AND s.enabled = 1 " . " AND s.state_type = 1 ". " AND s.host_id = centreon_acl.host_id ". " AND s.service_id = centreon_acl.service_id " . " AND centreon_acl.group_id IN (".$acl_access_group_list.") " . " AND h.name NOT LIKE '_Module_%' "; } else { $rq1 = " SELECT DISTINCT s.state, " . " s.acknowledged, s.service_id, " . " s.scheduled_downtime_depth " . " FROM services s, hosts h" . " WHERE h.host_id = s.host_id " . " AND (s.acknowledged = 1 OR " . " s.scheduled_downtime_depth > 0) " . " AND s.enabled = 1 " . " AND s.state_type = 1 ". " AND h.name NOT LIKE '_Module_%' "; }Le fichier modifié, nous retournons vers notre interface graphique et nous constatons la bonne cohérence de l'état des services.
bug-tactical02
Pour info, l'équipe de Centreon a bien pris en compte ce problème. Il devrait être réglé lors d'une prochaine mise à jour, à priori la version 2.4 Happy.



blog comments powered by Disqus
 Vous êtes ici: