enh(equallogic/snmp): add storage extra informations (#2759)

This commit is contained in:
qgarnier 2021-04-30 11:37:05 +02:00 committed by GitHub
parent 1f930de09e
commit 7ef7ed6177
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 187 additions and 141 deletions

View File

@ -33,12 +33,12 @@ my %map_disk_status = (
7 => 'history-of-failures',
8 => 'unsupported-version',
9 => 'unhealthy',
10 => 'replacement',
10 => 'replacement'
);
# In MIB 'eqldisk.mib'
my $mapping = {
eqlDiskStatus => { oid => '.1.3.6.1.4.1.12740.3.1.1.1.8', map => \%map_disk_status },
eqlDiskStatus => { oid => '.1.3.6.1.4.1.12740.3.1.1.1.8', map => \%map_disk_status }
};
my $oid_eqlDiskStatus = '.1.3.6.1.4.1.12740.3.1.1.1.8';
@ -64,16 +64,23 @@ sub check {
next if ($self->check_filter(section => 'disk', instance => $member_instance . '.' . $instance));
$self->{components}->{disk}->{total}++;
$self->{output}->output_add(long_msg => sprintf("Disk '%s/%s' status is %s [instance: %s].",
$member_name, $instance, $result->{eqlDiskStatus}, $member_instance . '.' . $instance
));
$self->{output}->output_add(
long_msg => sprintf(
"disk '%s/%s' status is %s [instance: %s].",
$member_name, $instance, $result->{eqlDiskStatus}, $member_instance . '.' . $instance
)
);
my $exit = $self->get_severity(section => 'disk', value => $result->{eqlDiskStatus});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("Disk '%s/%s' status is %s",
$member_name, $instance, $result->{eqlDiskStatus}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf(
"Disk '%s/%s' status is %s",
$member_name, $instance, $result->{eqlDiskStatus}
)
);
}
}
}
1;
1;

View File

@ -27,7 +27,7 @@ my %map_fan_status = (
0 => 'unknown',
1 => 'normal',
2 => 'warning',
3 => 'critical',
3 => 'critical'
);
# In MIB 'eqlcontroller.mib'
@ -38,7 +38,7 @@ my $mapping = {
eqlMemberHealthDetailsFanHighCriticalThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.7.1.5' },
eqlMemberHealthDetailsFanHighWarningThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.7.1.6' },
eqlMemberHealthDetailsFanLowCriticalThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.7.1.7' },
eqlMemberHealthDetailsFanLowWarningThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.7.1.8' },
eqlMemberHealthDetailsFanLowWarningThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.7.1.8' }
};
my $oid_eqlMemberHealthDetailsFanEntry = '.1.3.6.1.4.1.12740.2.1.7.1';
@ -64,15 +64,22 @@ sub check {
next if ($self->check_filter(section => 'fan', instance => $member_instance . '.' . $instance));
$self->{components}->{fan}->{total}++;
$self->{output}->output_add(long_msg => sprintf("Fan '%s/%s' status is %s [instance: %s].",
$member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanCurrentState},
$member_instance . '.' . $instance
));
$self->{output}->output_add(
long_msg => sprintf(
"fan '%s/%s' status is %s [instance: %s].",
$member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanCurrentState},
$member_instance . '.' . $instance
)
);
my $exit = $self->get_severity(section => 'fan', value => $result->{eqlMemberHealthDetailsFanCurrentState});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("Fan '%s/%s' status is %s",
$member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanCurrentState}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf(
"Fan '%s/%s' status is %s",
$member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanCurrentState}
)
);
}
if (defined($result->{eqlMemberHealthDetailsFanValue})) {
@ -86,8 +93,10 @@ sub check {
$crit = $self->{perfdata}->get_perfdata_for_output(label => 'critical-fan-instance-' . $instance);
}
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit2,
short_msg => sprintf("Fan '%s/%s' speed is %s rpm", $member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanValue}));
$self->{output}->output_add(
severity => $exit2,
short_msg => sprintf("Fan '%s/%s' speed is %s rpm", $member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanValue})
);
}
$self->{output}->perfdata_add(
label => "fan", unit => 'rpm',

View File

@ -27,19 +27,32 @@ my %map_health_status = (
0 => 'unknown',
1 => 'normal',
2 => 'warning',
3 => 'critical',
3 => 'critical'
);
# In MIB 'eqlcontroller.mib'
my $mapping = {
eqlMemberHealthStatus => { oid => '.1.3.6.1.4.1.12740.2.1.5.1.1', map => \%map_health_status },
health_status => { oid => '.1.3.6.1.4.1.12740.2.1.5.1.1', map => \%map_health_status } # eqlMemberHealthStatus
};
my $mapping_extra_info = {
major_version => { oid => '.1.3.6.1.4.1.12740.2.1.1.1.21' }, # eqlMemberControllerMajorVersion
minor_version => { oid => '.1.3.6.1.4.1.12740.2.1.1.1.22' }, # eqlMemberControllerMinorVersion
maintenance_version => { oid => '.1.3.6.1.4.1.12740.2.1.1.1.23' }, # eqlMemberControllerMaintenanceVersion
product_family => { oid => '.1.3.6.1.4.1.12740.2.1.11.1.9' } # eqlMemberProductFamily
};
my $oid_eqlMemberHealthStatus = '.1.3.6.1.4.1.12740.2.1.5.1.1';
sub load {
my ($self) = @_;
push @{$self->{request}}, { oid => $oid_eqlMemberHealthStatus };
push @{$self->{request}}, { oid => $mapping->{health_status}->{oid} };
}
sub get_extra_informations {
my ($self, %options) = @_;
my $snmp_result = $self->{snmp}->get_leef(
oids => [ map($_->{oid} . '.' . $options{instance}, values(%$mapping_extra_info)) ],
);
return $self->{snmp}->map_instance(mapping => $mapping_extra_info, results => $snmp_result, instance => $options{instance});
}
sub check {
@ -49,26 +62,38 @@ sub check {
$self->{components}->{health} = {name => 'health', total => 0, skip => 0};
return if ($self->check_filter(section => 'health'));
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$oid_eqlMemberHealthStatus}})) {
next if ($oid !~ /^$mapping->{eqlMemberHealthStatus}->{oid}\.(\d+\.\d+)$/);
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{ $mapping->{health_status}->{oid} }})) {
next if ($oid !~ /^$mapping->{health_status}->{oid}\.(\d+\.\d+)$/);
my ($member_instance) = ($1);
my $member_name = $self->get_member_name(instance => $member_instance);
my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_eqlMemberHealthStatus}, instance => $member_instance);
my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{ $mapping->{health_status}->{oid} }, instance => $member_instance);
next if ($self->check_filter(section => 'health', instance => $member_instance));
$self->{components}->{health}->{total}++;
$self->{output}->output_add(long_msg => sprintf("Health '%s' status is %s [instance: %s].",
$member_name, $result->{eqlMemberHealthStatus},
$member_instance
));
my $exit = $self->get_severity(section => 'health', value => $result->{eqlMemberHealthStatus});
my $extra_infos = get_extra_informations($self, instance => $member_instance);
$self->{output}->output_add(
long_msg => sprintf(
"health '%s' status is %s [instance: %s, product: %s, version: %s].",
$member_name,
$result->{health_status},
$member_instance,
$extra_infos->{product_family},
$extra_infos->{major_version} . '.' . $extra_infos->{minor_version} . '.' . $extra_infos->{maintenance_version}
)
);
my $exit = $self->get_severity(section => 'health', value => $result->{health_status});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("Health '%s' status is %s",
$member_name, $result->{eqlMemberHealthStatus}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf(
"Health '%s' status is %s",
$member_name, $result->{health_status}
)
);
}
}
}
1;
1;

View File

@ -64,25 +64,36 @@ sub check {
next if ($self->check_filter(section => 'psu', instance => $member_instance . '.' . $instance));
$self->{components}->{psu}->{total}++;
$self->{output}->output_add(long_msg => sprintf("Power supply '%s/%s' status is %s [instance: %s] [fan status: %s].",
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyCurrentState},
$member_instance . '.' . $instance, $result->{eqlMemberHealthDetailsPowerSupplyFanStatus}
));
$self->{output}->output_add(
long_msg => sprintf(
"power supply '%s/%s' status is %s [instance: %s] [fan status: %s].",
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyCurrentState},
$member_instance . '.' . $instance, $result->{eqlMemberHealthDetailsPowerSupplyFanStatus}
)
);
my $exit = $self->get_severity(section => 'psu', value => $result->{eqlMemberHealthDetailsPowerSupplyCurrentState});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("Power supply '%s/%s' status is %s",
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyCurrentState}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf(
"Power supply '%s/%s' status is %s",
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyCurrentState}
)
);
}
next if ($self->check_filter(section => 'psu.fan', instance => $member_instance . '.' . $instance));
$exit = $self->get_severity(section => 'psu.fan', value => $result->{eqlMemberHealthDetailsPowerSupplyFanStatus});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("Power supply '%s/%s' fan status is %s",
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyFanStatus}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf(
"Power supply '%s/%s' fan status is %s",
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyFanStatus}
)
);
}
}
}
1;
1;

View File

@ -31,12 +31,12 @@ my %map_raid_status = (
5 => 'failed',
6 => 'catastrophicLoss',
7 => 'expanding',
8 => 'mirroring',
8 => 'mirroring'
);
# In MIB 'eqlcontroller.mib'
my $mapping = {
eqlMemberRaidStatus => { oid => '.1.3.6.1.4.1.12740.2.1.13.1.1', map => \%map_raid_status },
eqlMemberRaidStatus => { oid => '.1.3.6.1.4.1.12740.2.1.13.1.1', map => \%map_raid_status }
};
my $oid_eqlMemberRAIDEntry = '.1.3.6.1.4.1.12740.2.1.13.1';
@ -62,16 +62,23 @@ sub check {
next if ($self->check_filter(section => 'raid', instance => $member_instance));
$self->{components}->{raid}->{total}++;
$self->{output}->output_add(long_msg => sprintf("Raid '%s' status is %s [instance: %s].",
$member_name, $result->{eqlMemberRaidStatus}, $member_instance
));
$self->{output}->output_add(
long_msg => sprintf(
"raid '%s' status is %s [instance: %s].",
$member_name, $result->{eqlMemberRaidStatus}, $member_instance
)
);
my $exit = $self->get_severity(section => 'raid', value => $result->{eqlMemberRaidStatus});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("Raid '%s' status is %s",
$member_name, $result->{eqlMemberRaidStatus}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf(
"Raid '%s' status is %s",
$member_name, $result->{eqlMemberRaidStatus}
)
);
}
}
}
1;
1;

View File

@ -27,7 +27,7 @@ my %map_temperature_status = (
0 => 'unknown',
1 => 'normal',
2 => 'warning',
3 => 'critical',
3 => 'critical'
);
# In MIB 'eqlcontroller.mib'
@ -38,7 +38,7 @@ my $mapping = {
eqlMemberHealthDetailsTemperatureHighCriticalThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.6.1.5' },
eqlMemberHealthDetailsTemperatureHighWarningThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.6.1.6' },
eqlMemberHealthDetailsTemperatureLowCriticalThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.6.1.7' },
eqlMemberHealthDetailsTemperatureLowWarningThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.6.1.8' },
eqlMemberHealthDetailsTemperatureLowWarningThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.6.1.8' }
};
my $oid_eqlMemberHealthDetailsTemperatureEntry = '.1.3.6.1.4.1.12740.2.1.6.1';
@ -64,15 +64,22 @@ sub check {
next if ($self->check_filter(section => 'temperature', instance => $member_instance . '.' . $instance));
$self->{components}->{temperature}->{total}++;
$self->{output}->output_add(long_msg => sprintf("Temperature '%s/%s' status is %s [instance: %s].",
$member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureCurrentState},
$member_instance . '.' . $instance
));
$self->{output}->output_add(
long_msg => sprintf(
"temperature '%s/%s' status is %s [instance: %s].",
$member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureCurrentState},
$member_instance . '.' . $instance
)
);
my $exit = $self->get_severity(section => 'temperature', value => $result->{eqlMemberHealthDetailsTemperatureCurrentState});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("Temperature '%s/%s' status is %s",
$member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureCurrentState}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf(
"Temperature '%s/%s' status is %s",
$member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureCurrentState}
)
);
}
if (defined($result->{eqlMemberHealthDetailsTemperatureValue})) {
@ -86,8 +93,10 @@ sub check {
$crit = $self->{perfdata}->get_perfdata_for_output(label => 'critical-temperature-instance-' . $instance);
}
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit2,
short_msg => sprintf("Temperature '%s/%s' is %s degree centigrade", $member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureValue}));
$self->{output}->output_add(
severity => $exit2,
short_msg => sprintf("Temperature '%s/%s' is %s degree centigrade", $member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureValue})
);
}
$self->{output}->perfdata_add(
label => "temp", unit => 'C',

View File

@ -24,23 +24,19 @@ use base qw(centreon::plugins::templates::counter);
use strict;
use warnings;
use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold);
use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng);
use Digest::MD5 qw(md5_hex);
sub custom_status_output {
my ($self, %options) = @_;
my $msg = 'status : ' . $self->{result_values}->{status} . ' [smart health: ' . $self->{result_values}->{health} . ']';
return $msg;
return 'status: ' . $self->{result_values}->{status} . ' [smart health: ' . $self->{result_values}->{health} . ']';
}
sub custom_status_calc {
sub prefix_disk_output {
my ($self, %options) = @_;
$self->{result_values}->{status} = $options{new_datas}->{$self->{instance} . '_eqlDiskStatus'};
$self->{result_values}->{health} = $options{new_datas}->{$self->{instance} . '_eqlDiskHealth'};
$self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'};
return 0;
return "Disk '" . $options{instance_value}->{display} . "' ";
}
sub set_counters {
@ -51,92 +47,75 @@ sub set_counters {
];
$self->{maps_counters}->{disk} = [
{ label => 'status', threshold => 0, set => {
key_values => [ { name => 'eqlDiskHealth' }, { name => 'eqlDiskStatus' }, { name => 'display' } ],
closure_custom_calc => $self->can('custom_status_calc'),
{ label => 'status', type => 2, critical_default => '%{status} !~ /on-line|spare|off-line/i', set => {
key_values => [ { name => 'health' }, { name => 'status' }, { name => 'display' } ],
closure_custom_output => $self->can('custom_status_output'),
closure_custom_perfdata => sub { return 0; },
closure_custom_threshold_check => \&catalog_status_threshold,
closure_custom_threshold_check => \&catalog_status_threshold_ng
}
},
{ label => 'read', set => {
key_values => [ { name => 'eqlDiskStatusBytesRead', per_second => 1 }, { name => 'display' } ],
output_template => 'read : %s %s/s',
key_values => [ { name => 'bytes_read', per_second => 1 }, { name => 'display' } ],
output_template => 'read: %s %s/s',
output_change_bytes => 1,
perfdatas => [
{ label => 'read_iops', template => '%.2f',
unit => 'B/s', min => 0, label_extra_instance => 1, instance_use => 'display' },
],
unit => 'B/s', min => 0, label_extra_instance => 1, instance_use => 'display' }
]
}
},
{ label => 'write', set => {
key_values => [ { name => 'eqlDiskStatusBytesWritten', per_second => 1 }, { name => 'display' } ],
output_template => 'write : %s %s/s',
key_values => [ { name => 'bytes_written', per_second => 1 }, { name => 'display' } ],
output_template => 'write: %s %s/s',
output_change_bytes => 1,
perfdatas => [
{ label => 'write', template => '%.2f',
unit => 'B/s', min => 0, label_extra_instance => 1, instance_use => 'display' },
],
unit => 'B/s', min => 0, label_extra_instance => 1, instance_use => 'display' }
]
}
},
{ label => 'busy-time', set => {
key_values => [ { name => 'eqlDiskStatusBusyTime', diff => 1 }, { name => 'display' } ],
output_template => 'time busy : %s sec',
key_values => [ { name => 'busy_time', diff => 1 }, { name => 'display' } ],
output_template => 'time busy: %s sec',
perfdatas => [
{ label => 'busy_time', template => '%s',
unit => 's', min => 0, label_extra_instance => 1, instance_use => 'display' },
],
unit => 's', min => 0, label_extra_instance => 1, instance_use => 'display' }
]
}
},
}
];
}
sub prefix_disk_output {
my ($self, %options) = @_;
return "Disk '" . $options{instance_value}->{display} . "' ";
}
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options, statefile => 1);
bless $self, $class;
$options{options}->add_options(arguments => {
'filter-name:s' => { name => 'filter_name' },
'unknown-status:s' => { name => 'unknown_status', default => '' },
'warning-status:s' => { name => 'warning_status', default => '' },
'critical-status:s' => { name => 'critical_status', default => '%{status} !~ /on-line|spare|off-line/i' }
'filter-name:s' => { name => 'filter_name' }
});
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::check_options(%options);
$self->change_macros(macros => ['warning_status', 'critical_status', 'unknown_status']);
}
my $map_disk_status = {
1 => 'on-line', 2 => 'spare', 3 => 'failed', 4 => 'off-line',
5 => 'alt-sig', 6 => 'too-small', 7 => 'history-of-failures',
8 => 'unsupported-version', 9 => 'unhealthy', 10 => 'replacement',
11 => 'encrypted', 12 => 'notApproved', 13 => 'preempt-failed',
11 => 'encrypted', 12 => 'notApproved', 13 => 'preempt-failed'
};
my $map_disk_health = {
0 => 'smart-status-not-available',
1 => 'smart-ok',
2 => 'smart-tripped',
2 => 'smart-tripped'
};
my $mapping = {
eqlDiskHealth => { oid => '.1.3.6.1.4.1.12740.3.1.1.1.17', map => $map_disk_health },
eqlDiskStatusBytesRead => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.2' }, # MB
eqlDiskStatusBytesWritten => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.3' }, # MB
eqlDiskStatusBusyTime => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.4' }, # in seconds
health => { oid => '.1.3.6.1.4.1.12740.3.1.1.1.17', map => $map_disk_health }, # eqlDiskHealth
bytes_read => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.2' }, # eqlDiskStatusBytesRead [MB]
bytes_written => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.3' }, # eqlDiskStatusBytesWritten [MB]
busy_time => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.4' }, # eqlDiskStatusBusyTime [seconds]
};
sub manage_selection {
@ -164,31 +143,34 @@ sub manage_selection {
next;
}
$self->{disk}->{$instance} = { display => $name, eqlDiskStatus => $map_disk_status->{$snmp_result->{$oid}} };
$self->{disk}->{$instance} = { display => $name, status => $map_disk_status->{ $snmp_result->{$oid} } };
}
if (scalar(keys %{$self->{disk}}) <= 0) {
$self->{output}->add_option_msg(short_msg => "No entry found.");
$self->{output}->option_exit();
}
$options{snmp}->load(oids => [
$options{snmp}->load(
oids => [
map($_->{oid}, values(%$mapping))
],
instances => [keys %{$self->{disk}}], instance_regexp => '^(.*)$');
instances => [keys %{$self->{disk}}],
instance_regexp => '^(.*)$'
);
$snmp_result = $options{snmp}->get_leef(nothing_quit => 1);
foreach (keys %{$self->{disk}}) {
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $_);
$result->{eqlDiskStatusBytesRead} *= 1024 * 1024;
$result->{eqlDiskStatusBytesWritten} *= 1024 * 1024;
$result->{eqlDiskHealth} = 'n/a' if (!defined($result->{eqlDiskHealth}));
$result->{bytes_read} *= 1024 * 1024;
$result->{bytes_written} *= 1024 * 1024;
$result->{health} = 'n/a' if (!defined($result->{health}));
$self->{disk}->{$_} = { %{$self->{disk}->{$_}}, %$result };
}
$self->{cache_name} = "dell_equallogic_" . $self->{mode} . '_' . $options{snmp}->get_hostname() . '_' . $options{snmp}->get_port() . '_' .
$self->{cache_name} = 'dell_equallogic_' . $self->{mode} . '_' . $options{snmp}->get_hostname() . '_' . $options{snmp}->get_port() . '_' .
(defined($self->{option_results}->{filter_counters}) ? md5_hex($self->{option_results}->{filter_counters}) : md5_hex('all')) . '_' .
(defined($self->{option_results}->{filter_name}) ? md5_hex($self->{option_results}->{filter_name}) : md5_hex('all'));
}
@ -222,16 +204,11 @@ Can used special variables like: %{health}, %{status}, %{display}
Set critical threshold for status (Default: '%{status} !~ /on-line|spare|off-line/i').
Can used special variables like: %{health}, %{status}, %{display}
=item B<--warning-*>
=item B<--warning-*> B<--critical-*>
Threshold warning.
Thresholds.
Can be: 'busy-time' (s), 'read-iops' (iops), 'write-iops' (iops).
=item B<--critical-*>
Threshold critical.
Can be: 'busy-time' (s), 'read-iops' (iops), 'write-iops' (iops).
=back
=cut

View File

@ -28,8 +28,9 @@ use warnings;
sub set_system {
my ($self, %options) = @_;
$self->{regexp_threshold_numeric_check_section_option} = '^(temperature|fan)$';
$self->{regexp_threshold_numeric_check_section_option} = '^(?:temperature|fan)$';
$self->{cb_hook1} = 'get_system_information';
$self->{cb_hook2} = 'snmp_execute';
$self->{thresholds} = {
@ -37,29 +38,29 @@ sub set_system {
['unknown', 'UNKNOWN'],
['normal', 'OK'],
['warning', 'WARNING'],
['critical', 'CRITICAL'],
['critical', 'CRITICAL']
],
temperature => [
['unknown', 'UNKNOWN'],
['normal', 'OK'],
['warning', 'WARNING'],
['critical', 'CRITICAL'],
['critical', 'CRITICAL']
],
health => [
['unknown', 'UNKNOWN'],
['normal', 'OK'],
['warning', 'WARNING'],
['critical', 'CRITICAL'],
['critical', 'CRITICAL']
],
psu => [
['on-and-operating', 'OK'],
['no-ac-power', 'CRITICAL'],
['failed-or-no-data', 'CRITICAL'],
['failed-or-no-data', 'CRITICAL']
],
'psu.fan' => [
['not-applicable', 'OK'],
['fan-is-operational', 'OK'],
['fan-not-operational', 'CRITICAL'],
['fan-not-operational', 'CRITICAL']
],
raid => [
['ok', 'OK'],
@ -69,7 +70,7 @@ sub set_system {
['failed', 'CRITICAL'],
['catastrophicLoss', 'CRITICAL'],
['expanding', 'OK'],
['mirroring', 'OK'],
['mirroring', 'OK']
],
disk => [
['on-line', 'OK'],
@ -81,8 +82,8 @@ sub set_system {
['history-of-failures', 'WARNING'],
['unsupported-version', 'CRITICAL'],
['unhealthy', 'CRITICAL'],
['replacement', 'CRITICAL'],
],
['replacement', 'CRITICAL']
]
};
$self->{components_path} = 'storage::dell::equallogic::snmp::mode::components';
@ -113,7 +114,7 @@ sub get_member_name {
my ($self, %options) = @_;
my $name = defined($self->{results}->{$oid_eqlMemberName}->{$oid_eqlMemberName . '.' . $options{instance}}) ?
$self->{results}->{$oid_eqlMemberName}->{$oid_eqlMemberName . '.' . $options{instance}} : 'unknown';
$self->{results}->{$oid_eqlMemberName}->{$oid_eqlMemberName . '.' . $options{instance}} : 'unknown';
return $name;
}