Advertisement
Guest User

Untitled

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