1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
$serverresponse = $session->get_table($SystemTempEntry); $session->close; #Die Table wird erfolgreich als Hash abgehollt (Eine Temperaturabfrage einer Storage Systems) foreach my $snmpkey (keys %{$serverresponse} ) { my ($oid,$key) = ( $snmpkey =~ /(.*)\.(\d+)$/ ); $snmpresponse{$oid}{$key} = $serverresponse->{$snmpkey}; } #Die SNMP Response zuweisung geht auch folgede ausgabe bekomm ich für die Elemente von $snmpresponse{$oid}{$key} 1 4 1 Baseboard 1 CPU 0 Relative 33 1 20 -54 2 1 5 1 Front panel 36 1 1 1 1 usw. $state = 'OK'; #Jetzt sollte er eigentlich für jedes Element der OID SystemTempDescription die weiter oben definiert ist einmal durch die Schleife gehen... #Er kommt aber nie in die Schleife . Ich habe genau diesen Code bei einer Festplattenabfrage zum laufen gebracht. Die OID von SystemTempDescription stimmt. #Ich habe alle OIDs getestet und an denen kann es nicht liegen(Der Rückgabewert weiter oben stimmt ja auch) foreach my $key ( keys %{$snmpresponse{$SystemTempDescription}} ) { print "......................................."; if ( defined $value ) { if ( $snmpresponse{$SystemTempDescription}{$key} eq $value ) { my $TempSensor = $snmpresponse{$SystemTempDescription}{$key}; my $Temp_name = basename($TempSensor); my $Temperature = $snmpresponse{$SystemTempCurrentValue}{$key}; $answer = "Sensor: ".$Temp_name." Termp:".$Temperature; $perfdata = $Temp_name.$Temperature; $state = 'WARNING' if ( ( defined $warn ) && ( $Temperature >= $warn ) ); $state = 'CRITICAL' if ( ( defined $warn ) && ( $Temperature >= $crit ) ); last; } } else { my $TempSensor = $snmpresponse{$SystemTempDescription}{$key}; print $TempSensor; my $Temp_name = basename($TempSensor); print $TempSensor; my $Temperature = $snmpresponse{$SystemTempCurrentValue}{$key}; print $Temperature; $answer .= "Sensor: ".$Temp_name." Termp:".$Temperature; $perfdata .= $Temp_name.$Temperature; $state = 'WARNING' if ( ( defined $warn ) && ( $Temperature >= $warn ) && ( $state ne 'CRITICAL') ); $state = 'CRITICAL' if ( ( defined $warn ) && ( $Temperature >= $crit ) ); } }
1 2 3
use Data::Dumper; print Dumper \$SystemTempDescription; print Dumper \%snmpresponse;
QuoteCode (perl): (dl )if ( defined $value ) {
$SystemTempDescription
$SystemResourceName
$SystemTempDescription