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