1
0

check_ups_battery_temp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::SNMP;
  4. my $TIMEOUT = 30;
  5. $SIG{ALRM} = sub { print "ERROR: No response\n"; exit 3; };
  6. alarm($TIMEOUT);
  7. my $debug = 0;
  8. my %ups_oids = (
  9. #default
  10. #apc
  11. 'apc'=>'.1.3.6.1.4.1.318.1.1.1.2.2.2.0',
  12. #eaton
  13. 'eaton'=>'.1.3.6.1.4.1.534.1.6.1.0',
  14. );
  15. exit if (!$ARGV[0]);
  16. my $hostip=$ARGV[0];
  17. my ($session, $error) = Net::SNMP->session(
  18. -hostname => shift || $hostip,
  19. -community => shift || 'public',
  20. -port => shift || '161',
  21. -timeout => 5,
  22. -version => shift || '1',
  23. );
  24. if (!defined($session)) { printf("ERROR: %s.\n", $error); exit 1; }
  25. my %result;
  26. foreach my $key (sort keys %ups_oids) {
  27. my $key_oid = $ups_oids{$key};
  28. my $ret = $session->get_request( -varbindlist => [$key_oid] );
  29. my $value;
  30. if (!$ret) {
  31. #search in subtree
  32. $ret = $session->get_next_request( -varbindlist => [$key_oid] );
  33. my @keys_next = keys %$ret;
  34. if (scalar @keys_next and $keys_next[0]) {
  35. my $get_key = $keys_next[0];
  36. if ($get_key=~/^$key_oid/) {
  37. $value = $ret->{$get_key};
  38. print STDERR "Get-Next for key $key_oid: $get_key => $value\n" if ($debug);
  39. }
  40. }
  41. } else {
  42. $value = $ret->{$key_oid};
  43. print STDERR "Get: $key_oid => $value\n" if ($debug);
  44. }
  45. next if (!defined($value));
  46. $result{$key_oid}{value}=$value;
  47. $result{$key_oid}{vendor}=$key;
  48. last;
  49. }
  50. $session->close;
  51. if (!%result) { printf("OK: Unknown model. \n"); exit 0; }
  52. my $result_ok = 0;
  53. my $perf_data = "input=%s;210;170;0;280;";
  54. my $return_value;
  55. foreach my $key (keys %result) {
  56. next if (!$key);
  57. $return_value = $result{$key}{value};
  58. next if (!defined($return_value));
  59. $result_ok = 1;
  60. ########### check space
  61. if ($return_value >=55) {
  62. printf("ERROR! Temperature of batteries %s Degrees. There will be flames soon |".$perf_data."\n", $return_value,$return_value);
  63. exit 2;
  64. }
  65. if ($return_value >=38) {
  66. printf("ERROR! Burns. Temperature of batteries %s Degrees |".$perf_data."\n", $return_value,$return_value);
  67. exit 2;
  68. }
  69. }
  70. if ($result_ok) {
  71. #print OK
  72. printf("OK Temperature of batteries %s Degrees |".$perf_data."\n", $return_value,$return_value);
  73. exit 0;
  74. }
  75. printf("WARNING! You shouldn't have seen this. If you still see it, something clearly went wrong.\n");
  76. exit 3;