Merge branch '152-handle-incomplete-SNMPtraps' into 'develop'
Improved SNMP trap handling against incomplete traps or partially delayed ones. Closes #152 See merge request !593
This commit is contained in:
commit
07b8e178d3
|
@ -211,6 +211,11 @@ sub pandora_snmptrapd {
|
||||||
# Try to save as much information as possible if the trap could not be parsed
|
# Try to save as much information as possible if the trap could not be parsed
|
||||||
$oid = $type_desc if ($oid eq '' || $oid eq '.');
|
$oid = $type_desc if ($oid eq '' || $oid eq '.');
|
||||||
|
|
||||||
|
if (!defined($oid)) {
|
||||||
|
logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv1 trap?)", 5);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
} elsif ($trap_ver eq "SNMPv2") {
|
} elsif ($trap_ver eq "SNMPv2") {
|
||||||
($date, $time, $source, $data) = split(/\[\*\*\]/, $line, 4);
|
($date, $time, $source, $data) = split(/\[\*\*\]/, $line, 4);
|
||||||
my @data = split(/\t/, $data);
|
my @data = split(/\t/, $data);
|
||||||
|
@ -219,7 +224,7 @@ sub pandora_snmptrapd {
|
||||||
$oid = shift @data;
|
$oid = shift @data;
|
||||||
|
|
||||||
if (!defined($oid)) {
|
if (!defined($oid)) {
|
||||||
logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv2 trap?)", 1);
|
logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv2 trap?)", 5);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$oid =~ s/.* = OID: //;
|
$oid =~ s/.* = OID: //;
|
||||||
|
@ -441,21 +446,32 @@ sub read_snmplogfile()
|
||||||
|
|
||||||
return undef if (! defined($line));
|
return undef if (! defined($line));
|
||||||
|
|
||||||
|
my $retry_count = 0;
|
||||||
|
|
||||||
# More lines ?
|
# More lines ?
|
||||||
while($read_ahead_line = <SNMPLOGFILE>) {
|
while(1) {
|
||||||
|
while($read_ahead_line = <SNMPLOGFILE>) {
|
||||||
|
|
||||||
# Get current file position
|
# Get current file position
|
||||||
$read_ahead_pos = tell(SNMPLOGFILE);
|
$read_ahead_pos = tell(SNMPLOGFILE);
|
||||||
|
|
||||||
# Get out of the loop if you find another Trap
|
# Get out of the loop if you find another Trap
|
||||||
last if($read_ahead_line =~ /^SNMP/ );
|
last if($read_ahead_line =~ /^SNMP/ );
|
||||||
|
|
||||||
# $read_ahead_line looks continued line...
|
# $read_ahead_line looks continued line...
|
||||||
|
|
||||||
# Append to the line and correct the position
|
# Append to the line and correct the position
|
||||||
chomp($line);
|
chomp($line);
|
||||||
$line .= "$read_ahead_line";
|
$line .= "$read_ahead_line";
|
||||||
$pos = $read_ahead_pos;
|
$pos = $read_ahead_pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
# if $line looks incomplete, try to get continued line
|
||||||
|
# just within 10sec. After that, giving up to complete it
|
||||||
|
# and flush $line as it is.
|
||||||
|
last if(chomp($line) > 0 || $retry_count++ >= 10);
|
||||||
|
|
||||||
|
sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
# return fetched line with file position to be saved.
|
# return fetched line with file position to be saved.
|
||||||
|
|
Loading…
Reference in New Issue