Announcement

Collapse
No announcement yet.

Modification d'un plugin

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

  • Modification d'un plugin

    Bonjour,

    Je cherche à modifier le plugin check_graph_remote_storage.pl et celui de Patrick Roy (plus récent mais faisant à peu près la même chose hormis le fait de pouvoir choisir des limites en pourcetage ou bytes et de pouvoir faire des checks sur l'espace disponible ou occupé).

    Du coup je me sens un peu limité en Perl:

    en effet ces deux scripts ne permettent de vérifier qu'une partion à la fois ou l'ensemble du disque, hors je voudrais pouvoir faire des mesures sur plus d'une partition à la fois. Dans le plugin check_graph_remote_storage.pl c'est lotion d de la ligne de commande qui permet de spécifier quelle partion sera vérifiée:

    my $partition;
    if ($opt_d =~ /([0-9]+)/){
    $partition = $1;
    }
    else{
    print "Unknown -d number expected... or it doesn't exist, try another disk - number\n";
    exit $ERRORS{'UNKNOWN'};
    }

    Comme je l'ai dit je veux faire les checks sur le nombre de partition que je veux, mais je ne suis pas sur de savoir comment modifier le code.


    Merci d'avance
    Red Hat entreprise
    Nagios 1.3 + Oreon 1.2.2-RC3

  • #2
    Re: Modification d'un plugin

    Ok voyons ça !

    Tout d'abord on va séparer les partoches par une virgule (c rare des virgules dans un nom de partoche :lol: )
    Code:
    my @partition;
    ## je te laisse corriger la regex en dessous pour prendre en compte la virgule
    if ($opt_d =~ /([0-9]+)/){
        @partition = split(/,/,join(',',$1));
    }
    else{
        print "Unknown -d number or number list (-d 5,4,3,....) \n";
        exit $ERRORS{'UNKNOWN'};
    }
    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


    • #3
      Merci pour ta réponse ceci m'aide grandement;

      Par contre je vais plutôt mettre le tout dans un tableau

      ## Choisir la ou les partitions à afficher et mettre leur numéro dans un tableau
      ($opt_d) || ($opt_d = shift) || ($opt_d = 2);

      my @partition;
      print $opt_d;
      if ($opt_d =~ /([0-9]+)/){
      @partition = split /,\s*/, $opt_d;
      }

      else{
      print "Unknown -d number expected (single number or list : -d 1, 2, 4 ) ... or it doesn't exist, try another disk - number\n";
      exit $ERRORS{'UNKNOWN'};
      }

      Comme je souhaite faire des graphes j'ai essayé de modifier la partie concernant les rrds pour avoir plusieurs source de données dans oreon
      (j'utilise une boucle for pour éviter d'utiliser la méthode bourrin)

      my @tab_rrd = ('a'..'z');
      my $lettre;
      my [email protected];
      my [email protected];
      print @partition;
      my $j;
      ##
      ## RRDTools create rrd
      ##
      if ($opt_g) {
      if (-e $rrd) {;}
      else
      {
      RRDs::create ($rrd, "--start",$start-1, "--step",300,


      for ($j=0 ; $j<$k ; j++) {
      $lettre=$tab_rrd[$count];
      $count=$count - 1;
      "DS:$lettre:GAUGE:600:U:U",
      }
      "RRA:AVERAGE:0.5:1:8440",
      "RRA:MIN:0.5:12:8440",
      "RRA:MAX:0.5:12:8440",
      );
      $ERROR = RRDs::error;
      if ($ERROR) {
      print " unable to create `$rrd': $ERROR\n";
      exit $ERRORS{'UNKNOWN'};
      }
      }
      }

      De cette façon j'ai des erreurs au niveau de la boucle for, mais il semble que ce ne soit pas du à la synthaxe d'ou ma question est ce que je ne m'emele pas les pinceaux.

      Merci d'avance
      Red Hat entreprise
      Nagios 1.3 + Oreon 1.2.2-RC3

      Comment


      • #4
        je te conseil de faire le RRD_create sur une seule ligne.

        Utilise tes boucles pour remplir la ligne de commande que tu vas passer à RRD_Create

        Code:
        my @tab_rrd = ('a'..'z');
        my $lettre;
        my [email protected];
        my [email protected];
        print @partition;
        my $j;
        ##
        ## RRDTools create rrd
        ##
        if ($opt_g) {
        if (-e $rrd) {;}
        else
        {
        my $provisoire='';
        for ($j=0 ; $j<$k ; j++) {
        $lettre=$tab_rrd[$count];
        $count=$count - 1;
        $provisoire=$provisoire."DS:$lettre:GAUGE:600:U:U,";
        }
        
        RRDs::create ($rrd, "--start",$start-1, "--step",300,$provisoire
        "RRA:AVERAGE:0.5:1:8440",
        "RRA:MIN:0.5:12:8440",
        "RRA:MAX:0.5:12:8440",
        );
        $ERROR = RRDs::error;
        if ($ERROR) {
        print " unable to create `$rrd': $ERROR\n";
        exit $ERRORS{'UNKNOWN'};
        }
        }
        }
        Je me suis pas foulé mais ca peut te decoincer
        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


        • #5
          salut

          Merci pour cette réponse rapide, en plus ça marchait presque (il ne fallait pas déclarer les variables à cet endroit plus une ou deux petites choses).


          Je n'avais pas penser à la possibilité des chaînes de caractères pour la ligne sur laquelle sont "stokées" les données


          Voici le code exact pour information et ceux qui souhaiterai faire de même afin d'alléger leur code si il doivent avoir le choix entre 1,2,3 ... source de données (ou variables) dans leur graphique:

          Code:
          my @tab_rrd = ('a'..'z');
          my $lettre;
          my [email protected];
          my [email protected];
          #print @partition;
          my $j;
          ##
          ## RRDTools create rrd
          ##
           my $provisoire='';
                 ##
                 ## RRDTools create rrd
                 ##
                 if ($opt_g) {
                 if (-e $rrd) {;}
          
                 else
                 {
                     for ($j=0 ; $j<$k ; $j++) {
                     $lettre=$tab_rrd[$j];
                     $provisoire=$provisoire."DS:$lettre:GAUGE:600:U:U";
                  }
          
                 RRDs::create ($rrd, "--start",$start-1, "--step",300,$provisoire,
                 "RRA:AVERAGE:0.5:1:8440",
                 "RRA:MIN:0.5:12:8440",
                 "RRA:MAX:0.5:12:8440",
                 );
                $ERROR = RRDs::error;
                if ($ERROR) {
                   print " unable to create `$rrd': $ERROR\n";
                   exit $ERRORS{'UNKNOWN'};
                           }
          }
          }


          Bon je m'attaque à la fin du plugin: permettre la mise à jour de ce rrd là et je fournirai le code si je réussi (je précise que j'ai déjà fait les modifs permettant de faire les calculs pour l'ensemble des partitions sélectionnées: une boucle for et la transformation de certaines variables en tableau plus un peu d'huile de cerveau et de doigts).

          Merci
          Red Hat entreprise
          Nagios 1.3 + Oreon 1.2.2-RC3

          Comment


          • #6
            Je crois que je coince de nouveau, si quelqu'un a un début d'dée elle est la bienvenue . :evil: :evil:

            Disons qu'il me faudrait à l'aide d'une boucle for créer la ligne

            Code:
            RRDs::update $rrd, "$start:".$val[1].":".val[2] ... et aisni de suite;
            Je coince encore pas mal sur les chaînes de caractères et leur manipulation.

            :cry: Merci d'avance.
            Red Hat entreprise
            Nagios 1.3 + Oreon 1.2.2-RC3

            Comment


            • #7
              Originally posted by delanoeg
              Je crois que je coince de nouveau, si quelqu'un a un début d'dée elle est la bienvenue . :evil: :evil:

              Disons qu'il me faudrait à l'aide d'une boucle for créer la ligne

              Code:
              RRDs::update $rrd, "$start:".$val[1].":".val[2] ... et aisni de suite;
              Je coince encore pas mal sur les chaînes de caractères et leur manipulation.

              :cry: Merci d'avance.
              my $prov='';

              For my $cpt=1 $cpt<X {
              if ($cpt == 1) then {
              $prov.=$val[$cpt];
              } else {
              $prov.=':'.$val[$cpt];
              }
              $cpt++;
              }

              RRDs::update($rrd,"$start:".$prov);
              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

              Working...
              X