Problème d'affichage perl

Problème d'affichage perl - Perl - Programmation

Marsh Posté le 28-08-2008 à 16:05:16    

Bonjour,

 

Voici un script qui prends les hotes a pinger à partir d'un fichier texte et qui fait simplement un ping en ICMP, malheureusement il y a un bug d'affichage pour le serveur situé à la 120ème ligne du fichier texte et ce quelque soit la ligne:

 

Voici le script:

 
Code :
  1. #!/usr/bin/perl
  2. # This script uses perl's Ping library.
  3. # The first parameter to pass in is a text file to open that contains a list
  4. # of ip serverIDs.  A sample would look like:
  5. # 1.2.3.4 LDAPServer
  6. # 127.0.0.1 localhost
  7. # The second argument is the timeout that the ping command should have.  This
  8. # value should be 1,2,3,4, or 5 seconds.  If nothing is specified the default of
  9. # 5 seconds is used.
  10. # The resulting output will result in each line of the script bing printed with
  11. # "up" or "down"
  12. ####################
  13. # V2 -  Script modifie pour permettre une machine de ping en backup.
  14. # Un fichier dont le nom est celui du fichier des IPs a pinguer auquel on
  15. # a ajoute l'extension .primary doit contenir l'IP de la machine principale.
  16. # Si cette machine principal repond au ping, on ne deroule pas la liste. Si
  17. # elle ne repond pas, on considere qu'elle est HS et on ping depuis la machine
  18. # de backup.
  19. # ------------------
  20. #
  21. ####################
  22. # On charge les librairies
  23. use strict;
  24. use Net::Ping;
  25. use Time::HiRes;
  26. # On récupère le chemin vers le fichier contenant les hosts à pinguer (argument 1)
  27. my $filename = $ARGV[0];
  28. # On récupère le timeout du ping (argument 2)
  29. my $interval = $ARGV[1];
  30. my $sHow = "icmp";
  31. my @ips; # Contenu du fichier
  32. my @primary; # Tableau contenant l'IP du primaire
  33. my $line; # Ligne du fichier
  34. my $p; # Objet ping
  35. my $host = undef; # Nom d'hôte de la machine pinguée
  36. my $rtt = undef; # Round Time Trip du ping (aller-retour)
  37. my $ip = undef; # IP de la machine pinguée
  38. my $isBackup = 0; # La machine est un backup ?
  39. # On ouvre le fichier contenant les hosts à pinguer, en vérifiant qu'il existe bien
  40. open( FILE, "< $filename" ) or die "Can't open $filename : $!";
  41. # Puis on charge le contenu
  42. @ips = <FILE>;
  43. close FILE;
  44. # Si le fichier "<FICHIER>.primary" existe, on charge son contenu et on indique qu'on est un serveur de backup
  45. if (-f "$filename.primary" ) {
  46. open( FILE, "< $filename.primary" );
  47. @primary = <FILE>;
  48. close FILE;
  49. $isBackup = 1;
  50. }
  51. # On ramène l'intervalle à 5 si il est < 0 ou si il est > 5
  52. if(($interval eq undef) || ($interval le 0) || ($interval gt 5)) {
  53.   $interval = 1;
  54. }
  55. # On crée notre objet ping en mémoire
  56. $p = Net::Ping->new( $sHow,$interval );
  57. $p->hires();
  58. # On parcours les lignes du fichier contenant l'adresse IP du primaire si on est un backup
  59. if ($isBackup) {
  60. foreach $line (@primary) { 
  61.  # On ping le primaire
  62.  my ($iOK ,$rtt ,$sN) = $p->ping($line);
  63.  if ( $sHow eq  "tcp" ) {
  64.                  if (($host,$rtt,$ip) = $p->ack($line)) {
  65.    # Si le primaire est en ligne, on quitte
  66.                         chomp($line);
  67.                          printf("$line SrvPingPrimaire up %.2f\n", 1000*$rtt);
  68.                          exit 0;
  69.                 } else {
  70.    # Si le primaire n'est pas en ligne, on arrive ici
  71.                         chomp($line);
  72.                          print "$line SrvPingPrimaire down 0.00\n";
  73.                 }
  74.              } else {
  75.                  if ( !$iOK ) {
  76.    # Si le primaire n'est pas en ligne, on arrive ici
  77.                         chomp($line);
  78.                          print "$line SrvPingPrimaire down 0.00\n";
  79.                  } else {
  80.    # Si le primaire est en ligne, on quitte
  81.                         chomp($line);
  82.                          printf("$line SrvPingPrimaire up %.2f\n", 1000*$rtt);
  83.                          exit 0;
  84.                 }
  85.              }
  86. }
  87. }
  88. $line = undef;
  89. $host = undef;
  90. $rtt = undef;
  91. $ip = undef;
  92. foreach $line (@ips)
  93. {
  94.     $line =~ s/\n*//g;
  95.     #next if ($line =~ /\s*#/);
  96.     #next if ($line =~ /^\s*$/);
  97.     if ($line =~ /^[0-9]+/) {
  98.     my ($iOK ,$rtt ,$sN) = $p->ping($line);
  99.     if ( $sHow eq  "tcp" ) {
  100.         if (($host,$rtt,$ip) = $p->ack($line)) {
  101.   printf("$line up %.2f\n", 1000*$rtt);
  102.         } else {
  103.               print "$line down 0.00\n";
  104.     }
  105.          } else {
  106.          if ( !$iOK ) {
  107.              print "$line down 0.00\n";
  108.          } else {
  109.               printf("$line up %.2f\n", (1000*$rtt) );
  110.           }
  111.          }
  112.     }
  113. }
 

et l'erreur dans la console du logiciel de supervision:

 

http://imagik.fr/thumb/97812.jpeg

 

L'erreur apparait lorsque le LocalTimeStamp change....
Quelqu'un aurait il une idée SVP ?

 

Merci d'avance

 

Syl


Message édité par sylstyle le 28-08-2008 à 16:06:47
Reply

Marsh Posté le 28-08-2008 à 16:05:16   

Reply

Marsh Posté le 28-08-2008 à 16:33:25    

sauf erreur de ma part je vois pas comment ton printf peux afficher un résultat comme celui que tu montres de ta console. J'en déduis donc que ton affichage se fait ensuite via une autre procédure.

 

J'opterai donc plutôt  pour un problème dans celle-ci. D'autant que ton timestamp semble être dans $line, variable à laquelle tu ne touches pas...


Message édité par anapajari le 28-08-2008 à 16:34:02

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 29-08-2008 à 01:10:16    

Pour moi c'est l'ip qui est dans $line
 
Donc il imprime qq chose du style

Code :
  1. 10.120.32.54 down 0.00
  2. 10.120.32.55 up 10.00


 
Mais sinon, ça ne change rien à la conclusion. Pour moi, en effet le formatage final se fait ailleurs, et plus probablement dans un autre script voir dans "l'outil" de supervision directement.

Reply

Marsh Posté le 29-08-2008 à 09:30:10    

Alors effectivement, il y a un méta-fichier du nom de "pingservers.mdl". Voici son contenu:
 

Code :
  1. //APPL pingservers @This application will ping a list of servers and return up or down
  2. //NAME pingstats K 300 AddTimeStamp
  3. //SOURCE SCRIPT perl perlPingUnix.pl "/IBM/ITMagent/UA/ping/hostips" Interval=180 ICMP
  4. //Attributes
  5. IpAddress D 24 Atomic @This is the ip or hostname, the first item in the file passed in
  6. ServerType D 128 @This is the server type, also the second item in the file pased in
  7. Status D 16 @up or down depending on if the host is reachable
  8. ResponseTime N 15 @ The response time in ms


 
dreameddeath pour le résultat c'est exactement ca si on l'exécute dans le shell et dans la table (cf screen 1er post) du logiciel de supervision (IBM TIVOLI si ca vous dit quelque chose). Sachant que lorsqu'on l'éxéxcute dans le shell il ne fait pas le bug.
 
Mais ceci n'explique pas pourquoi la 120ème entrée bug  :heink: du coup il est possible que ce soit carrément un bug de tivoli et du coup pas de solution ?

Reply

Marsh Posté le 29-08-2008 à 09:50:55    

Voici un extrait des logs :  
 

Code :
  1. Application <PINGSERVERS> successfully registered
  2. Thu Aug 28 15:02:32 2008 KUM0004I   Metafile /IBM/ITMAGENT/LI6263/UM/METAFILES/PINGSERVERS.MDL validation successful. Application pingservers loaded.
  3. (48B6A1E8.000A-23:kumpscrp.c,639,"KUMP_ScriptServer" ) Successfully located script file </IBM/ITMagent/li6263/um/work/../scripts/perlPingUnix.pl> table <pingst
  4. ats>
  5. (48B6A1E8.000B-F:kumaprbl.cpp,349,"applicationProbeList::signalExit" ) Signaling to exit startNewProbe for applName <PINGSERVERS>
  6. (48B6A1E8.000C-19:kumaprbl.cpp,394,"applicationProbeList::WaitForExit" ) Exit signal received for applName <PINGSERVERS>
  7. (48B6A1E8.000D-19:kumamain.cpp,2316,"main::startNewProbe" ) Exit signal received for applName <PINGSERVERS>
  8. (48B6A1E8.000E-19:kumamain.cpp,2343,"main::startNewProbe" ) Deleting userDataList @A15DDE0 for application <PINGSERVERS>
  9. (48B6A1E8.000F-24:kumadtl.cpp,2622,"waitOnDP thread" ) dc_waitOnDataDestroy completed for applKey <PIN> attrGroup <PINGSTATS>
  10. (48B6A1E8.0010-F:kumamain.cpp,3236,"main::processOffline" ) Application <PINGSERVERS> removed. Number of applications currently active: 2
  11. (48B6A1E8.0011-19:kumaudi.cpp,434,"userDataInfo destructor" ) Deleting userDataInfo @41F1A898 for applName <PINGSERVERS01> tableName <PIN1204501>
  12. (48B6A1E8.0012-19:kumamain.cpp,2348,"main::startNewProbe" ) Leaving startNewProbe for applName <PINGSERVERS> errors=0
  13. (48B6A1E8.0013-25:kumaudi.cpp,2654,"userDataList::calculateChecksum" ) Note: attrGroup<PINGSTATS> attributes for version 06.01.01 have changed
  14. (48B6A1E8.0014-25:kumaudi.cpp,2719,"userDataList::calculateChecksum" ) Generating new CAT, ATR & ODI with version 06.02.01 for application <PINGSERVERS>
  15. (48B6A1E8.0015-25:kbbssge.c,52,"BSS1_GetEnv" ) ATTRLIB="/IBM/ITMagent/li6263/um/tables/ATTRLIB"
  16. (48B6A1E8.0016-F:kumamain.cpp,3087,"main::processOnline" ) Warning: Subnode <10.150.64.116:PINGSERVERS01> delete failed
  17. (48B6A1E8.0017-D:kumrfagt.cpp,365,"o4srv_rmtfile_agent::TakeSample" ) Uploaded ATR file /IBM/ITMagent/li6263/um/work/PINATR02 for application PINGSERVERS to th
  18. e TEMS at ip.pipe:itmp_r00lm.lamulatiere.dsit.sncf.fr
  19. Thu Aug 28 15:02:32 2008 KUM0300I   Uploaded ATR file /IBM/ITMagent/li6263/um/work/PINATR02 for application PINGSERVERS to Tivoli Enterprise Monitoring Server
  20. at ip.pipe:itmp_r00lm.lamulatiere.dsit.sncf.fr.
  21. (48B6A1E8.0018-D:kumrfagt.cpp,360,"o4srv_rmtfile_agent::TakeSample" ) Uploaded CAT file /IBM/ITMagent/li6263/um/work/PINCAT02 for application PINGSERVERS to th
  22. e TEMS at ip.pipe:itmp_r00lm.lamulatiere.dsit.sncf.fr
  23. Thu Aug 28 15:02:32 2008 KUM0300I   Uploaded CAT file /IBM/ITMagent/li6263/um/work/PINCAT02 for application PINGSERVERS to Tivoli Enterprise Monitoring Server
  24. at ip.pipe:itmp_r00lm.lamulatiere.dsit.sncf.fr.
  25. (48B6A1E9.0000-23:kumpscrp.c,663,"KUMP_ScriptServer" ) Script source </IBM/ITMagent/li6263/um/work/../scripts/perlPingUnix.pl> table <pingstats> is now online
  26. to the data provider
  27. Thu Aug 28 15:02:33 2008 KUM0133I   Monitoring for script /IBM/ITMagent/li6263/um/work/../scripts/perlPingUnix.pl started. SourceName 10.150.64.116 Attribute
  28. group pingstats, Type KEY, Interval 120 seconds.
  29. Thu Aug 28 15:02:33 2008 KUM0304I   NOTE: CAT and ATR files for application PINGSERVERS must be copied to hub Tivoli Enterprise Monitoring Server if ip.pipe:i
  30. tmp_r00lm.lamulatiere.dsit.sncf.fr is not a hub.
  31. (48B6A1E9.0001-D:kumrfagt.cpp,371,"o4srv_rmtfile_agent::TakeSample" ) Uploaded ODI file /IBM/ITMagent/li6263/um/work/PINODI02 for application PINGSERVERS to th
  32. e TEPS
  33. Thu Aug 28 15:02:33 2008 KUM0301I   Uploaded ODI file /IBM/ITMagent/li6263/um/work/PINODI02 for application PINGSERVERS to Tivoli Enterprise Portal Server.
  34. (48B6A1EA.0000-17:kumpscrp.c,1052,"KUMP_ScriptServer" ) >>>>> Script server process ended. Thread: 17
  35. (48B6A1F1.0000-D:kumfaagt.cpp,911,"kum_universa_agent::processRuleStart" ) Processing RULE START request for situation <ALL_ALL_URL_First_Step> with originnode
  36. <10.150.64.116:INTERNET00>
  37. Thu Aug 28 15:02:41 2008 KUM0310I   Processing START request for situation ALL_ALL_URL_First_Step with node 10.150.64.116:INTERNET00.
  38. (48B6A1F7.0000-21:kumphttp.c,202,"KUMP_HTTPclientTask" ) URL <http://www.co.sncf.com> reply timeout. Will retry at next sample interval
  39. (48B6A237.0000-4:kumpccmd.c,703,"KUMP_ConsoleService" ) >>>>> DP console REFRESH for pingservers.mdl
  40. Thu Aug 28 15:03:51 2008 KUM0013I   Refresh command for metafile/application pingservers.mdl received.
  41. Thu Aug 28 15:03:51 2008 KUM0134I   Monitoring for script /IBM/ITMagent/li6263/um/work/../scripts/perlPingUnix.pl stopped. Attribute group pingstats.
  42. (48B6A237.0001-23:kumpscrp.c,1042,"KUMP_ScriptServer" ) Releasing TerminationLock for PEptr @A15D1C8
  43. Thu Aug 28 15:03:51 2008 KUM0010I   Existing application pingservers deleted.
  44. (48B6A237.0002-4:kumpdlta.c,439,"KUMP_DeleteExistingApplication" ) Releasing application resources for <pingservers>
  45. (48B6A237.0003-F:kumamain.cpp,3196,"main::processOffline" ) Subnode <10.150.64.116:PINGSERVERS02> deregistered
  46. (48B6A237.0004-4:kumprapr.c,884,"KUMP_ReleaseApplResources" ) Freeing application entry @A1C0FA0 <pingservers>
  47. (48B6A237.0005-4:kumpcadm.c,1882,"KUMP_ConstructApplDataModel" ) *INFO: APPL names starting with letters N-Z are designated for customer UA solutions. Applicat
  48. ion <pingservers> Metafile </IBM/ITMagent/li6263/um/metafiles/pingservers.mdl>


 
Et le fichier PINATR02:
 

// 1080828150232060 PIN02/06.02.01
//Generated by Universal Agent
//
entr ATTR
name PINGSERVERSPINGSTATS02.Node_Name
affi 0000000000000080000000000000000000000000000
acod PIN02
usag I
appl PIN02
stmp 1080828150232060
cvrm 06.02.01
lvrm 06.02.01
tabl PIN1204502
mult 1
samp 3
colu ORIGINNODE
type 2
slng 32
msid KUM0000
opgr 0
atid 065535
//
entr ATTR
name PINGSERVERSPINGSTATS02.IpAddress
atom y
affi 0000000000000080000000000000000000000000000
acod PIN02
colu UA1
type 2
slng 24
msid KUM0000
opgr 2
atid 065535
//
entr ATTR
name PINGSERVERSPINGSTATS02.ServerType
affi 0000000000000080000000000000000000000000000
acod PIN02
colu UA2
type 2
slng 128
msid KUM0000
opgr 2
atid 065535
//
entr ATTR
name PINGSERVERSPINGSTATS02.Status
affi 0000000000000080000000000000000000000000000
acod PIN02
colu UA3
type 2
slng 16
msid KUM0000
opgr 2
atid 065535
//
entr ATTR
name PINGSERVERSPINGSTATS02.ResponseTime
affi 0000000000000080000000000000000000000000000
acod PIN02
colu UA4
type 2
slng 16
msid KUM0000
opgr 2
atid 065535
//
entr ATTR
name PINGSERVERSPINGSTATS02._LocalTimeStamp
affi 0000000000000080000000000000000000000000000
acod PIN02
colu UA5
type 2
slng 16
msid KUM0000
opgr 2
atid 065535
//
entr HIDDEN
name PINGSERVERSPINGSTATS02.KUMHELP
affi 0000000000000080000000000000000000000000000
colu KUMHELP
type 3
opgr 0
cost 9
vali ^APPLICATION
vale "This application will ping a list of servers and return up or down"
vali ^ATTRGROUP[PINGSTATS]
vale "No attribute group Help Defined"
vali IpAddress
vale "This is the ip or hostname  the first item in the file passed in"
vali ServerType
vale "This is the server type  also the second item in the file pased in"
vali Status
vale "up or down depending on if the host is reachable"
vali ResponseTime
vale "The response time in ms"
vali _LocalTimeStamp
vale "Universal Agent inserted attribute per metafile keyword AddTimeStamp specification. It is the 16-byte timestamp value when the data arrived."


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed