check_ups_leave_time 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::SNMP qw(ticks_to_time TRANSLATE_NONE);
  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. '_default'=>'.1.3.6.1.2.1.33.1.2.3.0',
  11. #apc
  12. 'apc'=>'.1.3.6.1.4.1.318.1.1.1.2.2.3',
  13. #powerware
  14. 'powerware'=>'.1.3.6.1.4.1.534.1.2.1.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 = "remain=%sm;10;8;;;";
  55. my $return_value;
  56. my $online_min;
  57. foreach my $key (keys %result) {
  58. next if (!$key);
  59. $return_value = $result{$key}{value};
  60. next if (!defined($return_value));
  61. $result_ok = 1;
  62. ########### check space
  63. #apc
  64. if ($result{$key}{vendor} eq 'apc') { $online_min = int($return_value/6000); }
  65. #eaton
  66. if ($result{$key}{vendor} eq 'powerware') { $online_min = int($return_value/60); }
  67. #default
  68. if ($result{$key}{vendor} eq '_default') { $online_min = $return_value; }
  69. print STDERR "$key => $online_min\n" if ($debug);
  70. #compare
  71. if ($online_min <= 8) {
  72. printf("ERROR! Before switching-off ups remains %s minutes |".$perf_data."\n", $online_min,$online_min);
  73. exit 2;
  74. }
  75. if ($online_min > 8 and $online_min<=10) {
  76. printf("WARNING! Before switching-off ups remains %s minutes |".$perf_data."\n", $online_min,$online_min);
  77. exit 1;
  78. }
  79. }
  80. if ($result_ok) {
  81. #print OK
  82. printf("OK Before switching-off ups remains %s minutes |".$perf_data."\n", $online_min,$online_min);
  83. exit 0;
  84. }
  85. printf("WARNING! You shouldn't have seen this. If you still see it, something clearly went wrong.\n");
  86. exit 3;