mirror of
https://github.com/centreon/centreon-plugins.git
synced 2025-07-28 16:14:21 +02:00
enh(equallogic/snmp): add storage extra informations (#2759)
This commit is contained in:
parent
1f930de09e
commit
7ef7ed6177
@ -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,14 +64,21 @@ 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}
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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',
|
||||
|
@ -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,24 +62,36 @@ 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}
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -64,23 +64,34 @@ 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}
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,14 +62,21 @@ 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}
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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',
|
||||
|
@ -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,7 +143,7 @@ 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) {
|
||||
@ -172,23 +151,26 @@ sub manage_selection {
|
||||
$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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user