1package Classes::Barracuda::Component::EnvironmentalSubsystem; 2our @ISA = qw(Monitoring::GLPlugin::SNMP::Item); 3use strict; 4 5sub init { 6 my ($self) = @_; 7 $self->get_snmp_tables('PHION-MIB', [ 8 ['sensors', 'hwSensorsTable', 'Classes::Barracuda::Component::EnvironmentalSubsystem::Sensor'], 9 ['partitions', 'diskSpaceTable', 'Classes::Barracuda::Component::EnvironmentalSubsystem::Partition'], 10 ['raidevents', 'raidEventsTable', 'Classes::Barracuda::Component::EnvironmentalSubsystem::RaidEvent'], 11 ]); 12} 13 14 15package Classes::Barracuda::Component::EnvironmentalSubsystem::Sensor; 16our @ISA = qw(Monitoring::GLPlugin::SNMP::TableItem); 17use strict; 18 19sub finish { 20 my ($self) = @_; 21 if ($self->{hwSensorType} eq "temperature") { 22 bless $self, "Classes::Barracuda::Component::EnvironmentalSubsystem::Sensor::Temp"; 23 $self->finish(); 24 } elsif ($self->{hwSensorType} eq "psu-status") { 25 bless $self, "Classes::Barracuda::Component::EnvironmentalSubsystem::Sensor::PS"; 26 $self->finish(); 27 } elsif ($self->{hwSensorType} eq "fan") { 28 bless $self, "Classes::Barracuda::Component::EnvironmentalSubsystem::Sensor::Fan"; 29 $self->finish(); 30 } 31} 32 33package Classes::Barracuda::Component::EnvironmentalSubsystem::Sensor::PS; 34our @ISA = qw(Monitoring::GLPlugin::SNMP::TableItem); 35use strict; 36 37sub finish { 38 my ($self) = @_; 39 $self->{hwSensorValue} = ($self->{hwSensorValue} == 1) ? "ok" : "failed"; 40} 41 42sub check { 43 my ($self) = @_; 44 $self->add_info(sprintf '%s status is %s', 45 $self->{hwSensorName}, $self->{hwSensorValue}); 46 if ($self->{hwSensorValue} eq "ok") { 47 $self->add_ok(); 48 } else { 49 $self->add_critical(); 50 } 51} 52 53package Classes::Barracuda::Component::EnvironmentalSubsystem::Sensor::Temp; 54our @ISA = qw(Monitoring::GLPlugin::SNMP::TableItem); 55use strict; 56 57sub finish { 58 my ($self) = @_; 59 $self->{hwSensorValue} /= 1000; 60 $self->{name} = $self->{hwSensorName} =~ /temperature/i ? 61 $self->{hwSensorName} : $self->{hwSensorName}." Temperature"; 62 $self->{label} = lc $self->{hwSensorName}; 63 $self->{label} =~ s/Temperature//gi; 64 $self->{label} =~ s/^\s+//g; 65 $self->{label} =~ s/\s+$//g; 66 $self->{label} =~ s/\s+/_/g; 67 $self->{label} = "temp_".$self->{label}; 68} 69 70sub check { 71 my ($self) = @_; 72 $self->add_info(sprintf '%s temperature is %.2fC', 73 $self->{hwSensorName}, $self->{hwSensorValue}); 74 $self->set_thresholds(metric => $self->{label}, 75 warning => 50, critical => 60 76 ); 77 $self->add_message($self->check_thresholds( 78 metric => $self->{label}, 79 value => $self->{hwSensorValue}, 80 )); 81 $self->add_perfdata( 82 label => $self->{label}, 83 value => $self->{hwSensorValue}, 84 ); 85} 86 87package Classes::Barracuda::Component::EnvironmentalSubsystem::Sensor::Fan; 88our @ISA = qw(Monitoring::GLPlugin::SNMP::TableItem); 89use strict; 90 91sub finish { 92 my ($self) = @_; 93 $self->{name} = $self->{hwSensorName} =~ /fan/i ? 94 $self->{hwSensorName} : $self->{hwSensorName}." Fan"; 95 $self->{label} = lc $self->{hwSensorName}; 96 $self->{label} =~ s/Fan//gi; 97 $self->{label} =~ s/^\s+//g; 98 $self->{label} =~ s/\s+$//g; 99 $self->{label} =~ s/\s+/_/g; 100 $self->{label} = "fan_".$self->{label}; 101} 102 103sub check { 104 my ($self) = @_; 105 $self->add_info(sprintf '%s rpm is %.2f', 106 $self->{hwSensorName}, $self->{hwSensorValue}); 107 $self->set_thresholds(metric => $self->{label}, 108 warning => "1000:5500", critical => "100:6000", 109 ); 110 $self->add_message($self->check_thresholds( 111 metric => $self->{label}, 112 value => $self->{hwSensorValue}, 113 )); 114 $self->add_perfdata( 115 label => $self->{label}, 116 value => $self->{hwSensorValue}, 117 ); 118} 119 120package Classes::Barracuda::Component::EnvironmentalSubsystem::Partition; 121our @ISA = qw(Monitoring::GLPlugin::SNMP::TableItem); 122use strict; 123 124sub finish { 125 my ($self) = @_; 126 $self->{label} = (lc $self->{partitionName})."_usage"; 127} 128 129sub check { 130 my ($self) = @_; 131 $self->add_info(sprintf "partition %s usage is %.2f%%", 132 $self->{partitionName}, 133 $self->{partitionUsedSpacePercent} 134 ); 135 $self->set_thresholds(metric => $self->{label}, 136 warning => 80, critical => 90 137 ); 138 $self->add_message($self->check_thresholds( 139 metric => $self->{label}, 140 value => $self->{partitionUsedSpacePercent}, 141 )); 142 $self->add_perfdata( 143 label => $self->{label}, 144 value => $self->{partitionUsedSpacePercent}, 145 uom => "%", 146 ); 147} 148 149 150package Classes::Barracuda::Component::EnvironmentalSubsystem::RaidEvent; 151our @ISA = qw(Monitoring::GLPlugin::SNMP::TableItem); 152use strict; 153 154sub check { 155 my ($self) = @_; 156 $self->add_info(sprintf 'level %s raid event: %s at %s', 157 $self->{raidEventSev}, $self->{raidEventText}, $self->{raidEventTime}); 158 if ($self->{raidEventSev} eq "error") { 159 $self->add_critical(); 160 } elsif ($self->{raidEventSev} eq "warning") { 161 $self->add_warning(); 162 } elsif ($self->{raidEventSev} eq "unknown") { 163 $self->add_warning(); 164 } else { 165 $self->add_ok(); 166 } 167} 168