Announcement

Collapse
No announcement yet.

ACL et résumé des status de services

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • ACL et résumé des status de services

    Bonjour,

    Je rencontre un problème depuis la mise en place des ACL sur ma solution Nagios3/Centreon2.0 RC8:
    Le nombre de service dans chacun des états affichés en haut et à droite (mais aussi sur certaines autres pages) est erroné quand on n'est pas administrateur.
    Après avoir cherché d'où cela pouvait venir, la table incriminée est centreon_acl dans la base NDO.
    J'y trouve en effet un certain nombre de doublons, même host, même service, même groupe.
    Même après nettoyage manuel de la tables, les doublons reviennent.

    Je n'arrive pas à comprendre QUI vient écrire dans cette fichue table.
    Quand je regarde le code php il n'y a que des select, avec sans doute quelques "distinct" qui se perdent (mais qui gagneraient à être perdu s'il n'y avait pas de doublons).

    Quelqu'un serait il au courant du problème ou du fonctionnement du remplissage de cette table ?

    Merci d'avance

    Nagios 3.0.3
    Centreon 2.0 RC8
    1900 serveurs 8200 services

  • #2
    J'ai trouvé qui écrivait dans la table, c'est le script "centAcl.php" qui est lancé par cron.
    L'enquête continue...

    Comment


    • #3
      Je pensais que la base ndo était réservée pour ndo, que centreon n'y touchait pas (en écriture). Si tu trouves quelques chose à ce sujet ça m'intéresse beaucoup.
      Auteur de Shinken, outil de supervision compatible avec Nagios et orientée supervision distribuée hautement disponible et mulitplateforme.

      Comment


      • #4
        Trouvé !!

        Et ce ne fut pas une mince affaire.
        Tout ce joue dans le script "cron/centAcl.php".
        Tout peut aller si on change un Resource Group à la fois. Dès qu'on en change deux, c'est la cata car il y a un compteur qui fait que le delete ne s'applique que sa la première occurence de la boucle générale.
        Il faut transformer
        Code:
                        if ($cpt == 0) {
                                /*
                                 * Delete old datas for this groups
                                 */                                                                                                                                              $DBRESULT =& $pearDBndo->query("DELETE FROM `centreon_acl` WHERE `group_id` = '".$acl_group_id."'");
                                if (PEAR::isError($DBRESULT))                                   
                                        print "DB Error : ".$DBRESULT->getDebugInfo()."<br />";                                                                                  
                        }
        en
        Code:
                                /*
                                 * Delete old datas for this groups
                                 */                                                                                                                                              $DBRESULT =& $pearDBndo->query("DELETE FROM `centreon_acl` WHERE `group_id` = '".$acl_group_id."'");
                                if (PEAR::isError($DBRESULT))                                   
                                        print "DB Error : ".$DBRESULT->getDebugInfo()."<br />";
        De plus, plus loin il y a un bout de code que je trouve suspect:
        Code:
                                        while ($h =& $DBRESULT3->fetchRow()){
                                                if (!isset($tabElem[$h["host_id"]]))
                                                        $tabElem[$h["host_id"]] = array();
                                                $tabElem[$h["host_name"]][$h["service_description"]] = 1;
                                        }
        Partout le tableau tabElem est indexé par le host_name, ici par le host_id. Je l'ai transformé en
        Code:
                                 * Delete old datas for this groups
                                 */                                                                                                                                              $DBRESULT =& $pearDBndo->query("DELETE FROM `centreon_acl` WHERE `group_id` = '".$acl_group_id."'");
                                if (PEAR::isError($DBRESULT))                                   
                                        print "DB Error : ".$DBRESULT->getDebugInfo()."<br />";                                                                                  
                        }
        en
        Code:
                                /*
                                 * Delete old datas for this groups
                                 */                                                                                                                                              $DBRESULT =& $pearDBndo->query("DELETE FROM `centreon_acl` WHERE `group_id` = '".$acl_group_id."'");
                                if (PEAR::isError($DBRESULT))                                   
                                        print "DB Error : ".$DBRESULT->getDebugInfo()."<br />";
        De plus, plus loin il y a un bout de code que je trouve suspect:
        Code:
                                if ($DBRESULT3->numRows()) {
                                        while ($h =& $DBRESULT3->fetchRow()){
                                                if (!isset($tabElem[$h["host_name"]]))
                                                        $tabElem[$h["host_name"]] = array();
                                                $tabElem[$h["host_name"]][$h["service_description"]] = 1;
                                        }
                                }
        Ouf ! j'ai l'impression d'avoir retrouvé mes chiffres !

        Comment


        • #5
          Génial, bravo. Je pense que tu peux proposer un patch à l'équipe de Centreon.
          Auteur de Shinken, outil de supervision compatible avec Nagios et orientée supervision distribuée hautement disponible et mulitplateforme.

          Comment


          • #6
            Si tu n'as pas encore de compte, il faut le créer ici :

            http://en.doc.centreon.com/index.php...rnto=Main_Page

            Puis reporter ton bug et éventuellement tes correctifs là :

            http://trac.centreon.com/newticket
            Intel(R) Xeon(TM) CPU 3.4GHz - MemTotal : 1034476 kB
            Centreon 2.4.1 - Nagios 3.2.1 - Nagios Plugins 1.4.15 - Manubulon Plugins tuné
            Fedora Core 5 - 2.6.20-1.2320

            Comment


            • #7
              C'est fait. Merci.

              Comment

              Working...
              X