From cd6baf65a9f0bc2b90dbd9e6db82d3a2cdc80af8 Mon Sep 17 00:00:00 2001 From: linggao Date: Mon, 19 May 2008 18:51:48 +0000 Subject: [PATCH] enhanced the filter in snmp trap handling git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1446 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server-2.0/sbin/xcat_traphandler | 95 +++++++++++++++++++-------- 1 file changed, 68 insertions(+), 27 deletions(-) diff --git a/xCAT-server-2.0/sbin/xcat_traphandler b/xCAT-server-2.0/sbin/xcat_traphandler index 8f002e3a6..b3a6fb70b 100755 --- a/xCAT-server-2.0/sbin/xcat_traphandler +++ b/xCAT-server-2.0/sbin/xcat_traphandler @@ -23,15 +23,15 @@ use Socket; # then run newaliases command my $MAILTO="alerts"; -my $message, $briefmsg; -my $pair; +my $message; +my $briefmsg; my $node1; my $info; my $severity_type; my $severity; #get settings -$EMAIL=0, $LOG=0, $RUNCMD=0, $INGNORE=0; +$EMAIL=0, $LOG=0, $RUNCMD=0, $IGNORE=0; %hashI=(),%hashE=(),%hashL=(),%hashR=(); my %settings=xCAT_monitoring::monitorctrl->getPluginSettings("snmpmon"); my $i=$settings{'ignore'}; @@ -183,7 +183,7 @@ while ($temp=) { my $ipmitab = xCAT::Table->new('ipmi'); if (defined($ipmitab)) { my @tmp1=$ipmitab->getAllNodeAttribs(['node','bmc']); - if (defined(@tmp1) && (@tmp1 > 0)) { + if (@tmp1 && (@tmp1 > 0)) { foreach(@tmp1) { if ($_->{bmc} eq $node1) { $realnode=$_->{node}; last;} } @@ -248,15 +248,11 @@ if ($EMAIL || ((keys(%hashE)==0) && ($severity_type =~/Critical|Warning/))) { #$datetime=sprintf "%2d-%02d-%04d %02d:%02d:%02d", $mon+1,$mday,$year+1900,$hour,$min,$sec; #my $head="SNMP $severity received from $host($ip) on $datetime\n$briefmsg\n"; my $head="SNMP $severity received from $host($ip)\n$briefmsg\n"; - my $middle="Trap details:\n$message\n"; - my $end; if ($node1) { $info= getMoreInfo($node1);} - if ($info) { - $end ="Additonal Info from xCAT:\n$info\n"; - } + my $middle="Trap details:\n$message\n"; #email the full message to the alerts aliase - my $cmd="echo \'$head$middle$end\' \| mail -s \"$severity_type: Cluster SNMP Alert\!\" $MAILTO"; + my $cmd="echo \'$info$head\n$middle\' \| mail -s \"$severity_type: Cluster SNMP Alert\!\" $MAILTO"; `$cmd`; } @@ -297,15 +293,21 @@ if ($RUNCMD) { #-------------------------------------------------------------------------------- sub getMoreInfo { my $node=shift; - my $pos,$vpd; + my $pos; + my $vpd; - #get module name and serial number from the xCAT DB. + # get module name and serial number from the xCAT DB. + my $ref; my $table=xCAT::Table->new("vpd", -create =>1); if ($table) { my $ref = $table->getNodeAttribs($node, ['serial', 'mtm']); if ($ref) { - if($ref->{mtm}) { $vpd .= " Type/Mudule: ". $ref->{mtm} ."\n"; } - if($ref->{serial}) { $vpd .= " Serial Number: ". $ref->{serial} ."\n";} + $vpd .= " Type/Mudule: "; + if ($ref->{mtm}) { $vpd .= $ref->{mtm};} + $vpd .= "\n"; + $vpd .= " Serial Number: "; + if ($ref->{serial}) { $vpd .= $ref->{serial};} + $vpd .= "\n"; } $table->close(); } @@ -322,24 +324,37 @@ sub getMoreInfo { } } } + if (!$vpd) { + $vpd .= " Type/Mudule: \n"; + $vpd .= " Serial Number: \n"; + } #get the position my $table1=xCAT::Table->new("nodepos", -create =>1); if ($table1) { my $ref1 = $table1->getNodeAttribs($node, ['rack', 'u', 'chassis', 'slot', 'room']); - if ($ref1) { - if($ref1->{room}) { $pos .= " Room: ". $ref1->{room} ."\n"; } - if($ref1->{rack}) { $pos .= " Rack: ". $ref1->{rack} ."\n"; } - if($ref1->{u}) { $pos .= " Vertial position: ". $ref1->{u} ."\n"; } - if($ref1->{chassis}) { $pos .= " Chassis: ". $ref1->{chassis} ."\n"; } - if($ref1->{slot}) { $pos .= " Slot: ". $ref1->{slot} ."\n"; } - } + $pos .= " Room: "; + if (($ref1) && ($ref1->{room})) { $pos .= $ref1->{room}; } + $pos .= "\n"; + $pos .= " Rack: "; + if(($ref1) && ($ref1->{rack})) { $pos .= $ref1->{rack};} + $pos .= "\n"; + $pos .= " Unit: "; + if(($ref1) && ($ref1->{u})) { $pos .= $ref1->{u}; } + $pos .= "\n"; + $pos .= " Chassis: "; + if(($ref1) && ($ref1->{chassis})) { $pos .= $ref1->{chassis};} + $pos .= "\n"; + $pos .= " Slot: "; + if(($ref1) && ($ref1->{slot})) { $pos .= $ref1->{slot};} + $pos .= "\n"; + $table1->close(); } if (($pos) || ($vpd)) { - return " Node: $node\n$vpd$pos"; + return " Node: $node\n$vpd$pos\n"; } return ""; @@ -362,10 +377,15 @@ sub parseSettings { while (($settings =~ s/^(Informational|Warning|Critical|All|None)()(,)*//) || ($settings =~ s/^([^\=]+)=(\"[^\"]+\")(,)*//) || ($settings =~ s/^([^\=]+)=([^\"\,]+)(,)*//)) { - # print "$1=$2\n"; - $ret{$1}=$2; + #print "$1=$2\n"; + if (exists($ret{$1})) { + my $pa=$ret{$1}; + push(@$pa, $2); + } + else { + $ret{$1}=[$2]; + } } - return %ret; } @@ -389,10 +409,15 @@ sub checkWithOid { if (exists($hashX->{'All'})) { return 1; } if (exists($hashX->{'None'})) { return 0; } - if (exists($hashX->{$o}) && ($hashX->{$oid} eq $v)) {return 1; } + if (exists($hashX->{$o})) { + $pa= $hashX->{$o}; + foreach(@$pa) { + if ($_ eq $v) {return 1; } + } + } return 0; } - + if ((!$IGNORE) && (keys(%hashI)>0)) { $IGNORE=checking(\%hashI); if ($IGNORE) { return;} @@ -414,6 +439,22 @@ sub checkWithOid { + + + + + + + + + + + + + + + +