check_snmp_lastbatt 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::SNMP qw(ticks_to_time TRANSLATE_NONE);
  4. use DateTime;
  5. use DateTime::Format::Strptime;
  6. my $TIMEOUT = 30;
  7. $SIG{ALRM} = sub { print "ERROR: No response\n"; exit 3; };
  8. alarm($TIMEOUT);
  9. my $warn_time = 365 * 5;
  10. my $hostip=$ARGV[0];
  11. my $community = $ARGV[1] || 'public';
  12. my ($session, $error) = Net::SNMP->session(
  13. -hostname => shift || $hostip,
  14. -community => shift || $community,
  15. -port => shift || 161,
  16. -timeout => 5,
  17. );
  18. if (!defined($session)) {
  19. printf("ERROR: %s.\n", $error);
  20. exit 1;
  21. }
  22. my $inputline = '1.3.6.1.4.1.318.1.1.1.2.1.3.0';
  23. $session->translate(TRANSLATE_NONE);
  24. my $result = $session->get_request(
  25. -varbindlist => [$inputline]
  26. );
  27. if (!defined($result)) {
  28. printf("ERROR: %s.\n", $session->error);
  29. $session->close;
  30. exit 2;
  31. }
  32. $session->close;
  33. if (!defined($result->{$inputline})) {
  34. printf("ERROR: %s.\n", $session->error);
  35. $session->close;
  36. exit 2;
  37. }
  38. my $value = $result->{$inputline};
  39. my ($mm,$dd,$yy) = split(/\//,$value);
  40. if ($yy <2000 ) { $yy+=2000; }
  41. my $date = DateTime->new( year => $yy, month => $mm, day => $dd, time_zone => 'local');
  42. my $today = DateTime->today(time_zone=>'local');
  43. my $dur = $date->delta_days($today);
  44. my $timeshift = $dur->in_units('days');
  45. if ($timeshift > $warn_time) {
  46. printf("WARN: The batteries are too old. It's time to change: %s\n", $value);
  47. $session->close;
  48. exit 1;
  49. }
  50. printf("Last Battery Replacement : %s\n",$value);
  51. exit 0;