check_ups_charge_battery 2.3 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 ups mib
  10. '_default'=>'.1.3.6.1.2.1.33.1.2.4',
  11. #eaton
  12. 'powerware'=>'.1.3.6.1.4.1.318.1.1.1.2.2.1.0',
  13. #eaton 9PX3000i RT 2U
  14. 'eaton'=>'.1.3.6.1.4.1.534.1.2.4.0',
  15. );
  16. exit if (!$ARGV[0]);
  17. my $hostip=$ARGV[0];
  18. my ($session, $error) = Net::SNMP->session(
  19. -hostname => shift || $hostip,
  20. -community => shift || 'public',
  21. -port => shift || '161',
  22. -timeout => 5,
  23. -version => shift || '1',
  24. );
  25. if (!defined($session)) { printf("ERROR: %s.\n", $error); exit 1; }
  26. my %result;
  27. foreach my $key (sort keys %ups_oids) {
  28. my $key_oid = $ups_oids{$key};
  29. my $ret = $session->get_request( -varbindlist => [$key_oid] );
  30. my $value;
  31. if (!$ret) {
  32. #search in subtree
  33. $ret = $session->get_next_request( -varbindlist => [$key_oid] );
  34. my @keys_next = keys %$ret;
  35. if (scalar @keys_next and $keys_next[0]) {
  36. my $get_key = $keys_next[0];
  37. if ($get_key=~/^$key_oid/) {
  38. $value = $ret->{$get_key};
  39. print STDERR "Get-Next for key $key_oid: $get_key => $value\n" if ($debug);
  40. }
  41. }
  42. } else {
  43. $value = $ret->{$key_oid};
  44. print STDERR "Get: $key_oid => $value\n" if ($debug);
  45. }
  46. next if (!defined($value));
  47. $result{$key_oid}{value}=$value;
  48. $result{$key_oid}{vendor}=$key;
  49. last;
  50. }
  51. $session->close;
  52. if (!%result) { printf("OK: Unknown model. \n"); exit 0; }
  53. my $result_ok = 0;
  54. my $perf_data = "charge=%s%%;50;30;;;";
  55. my $return_value;
  56. foreach my $key (keys %result) {
  57. next if (!$key);
  58. $return_value = $result{$key}{value};
  59. next if (!defined($return_value));
  60. $result_ok = 1;
  61. ########### check temp
  62. if ($return_value < 60 and $return_value > 30) {
  63. printf("WARNING! Charge of batteries: %s percents |".$perf_data."\n",$return_value,$return_value);
  64. exit 1;
  65. }
  66. if ($return_value <= 30) {
  67. printf("ERROR! Charge of batteries: %s percents |".$perf_data."\n",$return_value,$return_value);
  68. exit 2;
  69. }
  70. }
  71. if ($result_ok) {
  72. #print OK
  73. printf("OK. Charge of batteries %s percents |".$perf_data."\n", $return_value,$return_value);
  74. exit 0;
  75. }
  76. printf("WARNING! You shouldn't have seen this. If you still see it, something clearly went wrong.\n");
  77. exit 3;