check_ups_input_ac 2.3 KB

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