Advertisement
Guest User

Untitled

a guest
Sep 7th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2. #
  3. #HP iLO data collector script for Zabbix
  4. #Written by Vladislav Vodopyan, 2013-2014
  5. #Contact: ra1aie@ra1aie.ru
  6. #
  7.  
  8. use strict;
  9. use warnings;
  10. use Fcntl ':flock';
  11.  
  12. my $sensor = $ARGV[0];
  13. my $class = $ARGV[1];
  14. my $server = $ARGV[2];
  15. my $type = $ARGV[3];
  16.  
  17. exit(1) if not defined $server or not defined $sensor or not defined $class;
  18.  
  19. $type = 'numeric' if not defined $type;
  20.  
  21. $sensor =~ s/\'//g;
  22.  
  23. my $expires = 60;
  24.  
  25. my $user = 'zabbix';
  26. my $pass = '9mKTwaShdMNe';
  27.  
  28. my $ipmi_cmd = '';
  29. my $cache_file = '';
  30.  
  31. if($class eq 'sensor') {
  32. $cache_file = '/var/tmp/ipmi_sensors_'.$server;
  33. $ipmi_cmd = '/usr/sbin/ipmi-sensors -D LAN2_0 -h '.$server.' -u '.$user.' -p '.$pass.' -l USER -W discretereading --no-header-output --quiet-cache --sdr-cache-recreate --comma-separated-output --entity-sensor-names 2>/dev/null';
  34. } elsif($class eq 'chassis') {
  35. $cache_file = '/var/tmp/ipmi_chassis_'.$server;
  36. $ipmi_cmd = '/usr/sbin/ipmi-chassis -D LAN2_0 -h '.$server.' -u '.$user.' -p '.$pass.' -l USER -W discretereading --get-status 2>/dev/null';
  37. } elsif($class eq 'fru') {
  38. $cache_file = '/var/tmp/ipmi_fru_'.$server;
  39. $ipmi_cmd = '/usr/sbin/ipmi-fru -D LAN2_0 -h '.$server.' -u '.$user.' -p '.$pass.' -l USER -W discretereading 2>/dev/null';
  40. } elsif($class eq 'bmc') {
  41. $cache_file = '/var/tmp/ipmi_bmc_'.$server;
  42. $ipmi_cmd = '/usr/sbin/bmc-info -D LAN2_0 -h '.$server.' -u '.$user.' -p '.$pass.' -l USER -W discretereading 2>/dev/null';
  43. } else {
  44. exit(1);
  45. }
  46.  
  47. my @rows = ();
  48.  
  49. if(-e $cache_file) {
  50. my @stat = stat($cache_file);
  51. my $delta = time() - $stat[9];
  52.  
  53. if($delta > $expires or $delta < 0) {
  54. unlink($cache_file);
  55. }
  56. }
  57.  
  58. if(not -e $cache_file) {
  59. my $results = results();
  60. open(CACHE, '>>', $cache_file);
  61. if(flock(CACHE, LOCK_EX | LOCK_NB)) {
  62. if(defined $results) {
  63. truncate(CACHE, 0);
  64. print CACHE $results;
  65. close(CACHE);
  66. } else {
  67. close(CACHE);
  68. unlink($cache_file);
  69. exit(1);
  70. }
  71. }
  72. }
  73.  
  74. open(CACHE, '<' . $cache_file);
  75. flock(CACHE, LOCK_EX);
  76. @rows = <CACHE>;
  77. close(CACHE);
  78.  
  79. foreach my $row (@rows) {
  80. if($class eq 'sensor') {
  81. my @cols = split(',', $row);
  82. if($cols[1] eq $sensor) {
  83. if($type eq 'discrete') {
  84. my $r = $cols[5];
  85. $r =~ s/\'//g;
  86. chop($r);
  87. print $r;
  88. } elsif($type eq 'numeric') {
  89. if($cols[3] eq '' or $cols[3] eq 'N/A') {
  90. print "0";
  91. } else {
  92. print $cols[3];
  93. }
  94. }
  95. }
  96. } elsif(($class eq 'chassis') or ($class eq 'bmc')) {
  97. my @cols = split(':', $row);
  98. my $name=$cols[0];
  99. $name=~ s/(\s+)/ /gi;
  100. $name=substr($name, 0, -1);
  101. if($name eq $sensor) {
  102. my $r = $cols[1];
  103. $r =~ s/\'//g;
  104. $r =~ s/^.//s;
  105. chop($r);
  106. print $r;
  107. }
  108. } elsif($class eq 'fru') {
  109. my @cols = split(':', $row);
  110. my $name=$cols[0];
  111. substr($name, 0, 2) = '';
  112. if($name eq $sensor) {
  113. my $r = $cols[1];
  114. $r =~ s/\'//g;
  115. $r =~ s/^.//s;
  116. chop($r);
  117. print $r;
  118. }
  119. }
  120. }
  121.  
  122. sub results {
  123. my $results = `$ipmi_cmd`;
  124. if((defined $results) and (length $results > 0)) {
  125. return $results;
  126. } else {
  127. return undef;
  128. }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement