1
0

trap_restart.pl 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/perl
  2. #
  3. # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
  4. #
  5. use FindBin '$Bin';
  6. use lib "/opt/Eye/scripts";
  7. use strict;
  8. use Time::Local;
  9. use FileHandle;
  10. use Data::Dumper;
  11. use Rstat::config;
  12. use Rstat::main;
  13. use Rstat::database;
  14. use Rstat::net_utils;
  15. use DBI;
  16. $debug=0;
  17. $log_enable = 0;
  18. my $host = <STDIN>; # Read the Hostname - First line of input from STDIN
  19. chomp($host);
  20. my $ip = <STDIN>; # Read the IP - Second line of input
  21. chomp($ip);
  22. my %oids;
  23. my @lines=();
  24. while(<STDIN>) {
  25. chomp($_);
  26. push(@lines,$_);
  27. }
  28. ########## write log #############
  29. my ($host_ip) = $oids{'SNMP-COMMUNITY-MIB::snmpTrapAddress.0'} || ($ip =~ m#^UDP\:\s+\[([\d\.]+)\]\:\d+.*$#o);
  30. my $TRAP_DIR="/var/log/trapd/$host_ip";
  31. if (! -e $TRAP_DIR) { mkdir $TRAP_DIR, 0755; }
  32. my $TRAP_FILE = $TRAP_DIR. "/trap.log";
  33. my ($sec,$min,$hour,$mday,$mon,$year) = (localtime())[0,1,2,3,4,5];
  34. $mon += 1; $year += 1900;
  35. my $date = sprintf "%04d%02d%02d-%02d%02d%02d",$year,$mon,$mday,$hour,$min,$sec;
  36. open(TRAPFILE, ">> $TRAP_FILE");
  37. my $coldstart=0;
  38. foreach my $trap_lines (@lines) {
  39. print(TRAPFILE "$date [".$$."] LINE: $trap_lines\n");
  40. my $key;
  41. my $value;
  42. if ($trap_lines=~/^(\S+)\s+(.*)/) {
  43. $key = $1;
  44. $value = $2;
  45. }
  46. next if (!$key);
  47. $value='' if (!$value);
  48. $value=~s/\"//g;
  49. $oids{$key}=$value;
  50. }
  51. foreach my $key (keys %oids) {
  52. print(TRAPFILE "$date [".$$."] IP: $host_ip HOST: $host TRAP: $key VALUE: $oids{$key}\n");
  53. if ($oids{$key}=~/coldstart/i) { $coldstart=1; }
  54. }
  55. exit if (!$coldstart);
  56. ############ find device ###############
  57. my $IP_ATON=StrToIp($host_ip);
  58. print(TRAPFILE "$date [".$$."] search host by ip [$host_ip] aton: $IP_ATON\n");
  59. #get device
  60. my $sSQL="SELECT dns_name FROM User_auth where deleted=0 and ip_int='".$IP_ATON."'";
  61. my $ret=get_custom_record($dbh,$sSQL);
  62. my $device_name=$ret->{dns_name};
  63. print(TRAPFILE "$date [".$$."] name: $device_name\n");
  64. exit if (!$device_name);
  65. ############ notify nagios #############
  66. my $svc_description = 'Uptime';
  67. my $stringoutput = 'WARN: Trap - Restart device! '.$svc_description;
  68. my $retcode = 1;
  69. my $run_cmd = "/etc/nagios4/scripts/eventhandlers/submit_check_result '".$device_name."' '".$svc_description."' $retcode '".$stringoutput."'";
  70. print(TRAPFILE "$date [".$$."] run: $run_cmd\n");
  71. system($run_cmd);
  72. close(TRAPFILE);
  73. exit;