check_oki_status 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::SNMP;
  4. my $RET_OK=0;
  5. my $RET_WARNING=1;
  6. my $RET_UNKNOWN=3;
  7. my $RET_CRITICAL=2;
  8. my $MSG_OK="OK";
  9. my $MSG_WARNING="WARN";
  10. my $MSG_CRITICAL="CRIT";
  11. my $hostip=$ARGV[0];
  12. exit if (!$hostip);
  13. my $TIMEOUT = 30;
  14. $SIG{ALRM} = sub { print "ERROR: No response\n"; exit 3; };
  15. alarm($TIMEOUT);
  16. sub ping {
  17. use Net::Ping;
  18. use Time::HiRes;
  19. my ($host,$time) = @_;
  20. my $p = Net::Ping->new();
  21. $p->hires();
  22. $time=1 if (!$time);
  23. my ($ret, $duration, $ip) = $p->ping($host, $time);
  24. $p->close();
  25. $ret ? return 1: return 0;
  26. }
  27. exit $RET_UNKNOWN if (!ping($hostip));
  28. eval {
  29. #set timout for script work.
  30. $SIG{ALRM} = sub { die "Timeout 55 sec reached.\n" };
  31. alarm 55;
  32. my ($session, $error) = Net::SNMP->session(
  33. -hostname => shift || $hostip,
  34. -version => 1,
  35. -timeout => 15,
  36. -community => shift || 'public',
  37. -port => shift || 161
  38. );
  39. if (!defined($session)) {
  40. printf("ERROR: %s.\n", $error);
  41. exit 1;
  42. }
  43. my $oki_status = '1.3.6.1.4.1.2001.1.3.1.1.10.4.0';
  44. my $oki_status2 = '1.3.6.1.4.1.2001.1.3.1.1.7.1.2.1.1';
  45. my $result = $session->get_request(
  46. -varbindlist => [$oki_status]
  47. );
  48. if (!defined($result)) { $oki_status = $oki_status2; $result = $session->get_request(-varbindlist => [$oki_status]); }
  49. if (!defined($result)) {
  50. printf("ERROR: %s.\n", $session->error);
  51. $session->close;
  52. exit $RET_CRITICAL;
  53. }
  54. my $ret_str = $result->{$oki_status};
  55. $session->close;
  56. if ($ret_str =~/error/i) {
  57. print("ERROR: ".$ret_str."\n\n");
  58. exit $RET_CRITICAL;
  59. }
  60. if ($ret_str =~/warning/i) {
  61. print("WARNING ".$ret_str."\n\n");
  62. exit $RET_WARNING;
  63. }
  64. print("OK ".$ret_str."\n\n");
  65. $SIG{ALRM} = 'DEFAULT';
  66. };
  67. exit $RET_OK;