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',
|
7 => 'history-of-failures',
|
||||||
8 => 'unsupported-version',
|
8 => 'unsupported-version',
|
||||||
9 => 'unhealthy',
|
9 => 'unhealthy',
|
||||||
10 => 'replacement',
|
10 => 'replacement'
|
||||||
);
|
);
|
||||||
|
|
||||||
# In MIB 'eqldisk.mib'
|
# In MIB 'eqldisk.mib'
|
||||||
my $mapping = {
|
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';
|
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));
|
next if ($self->check_filter(section => 'disk', instance => $member_instance . '.' . $instance));
|
||||||
$self->{components}->{disk}->{total}++;
|
$self->{components}->{disk}->{total}++;
|
||||||
|
|
||||||
$self->{output}->output_add(long_msg => sprintf("Disk '%s/%s' status is %s [instance: %s].",
|
$self->{output}->output_add(
|
||||||
$member_name, $instance, $result->{eqlDiskStatus}, $member_instance . '.' . $instance
|
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});
|
my $exit = $self->get_severity(section => 'disk', value => $result->{eqlDiskStatus});
|
||||||
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Disk '%s/%s' status is %s",
|
severity => $exit,
|
||||||
$member_name, $instance, $result->{eqlDiskStatus}));
|
short_msg => sprintf(
|
||||||
|
"Disk '%s/%s' status is %s",
|
||||||
|
$member_name, $instance, $result->{eqlDiskStatus}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -27,7 +27,7 @@ my %map_fan_status = (
|
|||||||
0 => 'unknown',
|
0 => 'unknown',
|
||||||
1 => 'normal',
|
1 => 'normal',
|
||||||
2 => 'warning',
|
2 => 'warning',
|
||||||
3 => 'critical',
|
3 => 'critical'
|
||||||
);
|
);
|
||||||
|
|
||||||
# In MIB 'eqlcontroller.mib'
|
# In MIB 'eqlcontroller.mib'
|
||||||
@ -38,7 +38,7 @@ my $mapping = {
|
|||||||
eqlMemberHealthDetailsFanHighCriticalThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.7.1.5' },
|
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' },
|
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' },
|
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';
|
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));
|
next if ($self->check_filter(section => 'fan', instance => $member_instance . '.' . $instance));
|
||||||
$self->{components}->{fan}->{total}++;
|
$self->{components}->{fan}->{total}++;
|
||||||
|
|
||||||
$self->{output}->output_add(long_msg => sprintf("Fan '%s/%s' status is %s [instance: %s].",
|
$self->{output}->output_add(
|
||||||
$member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanCurrentState},
|
long_msg => sprintf(
|
||||||
$member_instance . '.' . $instance
|
"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});
|
my $exit = $self->get_severity(section => 'fan', value => $result->{eqlMemberHealthDetailsFanCurrentState});
|
||||||
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Fan '%s/%s' status is %s",
|
severity => $exit,
|
||||||
$member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanCurrentState}));
|
short_msg => sprintf(
|
||||||
|
"Fan '%s/%s' status is %s",
|
||||||
|
$member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanCurrentState}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined($result->{eqlMemberHealthDetailsFanValue})) {
|
if (defined($result->{eqlMemberHealthDetailsFanValue})) {
|
||||||
@ -86,8 +93,10 @@ sub check {
|
|||||||
$crit = $self->{perfdata}->get_perfdata_for_output(label => 'critical-fan-instance-' . $instance);
|
$crit = $self->{perfdata}->get_perfdata_for_output(label => 'critical-fan-instance-' . $instance);
|
||||||
}
|
}
|
||||||
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit2,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Fan '%s/%s' speed is %s rpm", $member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanValue}));
|
severity => $exit2,
|
||||||
|
short_msg => sprintf("Fan '%s/%s' speed is %s rpm", $member_name, $result->{eqlMemberHealthDetailsFanName}, $result->{eqlMemberHealthDetailsFanValue})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
$self->{output}->perfdata_add(
|
$self->{output}->perfdata_add(
|
||||||
label => "fan", unit => 'rpm',
|
label => "fan", unit => 'rpm',
|
||||||
|
@ -27,19 +27,32 @@ my %map_health_status = (
|
|||||||
0 => 'unknown',
|
0 => 'unknown',
|
||||||
1 => 'normal',
|
1 => 'normal',
|
||||||
2 => 'warning',
|
2 => 'warning',
|
||||||
3 => 'critical',
|
3 => 'critical'
|
||||||
);
|
);
|
||||||
|
|
||||||
# In MIB 'eqlcontroller.mib'
|
|
||||||
my $mapping = {
|
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 {
|
sub load {
|
||||||
my ($self) = @_;
|
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 {
|
sub check {
|
||||||
@ -49,26 +62,38 @@ sub check {
|
|||||||
$self->{components}->{health} = {name => 'health', total => 0, skip => 0};
|
$self->{components}->{health} = {name => 'health', total => 0, skip => 0};
|
||||||
return if ($self->check_filter(section => 'health'));
|
return if ($self->check_filter(section => 'health'));
|
||||||
|
|
||||||
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$oid_eqlMemberHealthStatus}})) {
|
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{ $mapping->{health_status}->{oid} }})) {
|
||||||
next if ($oid !~ /^$mapping->{eqlMemberHealthStatus}->{oid}\.(\d+\.\d+)$/);
|
next if ($oid !~ /^$mapping->{health_status}->{oid}\.(\d+\.\d+)$/);
|
||||||
my ($member_instance) = ($1);
|
my ($member_instance) = ($1);
|
||||||
my $member_name = $self->get_member_name(instance => $member_instance);
|
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));
|
next if ($self->check_filter(section => 'health', instance => $member_instance));
|
||||||
$self->{components}->{health}->{total}++;
|
$self->{components}->{health}->{total}++;
|
||||||
|
|
||||||
$self->{output}->output_add(long_msg => sprintf("Health '%s' status is %s [instance: %s].",
|
my $extra_infos = get_extra_informations($self, instance => $member_instance);
|
||||||
$member_name, $result->{eqlMemberHealthStatus},
|
|
||||||
$member_instance
|
$self->{output}->output_add(
|
||||||
));
|
long_msg => sprintf(
|
||||||
my $exit = $self->get_severity(section => 'health', value => $result->{eqlMemberHealthStatus});
|
"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)) {
|
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Health '%s' status is %s",
|
severity => $exit,
|
||||||
$member_name, $result->{eqlMemberHealthStatus}));
|
short_msg => sprintf(
|
||||||
|
"Health '%s' status is %s",
|
||||||
|
$member_name, $result->{health_status}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -64,25 +64,36 @@ sub check {
|
|||||||
next if ($self->check_filter(section => 'psu', instance => $member_instance . '.' . $instance));
|
next if ($self->check_filter(section => 'psu', instance => $member_instance . '.' . $instance));
|
||||||
$self->{components}->{psu}->{total}++;
|
$self->{components}->{psu}->{total}++;
|
||||||
|
|
||||||
$self->{output}->output_add(long_msg => sprintf("Power supply '%s/%s' status is %s [instance: %s] [fan status: %s].",
|
$self->{output}->output_add(
|
||||||
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyCurrentState},
|
long_msg => sprintf(
|
||||||
$member_instance . '.' . $instance, $result->{eqlMemberHealthDetailsPowerSupplyFanStatus}
|
"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});
|
my $exit = $self->get_severity(section => 'psu', value => $result->{eqlMemberHealthDetailsPowerSupplyCurrentState});
|
||||||
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Power supply '%s/%s' status is %s",
|
severity => $exit,
|
||||||
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyCurrentState}));
|
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));
|
next if ($self->check_filter(section => 'psu.fan', instance => $member_instance . '.' . $instance));
|
||||||
$exit = $self->get_severity(section => 'psu.fan', value => $result->{eqlMemberHealthDetailsPowerSupplyFanStatus});
|
$exit = $self->get_severity(section => 'psu.fan', value => $result->{eqlMemberHealthDetailsPowerSupplyFanStatus});
|
||||||
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Power supply '%s/%s' fan status is %s",
|
severity => $exit,
|
||||||
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyFanStatus}));
|
short_msg => sprintf(
|
||||||
|
"Power supply '%s/%s' fan status is %s",
|
||||||
|
$member_name, $result->{eqlMemberHealthDetailsPowerSupplyName}, $result->{eqlMemberHealthDetailsPowerSupplyFanStatus}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -31,12 +31,12 @@ my %map_raid_status = (
|
|||||||
5 => 'failed',
|
5 => 'failed',
|
||||||
6 => 'catastrophicLoss',
|
6 => 'catastrophicLoss',
|
||||||
7 => 'expanding',
|
7 => 'expanding',
|
||||||
8 => 'mirroring',
|
8 => 'mirroring'
|
||||||
);
|
);
|
||||||
|
|
||||||
# In MIB 'eqlcontroller.mib'
|
# In MIB 'eqlcontroller.mib'
|
||||||
my $mapping = {
|
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';
|
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));
|
next if ($self->check_filter(section => 'raid', instance => $member_instance));
|
||||||
$self->{components}->{raid}->{total}++;
|
$self->{components}->{raid}->{total}++;
|
||||||
|
|
||||||
$self->{output}->output_add(long_msg => sprintf("Raid '%s' status is %s [instance: %s].",
|
$self->{output}->output_add(
|
||||||
$member_name, $result->{eqlMemberRaidStatus}, $member_instance
|
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});
|
my $exit = $self->get_severity(section => 'raid', value => $result->{eqlMemberRaidStatus});
|
||||||
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Raid '%s' status is %s",
|
severity => $exit,
|
||||||
$member_name, $result->{eqlMemberRaidStatus}));
|
short_msg => sprintf(
|
||||||
|
"Raid '%s' status is %s",
|
||||||
|
$member_name, $result->{eqlMemberRaidStatus}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -27,7 +27,7 @@ my %map_temperature_status = (
|
|||||||
0 => 'unknown',
|
0 => 'unknown',
|
||||||
1 => 'normal',
|
1 => 'normal',
|
||||||
2 => 'warning',
|
2 => 'warning',
|
||||||
3 => 'critical',
|
3 => 'critical'
|
||||||
);
|
);
|
||||||
|
|
||||||
# In MIB 'eqlcontroller.mib'
|
# In MIB 'eqlcontroller.mib'
|
||||||
@ -38,7 +38,7 @@ my $mapping = {
|
|||||||
eqlMemberHealthDetailsTemperatureHighCriticalThreshold => { oid => '.1.3.6.1.4.1.12740.2.1.6.1.5' },
|
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' },
|
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' },
|
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';
|
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));
|
next if ($self->check_filter(section => 'temperature', instance => $member_instance . '.' . $instance));
|
||||||
$self->{components}->{temperature}->{total}++;
|
$self->{components}->{temperature}->{total}++;
|
||||||
|
|
||||||
$self->{output}->output_add(long_msg => sprintf("Temperature '%s/%s' status is %s [instance: %s].",
|
$self->{output}->output_add(
|
||||||
$member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureCurrentState},
|
long_msg => sprintf(
|
||||||
$member_instance . '.' . $instance
|
"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});
|
my $exit = $self->get_severity(section => 'temperature', value => $result->{eqlMemberHealthDetailsTemperatureCurrentState});
|
||||||
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Temperature '%s/%s' status is %s",
|
severity => $exit,
|
||||||
$member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureCurrentState}));
|
short_msg => sprintf(
|
||||||
|
"Temperature '%s/%s' status is %s",
|
||||||
|
$member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureCurrentState}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined($result->{eqlMemberHealthDetailsTemperatureValue})) {
|
if (defined($result->{eqlMemberHealthDetailsTemperatureValue})) {
|
||||||
@ -86,8 +93,10 @@ sub check {
|
|||||||
$crit = $self->{perfdata}->get_perfdata_for_output(label => 'critical-temperature-instance-' . $instance);
|
$crit = $self->{perfdata}->get_perfdata_for_output(label => 'critical-temperature-instance-' . $instance);
|
||||||
}
|
}
|
||||||
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
|
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
|
||||||
$self->{output}->output_add(severity => $exit2,
|
$self->{output}->output_add(
|
||||||
short_msg => sprintf("Temperature '%s/%s' is %s degree centigrade", $member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureValue}));
|
severity => $exit2,
|
||||||
|
short_msg => sprintf("Temperature '%s/%s' is %s degree centigrade", $member_name, $result->{eqlMemberHealthDetailsTemperatureName}, $result->{eqlMemberHealthDetailsTemperatureValue})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
$self->{output}->perfdata_add(
|
$self->{output}->perfdata_add(
|
||||||
label => "temp", unit => 'C',
|
label => "temp", unit => 'C',
|
||||||
|
@ -24,23 +24,19 @@ use base qw(centreon::plugins::templates::counter);
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
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);
|
use Digest::MD5 qw(md5_hex);
|
||||||
|
|
||||||
sub custom_status_output {
|
sub custom_status_output {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
my $msg = 'status : ' . $self->{result_values}->{status} . ' [smart health: ' . $self->{result_values}->{health} . ']';
|
return 'status: ' . $self->{result_values}->{status} . ' [smart health: ' . $self->{result_values}->{health} . ']';
|
||||||
return $msg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub custom_status_calc {
|
sub prefix_disk_output {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
$self->{result_values}->{status} = $options{new_datas}->{$self->{instance} . '_eqlDiskStatus'};
|
return "Disk '" . $options{instance_value}->{display} . "' ";
|
||||||
$self->{result_values}->{health} = $options{new_datas}->{$self->{instance} . '_eqlDiskHealth'};
|
|
||||||
$self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'};
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_counters {
|
sub set_counters {
|
||||||
@ -51,92 +47,75 @@ sub set_counters {
|
|||||||
];
|
];
|
||||||
|
|
||||||
$self->{maps_counters}->{disk} = [
|
$self->{maps_counters}->{disk} = [
|
||||||
{ label => 'status', threshold => 0, set => {
|
{ label => 'status', type => 2, critical_default => '%{status} !~ /on-line|spare|off-line/i', set => {
|
||||||
key_values => [ { name => 'eqlDiskHealth' }, { name => 'eqlDiskStatus' }, { name => 'display' } ],
|
key_values => [ { name => 'health' }, { name => 'status' }, { name => 'display' } ],
|
||||||
closure_custom_calc => $self->can('custom_status_calc'),
|
|
||||||
closure_custom_output => $self->can('custom_status_output'),
|
closure_custom_output => $self->can('custom_status_output'),
|
||||||
closure_custom_perfdata => sub { return 0; },
|
closure_custom_perfdata => sub { return 0; },
|
||||||
closure_custom_threshold_check => \&catalog_status_threshold,
|
closure_custom_threshold_check => \&catalog_status_threshold_ng
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ label => 'read', set => {
|
{ label => 'read', set => {
|
||||||
key_values => [ { name => 'eqlDiskStatusBytesRead', per_second => 1 }, { name => 'display' } ],
|
key_values => [ { name => 'bytes_read', per_second => 1 }, { name => 'display' } ],
|
||||||
output_template => 'read : %s %s/s',
|
output_template => 'read: %s %s/s',
|
||||||
output_change_bytes => 1,
|
output_change_bytes => 1,
|
||||||
perfdatas => [
|
perfdatas => [
|
||||||
{ label => 'read_iops', template => '%.2f',
|
{ 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 => {
|
{ label => 'write', set => {
|
||||||
key_values => [ { name => 'eqlDiskStatusBytesWritten', per_second => 1 }, { name => 'display' } ],
|
key_values => [ { name => 'bytes_written', per_second => 1 }, { name => 'display' } ],
|
||||||
output_template => 'write : %s %s/s',
|
output_template => 'write: %s %s/s',
|
||||||
output_change_bytes => 1,
|
output_change_bytes => 1,
|
||||||
perfdatas => [
|
perfdatas => [
|
||||||
{ label => 'write', template => '%.2f',
|
{ 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 => {
|
{ label => 'busy-time', set => {
|
||||||
key_values => [ { name => 'eqlDiskStatusBusyTime', diff => 1 }, { name => 'display' } ],
|
key_values => [ { name => 'busy_time', diff => 1 }, { name => 'display' } ],
|
||||||
output_template => 'time busy : %s sec',
|
output_template => 'time busy: %s sec',
|
||||||
perfdatas => [
|
perfdatas => [
|
||||||
{ label => 'busy_time', template => '%s',
|
{ 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 {
|
sub new {
|
||||||
my ($class, %options) = @_;
|
my ($class, %options) = @_;
|
||||||
my $self = $class->SUPER::new(package => __PACKAGE__, %options, statefile => 1);
|
my $self = $class->SUPER::new(package => __PACKAGE__, %options, statefile => 1);
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
|
|
||||||
$options{options}->add_options(arguments => {
|
$options{options}->add_options(arguments => {
|
||||||
'filter-name:s' => { name => 'filter_name' },
|
'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' }
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return $self;
|
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 = {
|
my $map_disk_status = {
|
||||||
1 => 'on-line', 2 => 'spare', 3 => 'failed', 4 => 'off-line',
|
1 => 'on-line', 2 => 'spare', 3 => 'failed', 4 => 'off-line',
|
||||||
5 => 'alt-sig', 6 => 'too-small', 7 => 'history-of-failures',
|
5 => 'alt-sig', 6 => 'too-small', 7 => 'history-of-failures',
|
||||||
8 => 'unsupported-version', 9 => 'unhealthy', 10 => 'replacement',
|
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 = {
|
my $map_disk_health = {
|
||||||
0 => 'smart-status-not-available',
|
0 => 'smart-status-not-available',
|
||||||
1 => 'smart-ok',
|
1 => 'smart-ok',
|
||||||
2 => 'smart-tripped',
|
2 => 'smart-tripped'
|
||||||
};
|
};
|
||||||
|
|
||||||
my $mapping = {
|
my $mapping = {
|
||||||
eqlDiskHealth => { oid => '.1.3.6.1.4.1.12740.3.1.1.1.17', map => $map_disk_health },
|
health => { oid => '.1.3.6.1.4.1.12740.3.1.1.1.17', map => $map_disk_health }, # eqlDiskHealth
|
||||||
eqlDiskStatusBytesRead => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.2' }, # MB
|
bytes_read => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.2' }, # eqlDiskStatusBytesRead [MB]
|
||||||
eqlDiskStatusBytesWritten => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.3' }, # MB
|
bytes_written => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.3' }, # eqlDiskStatusBytesWritten [MB]
|
||||||
eqlDiskStatusBusyTime => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.4' }, # in seconds
|
busy_time => { oid => '.1.3.6.1.4.1.12740.3.1.2.1.4' }, # eqlDiskStatusBusyTime [seconds]
|
||||||
};
|
};
|
||||||
|
|
||||||
sub manage_selection {
|
sub manage_selection {
|
||||||
@ -164,31 +143,34 @@ sub manage_selection {
|
|||||||
next;
|
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) {
|
if (scalar(keys %{$self->{disk}}) <= 0) {
|
||||||
$self->{output}->add_option_msg(short_msg => "No entry found.");
|
$self->{output}->add_option_msg(short_msg => "No entry found.");
|
||||||
$self->{output}->option_exit();
|
$self->{output}->option_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
$options{snmp}->load(oids => [
|
$options{snmp}->load(
|
||||||
|
oids => [
|
||||||
map($_->{oid}, values(%$mapping))
|
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);
|
$snmp_result = $options{snmp}->get_leef(nothing_quit => 1);
|
||||||
|
|
||||||
foreach (keys %{$self->{disk}}) {
|
foreach (keys %{$self->{disk}}) {
|
||||||
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $_);
|
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $_);
|
||||||
|
|
||||||
$result->{eqlDiskStatusBytesRead} *= 1024 * 1024;
|
$result->{bytes_read} *= 1024 * 1024;
|
||||||
$result->{eqlDiskStatusBytesWritten} *= 1024 * 1024;
|
$result->{bytes_written} *= 1024 * 1024;
|
||||||
$result->{eqlDiskHealth} = 'n/a' if (!defined($result->{eqlDiskHealth}));
|
$result->{health} = 'n/a' if (!defined($result->{health}));
|
||||||
|
|
||||||
$self->{disk}->{$_} = { %{$self->{disk}->{$_}}, %$result };
|
$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_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'));
|
(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').
|
Set critical threshold for status (Default: '%{status} !~ /on-line|spare|off-line/i').
|
||||||
Can used special variables like: %{health}, %{status}, %{display}
|
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).
|
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
|
=back
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
@ -28,8 +28,9 @@ use warnings;
|
|||||||
sub set_system {
|
sub set_system {
|
||||||
my ($self, %options) = @_;
|
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->{cb_hook2} = 'snmp_execute';
|
||||||
|
|
||||||
$self->{thresholds} = {
|
$self->{thresholds} = {
|
||||||
@ -37,29 +38,29 @@ sub set_system {
|
|||||||
['unknown', 'UNKNOWN'],
|
['unknown', 'UNKNOWN'],
|
||||||
['normal', 'OK'],
|
['normal', 'OK'],
|
||||||
['warning', 'WARNING'],
|
['warning', 'WARNING'],
|
||||||
['critical', 'CRITICAL'],
|
['critical', 'CRITICAL']
|
||||||
],
|
],
|
||||||
temperature => [
|
temperature => [
|
||||||
['unknown', 'UNKNOWN'],
|
['unknown', 'UNKNOWN'],
|
||||||
['normal', 'OK'],
|
['normal', 'OK'],
|
||||||
['warning', 'WARNING'],
|
['warning', 'WARNING'],
|
||||||
['critical', 'CRITICAL'],
|
['critical', 'CRITICAL']
|
||||||
],
|
],
|
||||||
health => [
|
health => [
|
||||||
['unknown', 'UNKNOWN'],
|
['unknown', 'UNKNOWN'],
|
||||||
['normal', 'OK'],
|
['normal', 'OK'],
|
||||||
['warning', 'WARNING'],
|
['warning', 'WARNING'],
|
||||||
['critical', 'CRITICAL'],
|
['critical', 'CRITICAL']
|
||||||
],
|
],
|
||||||
psu => [
|
psu => [
|
||||||
['on-and-operating', 'OK'],
|
['on-and-operating', 'OK'],
|
||||||
['no-ac-power', 'CRITICAL'],
|
['no-ac-power', 'CRITICAL'],
|
||||||
['failed-or-no-data', 'CRITICAL'],
|
['failed-or-no-data', 'CRITICAL']
|
||||||
],
|
],
|
||||||
'psu.fan' => [
|
'psu.fan' => [
|
||||||
['not-applicable', 'OK'],
|
['not-applicable', 'OK'],
|
||||||
['fan-is-operational', 'OK'],
|
['fan-is-operational', 'OK'],
|
||||||
['fan-not-operational', 'CRITICAL'],
|
['fan-not-operational', 'CRITICAL']
|
||||||
],
|
],
|
||||||
raid => [
|
raid => [
|
||||||
['ok', 'OK'],
|
['ok', 'OK'],
|
||||||
@ -69,7 +70,7 @@ sub set_system {
|
|||||||
['failed', 'CRITICAL'],
|
['failed', 'CRITICAL'],
|
||||||
['catastrophicLoss', 'CRITICAL'],
|
['catastrophicLoss', 'CRITICAL'],
|
||||||
['expanding', 'OK'],
|
['expanding', 'OK'],
|
||||||
['mirroring', 'OK'],
|
['mirroring', 'OK']
|
||||||
],
|
],
|
||||||
disk => [
|
disk => [
|
||||||
['on-line', 'OK'],
|
['on-line', 'OK'],
|
||||||
@ -81,8 +82,8 @@ sub set_system {
|
|||||||
['history-of-failures', 'WARNING'],
|
['history-of-failures', 'WARNING'],
|
||||||
['unsupported-version', 'CRITICAL'],
|
['unsupported-version', 'CRITICAL'],
|
||||||
['unhealthy', 'CRITICAL'],
|
['unhealthy', 'CRITICAL'],
|
||||||
['replacement', 'CRITICAL'],
|
['replacement', 'CRITICAL']
|
||||||
],
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
$self->{components_path} = 'storage::dell::equallogic::snmp::mode::components';
|
$self->{components_path} = 'storage::dell::equallogic::snmp::mode::components';
|
||||||
@ -113,7 +114,7 @@ sub get_member_name {
|
|||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
my $name = defined($self->{results}->{$oid_eqlMemberName}->{$oid_eqlMemberName . '.' . $options{instance}}) ?
|
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;
|
return $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user