1
0

check_ups_model 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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.1.2',
  11. #apc
  12. 'apc'=>'.1.3.6.1.4.1.318.1.1.1.1.1.1.0',
  13. #eaton
  14. 'powerware'=>'.1.3.6.1.4.1.534.1.1.2.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 $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. printf("OK! Model: %s \n",$return_value);
  62. exit 0;
  63. }
  64. printf("WARNING! You shouldn't have seen this. If you still see it, something clearly went wrong.\n");
  65. exit 3;