enh(qnap): extend modes hardware,pools and volumes for Quts Hero (#5580)

Co-authored-by: Roman Morandell <46994680+rmorandell-pgum@users.noreply.github.com>
This commit is contained in:
sfarouq-ext 2025-05-26 15:51:47 +02:00 committed by GitHub
parent 265331c48d
commit db81938e6c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 713 additions and 73 deletions

View File

@ -24,41 +24,48 @@ use strict;
use warnings;
my $map_status_disk = {
0 => 'ready',
0 => 'ready',
'-5' => 'noDisk',
'-6' => 'invalid',
'-9' => 'rwError',
'-4' => 'unknown'
};
my $map_smartinfo = {
2 => 'abnormal',
1 => 'warning',
0 => 'good',
2 => 'abnormal',
1 => 'warning',
0 => 'good',
-1 => 'error'
};
my $mapping = {
legacy => {
description => { oid => '.1.3.6.1.4.1.24681.1.2.11.1.2' }, # hdDescr
temperature => { oid => '.1.3.6.1.4.1.24681.1.2.11.1.3' }, # hdTemperature ("40 C/104 F")
status => { oid => '.1.3.6.1.4.1.24681.1.2.11.1.4', map => $map_status_disk }, # HdStatus
smartinfo => { oid => '.1.3.6.1.4.1.24681.1.2.11.1.7' } # HdSmartInfo
description => { oid => '.1.3.6.1.4.1.24681.1.2.11.1.2' },# hdDescr
temperature => { oid => '.1.3.6.1.4.1.24681.1.2.11.1.3' },# hdTemperature ("40 C/104 F")
status => { oid => '.1.3.6.1.4.1.24681.1.2.11.1.4', map => $map_status_disk },# HdStatus
smartinfo => { oid => '.1.3.6.1.4.1.24681.1.2.11.1.7' }# HdSmartInfo
},
qts => {
description => { oid => '.1.3.6.1.4.1.55062.1.10.2.1.2' }, # diskID
status => { oid => '.1.3.6.1.4.1.55062.1.10.2.1.7' }, # diskStatus
temperature => { oid => '.1.3.6.1.4.1.55062.1.10.2.1.8' } # diskTemperature
qts => {
description => { oid => '.1.3.6.1.4.1.55062.1.10.2.1.2' },# diskID
status => { oid => '.1.3.6.1.4.1.55062.1.10.2.1.7' },# diskStatus
temperature => { oid => '.1.3.6.1.4.1.55062.1.10.2.1.8' }# diskTemperature
},
ex => {
description => { oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2' }, # diskID
status => { oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.5', map => $map_smartinfo }, # diskSmartInfo
temperature => { oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6' } # diskTemperture
quts => {
description => { oid => '.1.3.6.1.4.1.55062.2.10.2.1.2' },# diskID
model => { oid => '.1.3.6.1.4.1.55062.2.10.2.1.4' },# diskModel
serial => { oid => '.1.3.6.1.4.1.55062.2.10.2.1.5' },# diskSerial
status => { oid => '.1.3.6.1.4.1.55062.2.10.2.1.7' },# diskStatus
temperature => { oid => '.1.3.6.1.4.1.55062.2.10.2.1.8' }# diskTemperature
},
es => {
description => { oid => '.1.3.6.1.4.1.24681.2.2.11.1.2' }, # es-HdDescr
temperature => { oid => '.1.3.6.1.4.1.24681.2.2.11.1.3' }, # es-HdTemperature ("26 C/78.8 F")
status => { oid => '.1.3.6.1.4.1.24681.2.2.11.1.4' }, # es-HdStatus
smartinfo => { oid => '.1.3.6.1.4.1.24681.2.2.11.1.7' } # es-HdSmartInfo
ex => {
description => { oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2' },# diskID
status => { oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.5', map => $map_smartinfo },# diskSmartInfo
temperature => { oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6' }# diskTemperture
},
es => {
description => { oid => '.1.3.6.1.4.1.24681.2.2.11.1.2' },# es-HdDescr
temperature => { oid => '.1.3.6.1.4.1.24681.2.2.11.1.3' },# es-HdTemperature ("26 C/78.8 F")
status => { oid => '.1.3.6.1.4.1.24681.2.2.11.1.4' },# es-HdStatus
smartinfo => { oid => '.1.3.6.1.4.1.24681.2.2.11.1.7' }# es-HdSmartInfo
}
};
@ -70,19 +77,24 @@ sub check_disk_legacy {
return if (defined($self->{disk_checked}));
my $snmp_result = $self->{snmp}->get_table(
oid => '.1.3.6.1.4.1.24681.1.2.11', # systemHdTable
oid => '.1.3.6.1.4.1.24681.1.2.11',# systemHdTable
start => $mapping->{description}->{oid}
);
);
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %$snmp_result)) {
next if ($oid !~ /^$mapping->{legacy}->{description}->{oid}\.(\d+)$/);
my $instance = $1;
my $result = $self->{snmp}->map_instance(mapping => $mapping->{legacy}, results => $snmp_result, instance => $instance);
my $result = $self->{snmp}->map_instance(mapping =>
$mapping->{legacy},
results =>
$snmp_result,
instance =>
$instance);
next if ($self->check_filter(section => 'disk', instance => $instance));
next if (
$result->{status} eq 'noDisk' &&
$self->absent_problem(section => 'disk', instance => $instance)
$result->{status} eq 'noDisk' &&
$self->absent_problem(section => 'disk', instance => $instance)
);
$self->{components}->{disk}->{total}++;
@ -92,14 +104,14 @@ sub check_disk_legacy {
$result->{description},
$result->{status},
$instance,
$result->{temperature},
$result->{temperature},
defined($result->{smartinfo}) ? $result->{smartinfo} : '-',
)
);
my $exit = $self->get_severity(section => 'disk', instance => $instance, value => $result->{status});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
severity => $exit,
short_msg => sprintf(
"Disk '%s' status is %s.", $result->{description}, $result->{status}
)
@ -110,7 +122,7 @@ sub check_disk_legacy {
$exit = $self->get_severity(section => 'smartdisk', value => $result->{smartinfo});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
severity => $exit,
short_msg => sprintf(
"Disk '%s' smart status is %s.", $result->{description}, $result->{smartinfo}
)
@ -121,20 +133,25 @@ sub check_disk_legacy {
next if ($result->{temperature} !~ /([0-9]+)/);
my $disk_temp = $1;
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section => 'disk', instance => $instance, value => $disk_temp);
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section =>
'disk',
instance =>
$instance,
value =>
$disk_temp);
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit2,
severity => $exit2,
short_msg => sprintf(
"Disk '%s' temperature is %s degree centigrade", $result->{description}, $disk_temp
)
);
}
$self->{output}->perfdata_add(
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
instances => $instance,
value => $disk_temp
value => $disk_temp
);
}
}
@ -143,16 +160,21 @@ sub check_disk_qts {
my ($self, %options) = @_;
my $snmp_result = $self->{snmp}->get_table(
oid => '.1.3.6.1.4.1.55062.1.10.2', # diskTable
oid => '.1.3.6.1.4.1.55062.1.10.2',# diskTable
start => $mapping->{qts}->{description}->{oid},
end => $mapping->{qts}->{temperature}->{oid}
end => $mapping->{qts}->{temperature}->{oid}
);
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %$snmp_result)) {
next if ($oid !~ /^$mapping->{qts}->{description}->{oid}\.(\d+)$/);
my $instance = $1;
$self->{disk_checked} = 1;
my $result = $self->{snmp}->map_instance(mapping => $mapping->{qts}, results => $snmp_result, instance => $instance);
my $result = $self->{snmp}->map_instance(mapping =>
$mapping->{qts},
results =>
$snmp_result,
instance =>
$instance);
next if ($self->check_filter(section => 'disk', instance => $instance));
@ -169,7 +191,7 @@ sub check_disk_qts {
my $exit = $self->get_severity(section => 'disk', instance => $instance, value => $result->{status});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
severity => $exit,
short_msg => sprintf(
"Disk '%s' status is %s.", $result->{description}, $result->{status}
)
@ -179,20 +201,99 @@ sub check_disk_qts {
next if ($result->{temperature} !~ /([0-9]+)/);
my $disk_temp = $1;
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section => 'disk', instance => $instance, value => $disk_temp);
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section =>
'disk',
instance =>
$instance,
value =>
$disk_temp);
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit2,
severity => $exit2,
short_msg => sprintf(
"Disk '%s' temperature is %s degree centigrade", $result->{description}, $disk_temp
)
);
}
$self->{output}->perfdata_add(
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
instances => $instance,
value => $disk_temp
value => $disk_temp
);
}
}
sub check_disk_quts {
my ($self, %options) = @_;
my $snmp_result = $self->{snmp}->get_table(
oid => '.1.3.6.1.4.1.55062.2.10.2',# diskTable
start => $mapping->{quts}->{description}->{oid},
end => $mapping->{quts}->{temperature}->{oid}
);
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %$snmp_result)) {
next if ($oid !~ /^$mapping->{quts}->{description}->{oid}\.(\d+)$/);
my $instance = $1;
$self->{disk_checked} = 1;
my $result = $self->{snmp}->map_instance(mapping =>
$mapping->{quts},
results =>
$snmp_result,
instance =>
$instance);
next if ($self->check_filter(section => 'disk', instance => $instance));
$self->{components}->{disk}->{total}++;
$self->{output}->output_add(
long_msg => sprintf(
"disk '%s' - '%s' [%s] status is %s [instance: %s, temperature: %s]",
$result->{description},
$result->{model},
$result->{serial},
$result->{status},
$instance,
$result->{temperature}
)
);
my $exit = $self->get_severity(section => 'disk', instance => $instance, value => $result->{status});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf(
"Disk '%s' - '%s' [%s] status is %s.",
$result->{description},
$result->{model},
$result->{serial},
$result->{status}
)
);
}
next if ($result->{temperature} !~ /([0-9]+)/);
my $disk_temp = $1;
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section =>
'disk',
instance =>
$instance,
value =>
$disk_temp);
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit2,
short_msg => sprintf(
"Disk '%s' temperature is %s degree centigrade", $result->{description}, $disk_temp
)
);
}
$self->{output}->perfdata_add(
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
instances => $instance,
value => $disk_temp
);
}
}
@ -201,16 +302,21 @@ sub check_disk_ex {
my ($self, %options) = @_;
my $snmp_result = $self->{snmp}->get_table(
oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2', # diskTable
oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2',# diskTable
start => $mapping->{ex}->{description}->{oid},
end => $mapping->{ex}->{temperature}->{oid}
end => $mapping->{ex}->{temperature}->{oid}
);
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %$snmp_result)) {
next if ($oid !~ /^$mapping->{ex}->{description}->{oid}\.(\d+)$/);
my $instance = $1;
$self->{disk_checked} = 1;
my $result = $self->{snmp}->map_instance(mapping => $mapping->{ex}, results => $snmp_result, instance => $instance);
my $result = $self->{snmp}->map_instance(mapping =>
$mapping->{ex},
results =>
$snmp_result,
instance =>
$instance);
next if ($self->check_filter(section => 'disk', instance => $instance));
@ -227,7 +333,7 @@ sub check_disk_ex {
my $exit = $self->get_severity(section => 'disk', instance => $instance, value => $result->{status});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
severity => $exit,
short_msg => sprintf(
"Disk '%s' status is %s.", $result->{description}, $result->{status}
)
@ -237,20 +343,25 @@ sub check_disk_ex {
next if ($result->{temperature} !~ /([0-9]+)/);
my $disk_temp = $1;
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section => 'disk', instance => $instance, value => $disk_temp);
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section =>
'disk',
instance =>
$instance,
value =>
$disk_temp);
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit2,
severity => $exit2,
short_msg => sprintf(
"Disk '%s' temperature is %s degree centigrade", $result->{description}, $disk_temp
)
);
}
$self->{output}->perfdata_add(
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
instances => $instance,
value => $disk_temp
value => $disk_temp
);
}
}
@ -258,14 +369,19 @@ sub check_disk_ex {
sub check_disk_es {
my ($self, %options) = @_;
my $snmp_result = $self->{snmp}->get_table(oid => '.1.3.6.1.4.1.24681.2.2.11'); # es-SystemHdTable
my $snmp_result = $self->{snmp}->get_table(oid => '.1.3.6.1.4.1.24681.2.2.11');# es-SystemHdTable
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %$snmp_result)) {
next if ($oid !~ /^$mapping->{es}->{description}->{oid}\.(\d+)$/);
my $instance = $1;
my $result = $self->{snmp}->map_instance(mapping => $mapping->{es}, results => $snmp_result, instance => $instance);
my $result = $self->{snmp}->map_instance(mapping =>
$mapping->{es},
results =>
$snmp_result,
instance =>
$instance);
next if ($self->check_filter(section => 'disk', instance => $instance));
$self->{components}->{disk}->{total}++;
$self->{output}->output_add(
long_msg => sprintf(
@ -273,14 +389,14 @@ sub check_disk_es {
$result->{description},
$result->{status},
$instance,
$result->{temperature},
$result->{temperature},
defined($result->{smartinfo}) ? $result->{smartinfo} : '-',
)
);
my $exit = $self->get_severity(section => 'disk', instance => $instance, value => $result->{status});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
severity => $exit,
short_msg => sprintf(
"Disk '%s' status is %s.", $result->{description}, $result->{status}
)
@ -291,7 +407,7 @@ sub check_disk_es {
$exit = $self->get_severity(section => 'smartdisk', value => $result->{smartinfo});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
severity => $exit,
short_msg => sprintf(
"Disk '%s' smart status is %s.", $result->{description}, $result->{smartinfo}
)
@ -302,20 +418,25 @@ sub check_disk_es {
next if ($result->{temperature} !~ /([0-9]+)/);
my $disk_temp = $1;
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section => 'disk', instance => $instance, value => $disk_temp);
my ($exit2, $warn, $crit) = $self->get_severity_numeric(section =>
'disk',
instance =>
$instance,
value =>
$disk_temp);
if (!$self->{output}->is_status(value => $exit2, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit2,
severity => $exit2,
short_msg => sprintf(
"Disk '%s' temperature is %s degree centigrade", $result->{description}, $disk_temp
)
);
}
$self->{output}->perfdata_add(
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
nlabel => 'hardware.disk.temperature.celsius',
unit => 'C',
instances => $instance,
value => $disk_temp
value => $disk_temp
);
}
}
@ -329,6 +450,8 @@ sub check {
if ($self->{is_qts} == 1) {
check_disk_qts($self);
} elsif ($self->{is_quts} == 1) {
check_disk_quts($self);
} elsif ($self->{is_es} == 1) {
check_disk_es($self);
} else {

View File

@ -29,13 +29,13 @@ sub check_raid_qts {
my ($self) = @_;
my $mapping = {
name => { oid => '.1.3.6.1.4.1.55062.1.10.5.1.3' }, # raidName
status => { oid => '.1.3.6.1.4.1.55062.1.10.5.1.4' } # raidStatus
name => { oid => '.1.3.6.1.4.1.55062.1.10.5.1.3' },# raidName
status => { oid => '.1.3.6.1.4.1.55062.1.10.5.1.4' }# raidStatus
};
my $snmp_result = $self->{snmp}->get_table(
oid => '.1.3.6.1.4.1.55062.1.10.5', # raidTable
oid => '.1.3.6.1.4.1.55062.1.10.5',# raidTable
start => $mapping->{name}->{oid},
end => $mapping->{status}->{oid}
end => $mapping->{status}->{oid}
);
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %$snmp_result)) {
next if ($oid !~ /^$mapping->{status}->{oid}\.(\d+)$/);
@ -54,7 +54,45 @@ sub check_raid_qts {
my $exit = $self->get_severity(section => 'raid', value => $result->{status});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
severity => $exit,
short_msg => sprintf(
"Raid '%s' status is %s.", $result->{name}, $result->{status}
)
);
}
}
}
sub check_raid_quts {
my ($self) = @_;
my $mapping = {
name => { oid => '.1.3.6.1.4.1.55062.2.10.5.1.3' },# raidName
status => { oid => '.1.3.6.1.4.1.55062.2.10.5.1.4' }# raidStatus
};
my $snmp_result = $self->{snmp}->get_table(
oid => '.1.3.6.1.4.1.55062.2.10.5',# raidTable
start => $mapping->{name}->{oid},
end => $mapping->{status}->{oid}
);
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %$snmp_result)) {
next if ($oid !~ /^$mapping->{status}->{oid}\.(\d+)$/);
my $instance = $1;
my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $instance);
next if ($self->check_filter(section => 'raid', instance => $instance));
$self->{components}->{raid}->{total}++;
$self->{output}->output_add(
long_msg => sprintf(
"raid '%s' status is %s [instance: %s]",
$result->{name}, $result->{status}, $instance
)
);
my $exit = $self->get_severity(section => 'raid', value => $result->{status});
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.", $result->{name}, $result->{status}
)
@ -67,7 +105,7 @@ sub check_raid_ex {
my ($self) = @_;
my $snmp_result = $self->{snmp}->get_table(
oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.2.1.2.1.5' # raidStatus
oid => '.1.3.6.1.4.1.24681.1.4.1.1.1.2.1.2.1.5'# raidStatus
);
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %$snmp_result)) {
$oid =~ /\.(\d+)$/;
@ -86,7 +124,7 @@ sub check_raid_ex {
my $exit = $self->get_severity(section => 'raid', value => $status);
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(
severity => $exit,
severity => $exit,
short_msg => sprintf(
"Raid '%s' status is %s.", $instance, $status
)
@ -99,11 +137,13 @@ sub check {
my ($self) = @_;
$self->{output}->output_add(long_msg => "Checking raids");
$self->{components}->{raid} = {name => 'raids', total => 0, skip => 0};
$self->{components}->{raid} = { name => 'raids', total => 0, skip => 0 };
return if ($self->check_filter(section => 'raid'));
if ($self->{is_qts} == 1) {
check_raid_qts($self);
} elsif ($self->{is_quts} == 1) {
check_raid_quts($self);
} elsif ($self->{is_es} == 0) {
check_raid_ex($self);
}

View File

@ -32,6 +32,10 @@ my $mapping = {
cpu_temp => { oid => '.1.3.6.1.4.1.55062.1.12.10' }, # cpuTemperature
system_temp => { oid => '.1.3.6.1.4.1.55062.1.12.11' } # systemTemperature
},
quts => {
cpu_temp => { oid => '.1.3.6.1.4.1.55062.2.12.10' }, # cpuTemperature
system_temp => { oid => '.1.3.6.1.4.1.55062.2.12.11' } # systemTemperature
},
ex => {
cpu_temp => { oid => '.1.3.6.1.4.1.24681.1.3.5' }, # cpu-TemperatureEX
system_temp => { oid => '.1.3.6.1.4.1.24681.1.3.6' } # systemTemperatureEX
@ -112,6 +116,16 @@ sub check_temp_qts {
check_temp_result($self, result => $result);
}
sub check_temp_quts {
my ($self, %options) = @_;
my $snmp_result = $self->{snmp}->get_leef(
oids => [ map($_->{oid} . '.0', values(%{$mapping->{quts}})) ]
);
my $result = $self->{snmp}->map_instance(mapping => $mapping->{quts}, results => $snmp_result, instance => 0);
check_temp_result($self, result => $result);
}
sub check_temp_es {
my ($self, %options) = @_;
@ -146,6 +160,8 @@ sub check {
if ($self->{is_qts} == 1) {
check_temp_qts($self);
} elsif ($self->{is_quts} == 1) {
check_temp_quts($self);
} elsif ($self->{is_es} == 1) {
check_temp_es($self);
} else {

View File

@ -86,10 +86,12 @@ sub snmp_execute {
$self->{is_es} = 0;
$self->{is_qts} = 0;
$self->{is_quts} = 0;
my $oid_es_uptime = '.1.3.6.1.4.1.24681.2.2.4.0'; # es-SystemUptime
my $oid_qts_model = '.1.3.6.1.4.1.55062.1.12.3.0'; # systemModel
my $oid_quts_disk_table = '.1.3.6.1.4.1.55062.2.10.7.1.1.1'; # quts-poolTable
my $snmp_result = $self->{snmp}->get_leef(
oids => [$oid_es_uptime, $oid_qts_model]
oids => [$oid_es_uptime, $oid_qts_model, $oid_quts_disk_table]
);
if (defined($snmp_result->{$oid_es_uptime})) {
$self->{is_es} = 1;
@ -97,6 +99,9 @@ sub snmp_execute {
if (defined($snmp_result->{$oid_qts_model})) {
$self->{is_qts} = 1;
}
if (defined($snmp_result->{$oid_quts_disk_table})) {
$self->{is_quts} = 1;
}
}
sub new {

View File

@ -178,6 +178,12 @@ my $mapping = {
total => { oid => '.1.3.6.1.4.1.24681.2.2.23.1.3' }, # es-SysPoolCapacity
free => { oid => '.1.3.6.1.4.1.24681.2.2.23.1.4' }, # es-SysPoolFreeSize
status => { oid => '.1.3.6.1.4.1.24681.2.2.23.1.5' } # es-SysPoolStatus
},
quts => {
name => { oid => '.1.3.6.1.4.1.55062.2.10.7.1.2' }, # es-SysPoolID
total => { oid => '.1.3.6.1.4.1.55062.2.10.7.1.3' }, # es-SysPoolCapacity
free => { oid => '.1.3.6.1.4.1.55062.2.10.7.1.4' }, # es-SysPoolFreeSize
status => { oid => '.1.3.6.1.4.1.55062.2.10.7.1.5', , map => $map_status } # es-SysPoolStatus
}
};
@ -197,7 +203,7 @@ sub check_pools {
next;
}
if (defined($options{convert})) {
if ($options{type} ne "quts" && defined($options{convert})) {
$result->{total} = $self->convert_bytes(value => $result->{total});
$result->{free} = $self->convert_bytes(value => $result->{free});
}
@ -234,6 +240,12 @@ sub manage_selection {
);
return if ($self->check_pools(snmp => $options{snmp}, type => 'ex', snmp_result => $snmp_result));
$snmp_result = $options{snmp}->get_table(
oid => '.1.3.6.1.4.1.55062.2.10.7', # QuTS hero storagePoolTable
nothing_quit => 1
);
return if $self->check_pools(snmp => $options{snmp}, type => 'quts', snmp_result => $snmp_result, convert => 1);
$snmp_result = $options{snmp}->get_table(
oid => '.1.3.6.1.4.1.24681.2.2.23', # es-SystemPoolTable
nothing_quit => 1

View File

@ -178,6 +178,12 @@ my $mapping = {
free => { oid => '.1.3.6.1.4.1.55062.1.10.9.1.4' }, # volumeFreeSize
status => { oid => '.1.3.6.1.4.1.55062.1.10.9.1.5' }, # volumeStatus
name => { oid => '.1.3.6.1.4.1.55062.1.10.9.1.8' } # volumeName
},
quts => {
total => { oid => '.1.3.6.1.4.1.55062.2.10.9.1.3' }, # volumeCapacity
free => { oid => '.1.3.6.1.4.1.55062.2.10.9.1.4' }, # volumeFreeSize
status => { oid => '.1.3.6.1.4.1.55062.2.10.9.1.5' }, # volumeStatus
name => { oid => '.1.3.6.1.4.1.55062.2.10.9.1.2' } # volumeName
}
};
@ -231,6 +237,11 @@ sub manage_selection {
my $snmp_result;
if (!defined($self->{option_results}->{force_counters_legacy})) {
$snmp_result = $options{snmp}->get_table(
oid => '.1.3.6.1.4.1.55062.2.10.9' # sharedFolderTable
);
return if ($self->check_volumes(snmp => $options{snmp}, type => 'quts', snmp_result => $snmp_result));
$snmp_result = $options{snmp}->get_table(
oid => '.1.3.6.1.4.1.55062.1.10.9' # volumeTable
);

View File

@ -225,6 +225,7 @@ psu
QoS
Qtree
queue-messages-inflighted
quts
raidvolume
ReplicaJobSession
RestAPI

View File

@ -0,0 +1,35 @@
*** Settings ***
Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource
Test Timeout 120s
*** Variables ***
${CMD} ${CENTREON_PLUGINS}
... --plugin=storage::qnap::snmp::plugin
... --mode=hardware
... --hostname=${HOSTNAME}
... --snmp-port=${SNMPPORT}
... --snmp-community=storage/qnap/snmp/qnap
*** Test Cases ***
Hardware ${tc}
[Tags] storage qnap hardware
${command} Catenate
... ${CMD}
... ${extra_options}
Ctn Run Command And Check Result As Strings ${command} ${expected_result}
Examples: tc extra_options expected_result --
... 1 ${EMPTY} CRITICAL: Raid 'Anonymized 241' status is Anonymized 197. UNKNOWN: Disk '7' - 'Anonymized 109' [Anonymized 058] status is Anonymized 095. - Disk '8' - 'Anonymized 206' [Anonymized 133] status is Anonymized 113. - Disk '9' - 'Anonymized 217' [Anonymized 072] status is Anonymized 004. - Disk '10' - 'Anonymized 174' [Anonymized 195] status is Anonymized 169. - Disk '11' - 'Anonymized 201' [Anonymized 184] status is Anonymized 133. - Disk '12' - 'Anonymized 181' [Anonymized 221] status is Anonymized 161. | '1#hardware.disk.temperature.celsius'=24C;;;; '2#hardware.disk.temperature.celsius'=24C;;;; '3#hardware.disk.temperature.celsius'=24C;;;; '4#hardware.disk.temperature.celsius'=24C;;;; '5#hardware.disk.temperature.celsius'=24C;;;; '6#hardware.disk.temperature.celsius'=24C;;;; '1#hardware.fan.speed.rpm'=6286rpm;;;0; '2#hardware.fan.speed.rpm'=6143rpm;;;0; '3#hardware.fan.speed.rpm'=6196rpm;;;0; '1#hardware.powersupply.fan.speed.rpm'=2040rpm;;;0; '1#hardware.powersupply.temperature.celsius'=27C;;;; '2#hardware.powersupply.fan.speed.rpm'=1980rpm;;;0; '2#hardware.powersupply.temperature.celsius'=28C;;;; '3#hardware.powersupply.fan.speed.rpm'=0rpm;;;0; '3#hardware.powersupply.temperature.celsius'=0C;;;; '4#hardware.powersupply.fan.speed.rpm'=0rpm;;;0; '4#hardware.powersupply.temperature.celsius'=0C;;;; 'hardware.disk.count'=6;;;; 'hardware.fan.count'=3;;;; 'hardware.psu.count'=4;;;; 'hardware.raid.count'=1;;;;
... 2 --component='psu' OK: All 4 components are ok [4/4 psu]. | '1#hardware.powersupply.fan.speed.rpm'=2040rpm;;;0; '1#hardware.powersupply.temperature.celsius'=27C;;;; '2#hardware.powersupply.fan.speed.rpm'=1980rpm;;;0; '2#hardware.powersupply.temperature.celsius'=28C;;;; '3#hardware.powersupply.fan.speed.rpm'=0rpm;;;0; '3#hardware.powersupply.temperature.celsius'=0C;;;; '4#hardware.powersupply.fan.speed.rpm'=0rpm;;;0; '4#hardware.powersupply.temperature.celsius'=0C;;;; 'hardware.psu.count'=4;;;;
... 3 --filter=psu CRITICAL: Raid 'Anonymized 241' status is Anonymized 197. UNKNOWN: Disk '7' - 'Anonymized 109' [Anonymized 058] status is Anonymized 095. - Disk '8' - 'Anonymized 206' [Anonymized 133] status is Anonymized 113. - Disk '9' - 'Anonymized 217' [Anonymized 072] status is Anonymized 004. - Disk '10' - 'Anonymized 174' [Anonymized 195] status is Anonymized 169. - Disk '11' - 'Anonymized 201' [Anonymized 184] status is Anonymized 133. - Disk '12' - 'Anonymized 181' [Anonymized 221] status is Anonymized 161. | '1#hardware.disk.temperature.celsius'=24C;;;; '2#hardware.disk.temperature.celsius'=24C;;;; '3#hardware.disk.temperature.celsius'=24C;;;; '4#hardware.disk.temperature.celsius'=24C;;;; '5#hardware.disk.temperature.celsius'=24C;;;; '6#hardware.disk.temperature.celsius'=24C;;;; '1#hardware.fan.speed.rpm'=6286rpm;;;0; '2#hardware.fan.speed.rpm'=6143rpm;;;0; '3#hardware.fan.speed.rpm'=6196rpm;;;0; 'hardware.disk.count'=6;;;; 'hardware.fan.count'=3;;;; 'hardware.raid.count'=1;;;;
... 4 --absent-problem=Raid CRITICAL: Raid 'Anonymized 241' status is Anonymized 197. UNKNOWN: Disk '7' - 'Anonymized 109' [Anonymized 058] status is Anonymized 095. - Disk '8' - 'Anonymized 206' [Anonymized 133] status is Anonymized 113. - Disk '9' - 'Anonymized 217' [Anonymized 072] status is Anonymized 004. - Disk '10' - 'Anonymized 174' [Anonymized 195] status is Anonymized 169. - Disk '11' - 'Anonymized 201' [Anonymized 184] status is Anonymized 133. - Disk '12' - 'Anonymized 181' [Anonymized 221] status is Anonymized 161. | '1#hardware.disk.temperature.celsius'=24C;;;; '2#hardware.disk.temperature.celsius'=24C;;;; '3#hardware.disk.temperature.celsius'=24C;;;; '4#hardware.disk.temperature.celsius'=24C;;;; '5#hardware.disk.temperature.celsius'=24C;;;; '6#hardware.disk.temperature.celsius'=24C;;;; '1#hardware.fan.speed.rpm'=6286rpm;;;0; '2#hardware.fan.speed.rpm'=6143rpm;;;0; '3#hardware.fan.speed.rpm'=6196rpm;;;0; '1#hardware.powersupply.fan.speed.rpm'=2040rpm;;;0; '1#hardware.powersupply.temperature.celsius'=27C;;;; '2#hardware.powersupply.fan.speed.rpm'=1980rpm;;;0; '2#hardware.powersupply.temperature.celsius'=28C;;;; '3#hardware.powersupply.fan.speed.rpm'=0rpm;;;0; '3#hardware.powersupply.temperature.celsius'=0C;;;; '4#hardware.powersupply.fan.speed.rpm'=0rpm;;;0; '4#hardware.powersupply.temperature.celsius'=0C;;;; 'hardware.disk.count'=6;;;; 'hardware.fan.count'=3;;;; 'hardware.psu.count'=4;;;; 'hardware.raid.count'=1;;;;
... 5 --no-component='UNKNOWN' --component='toto' UNKNOWN: Wrong option. Cannot find component 'toto'.
... 6 --threshold-overload='fan,OK,^(?!(ready)$)' --component='fan' OK: All 3 components are ok [3/3 fans]. | '1#hardware.fan.speed.rpm'=6286rpm;;;0; '2#hardware.fan.speed.rpm'=6143rpm;;;0; '3#hardware.fan.speed.rpm'=6196rpm;;;0; 'hardware.fan.count'=3;;;;
... 7 --warning='fan,.*,1500' --component='fan' WARNING: Fan '1' speed is 6286 rpm - Fan '2' speed is 6143 rpm - Fan '3' speed is 6196 rpm | '1#hardware.fan.speed.rpm'=6286rpm;;;0; '2#hardware.fan.speed.rpm'=6143rpm;;;0; '3#hardware.fan.speed.rpm'=6196rpm;;;0; 'hardware.fan.count'=3;;;;
... 8 --critical='fan,.*,1500' --component='fan' CRITICAL: Fan '1' speed is 6286 rpm - Fan '2' speed is 6143 rpm - Fan '3' speed is 6196 rpm | '1#hardware.fan.speed.rpm'=6286rpm;;;0; '2#hardware.fan.speed.rpm'=6143rpm;;;0; '3#hardware.fan.speed.rpm'=6196rpm;;;0; 'hardware.fan.count'=3;;;;

View File

@ -0,0 +1,32 @@
*** Settings ***
Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource
Test Timeout 120s
*** Variables ***
${CMD} ${CENTREON_PLUGINS}
... --plugin=storage::qnap::snmp::plugin
... --mode=pools
... --hostname=${HOSTNAME}
... --snmp-port=${SNMPPORT}
... --snmp-community=storage/qnap/snmp/qnap
*** Test Cases ***
Pools ${tc}
[Tags] storage qnap pools
${command} Catenate
... ${CMD}
... ${extra_options}
Ctn Run Command And Check Result As Strings ${command} ${expected_result}
Examples: tc extra_options expected_result --
... 1 ${EMPTY} OK: pool '1' status: ready
... 2 --filter-name=1 OK: pool '1' status: ready
... 3 --unknown-pool-status='\\\%{status} eq "ready"' UNKNOWN: pool '1' status: ready
... 4 --warning-pool-status='\\\%{status} eq "ready"' WARNING: pool '1' status: ready
... 5 --critical-pool-status='\\\%{status} eq "ready"' CRITICAL: pool '1' status: ready

View File

@ -0,0 +1,333 @@
.1.3.6.1.4.1.24681.1.2.11.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.24681.1.2.11.1.1.2 = INTEGER: 2
.1.3.6.1.4.1.24681.1.2.11.1.1.3 = INTEGER: 3
.1.3.6.1.4.1.24681.1.2.11.1.1.4 = INTEGER: 4
.1.3.6.1.4.1.24681.1.2.11.1.1.5 = INTEGER: 5
.1.3.6.1.4.1.24681.1.2.11.1.1.6 = INTEGER: 6
.1.3.6.1.4.1.24681.1.2.11.1.1.7 = INTEGER: 7
.1.3.6.1.4.1.24681.1.2.11.1.1.8 = INTEGER: 8
.1.3.6.1.4.1.24681.1.2.11.1.1.9 = INTEGER: 9
.1.3.6.1.4.1.24681.1.2.11.1.1.10 = INTEGER: 10
.1.3.6.1.4.1.24681.1.2.11.1.1.11 = INTEGER: 11
.1.3.6.1.4.1.24681.1.2.11.1.1.12 = INTEGER: 12
.1.3.6.1.4.1.24681.1.2.11.1.1.13 = INTEGER: 13
.1.3.6.1.4.1.24681.1.2.11.1.1.14 = INTEGER: 14
.1.3.6.1.4.1.24681.1.2.11.1.1.15 = INTEGER: 15
.1.3.6.1.4.1.24681.1.2.11.1.1.16 = INTEGER: 16
.1.3.6.1.4.1.24681.1.2.11.1.1.17 = INTEGER: 17
.1.3.6.1.4.1.24681.1.2.11.1.1.18 = INTEGER: 18
.1.3.6.1.4.1.24681.1.2.11.1.2.1 = STRING: Anonymized 066
.1.3.6.1.4.1.24681.1.2.11.1.2.2 = STRING: Anonymized 125
.1.3.6.1.4.1.24681.1.2.11.1.2.3 = STRING: Anonymized 022
.1.3.6.1.4.1.24681.1.2.11.1.2.4 = STRING: Anonymized 130
.1.3.6.1.4.1.24681.1.2.11.1.2.5 = STRING: Anonymized 051
.1.3.6.1.4.1.24681.1.2.11.1.2.6 = STRING: Anonymized 175
.1.3.6.1.4.1.24681.1.2.11.1.2.7 = STRING: Anonymized 210
.1.3.6.1.4.1.24681.1.2.11.1.2.8 = STRING: Anonymized 173
.1.3.6.1.4.1.24681.1.2.11.1.2.9 = STRING: Anonymized 097
.1.3.6.1.4.1.24681.1.2.11.1.2.10 = STRING: Anonymized 015
.1.3.6.1.4.1.24681.1.2.11.1.2.11 = STRING: Anonymized 022
.1.3.6.1.4.1.24681.1.2.11.1.2.12 = STRING: Anonymized 182
.1.3.6.1.4.1.24681.1.2.11.1.2.13 = STRING: Anonymized 183
.1.3.6.1.4.1.24681.1.2.11.1.2.14 = STRING: Anonymized 248
.1.3.6.1.4.1.24681.1.2.11.1.2.15 = STRING: Anonymized 220
.1.3.6.1.4.1.24681.1.2.11.1.2.16 = STRING: Anonymized 074
.1.3.6.1.4.1.24681.1.2.11.1.2.17 = STRING: Anonymized 131
.1.3.6.1.4.1.24681.1.2.11.1.2.18 = STRING: Anonymized 223
.1.3.6.1.4.1.24681.1.2.11.1.3.1 = STRING: Anonymized 045
.1.3.6.1.4.1.24681.1.2.11.1.3.2 = STRING: Anonymized 069
.1.3.6.1.4.1.24681.1.2.11.1.3.3 = STRING: Anonymized 170
.1.3.6.1.4.1.24681.1.2.11.1.3.4 = STRING: Anonymized 098
.1.3.6.1.4.1.24681.1.2.11.1.3.5 = STRING: Anonymized 201
.1.3.6.1.4.1.24681.1.2.11.1.3.6 = STRING: Anonymized 206
.1.3.6.1.4.1.24681.1.2.11.1.3.7 = STRING: Anonymized 000
.1.3.6.1.4.1.24681.1.2.11.1.3.8 = STRING: Anonymized 229
.1.3.6.1.4.1.24681.1.2.11.1.3.9 = STRING: Anonymized 174
.1.3.6.1.4.1.24681.1.2.11.1.3.10 = STRING: Anonymized 021
.1.3.6.1.4.1.24681.1.2.11.1.3.11 = STRING: Anonymized 068
.1.3.6.1.4.1.24681.1.2.11.1.3.12 = STRING: Anonymized 025
.1.3.6.1.4.1.24681.1.2.11.1.3.13 = STRING: Anonymized 010
.1.3.6.1.4.1.24681.1.2.11.1.3.14 = STRING: Anonymized 095
.1.3.6.1.4.1.24681.1.2.11.1.3.15 = STRING: Anonymized 147
.1.3.6.1.4.1.24681.1.2.11.1.3.16 = STRING: Anonymized 136
.1.3.6.1.4.1.24681.1.2.11.1.3.17 = STRING: Anonymized 215
.1.3.6.1.4.1.24681.1.2.11.1.3.18 = STRING: Anonymized 222
.1.3.6.1.4.1.24681.1.2.11.1.4.1 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.2 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.3 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.4 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.5 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.6 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.7 = INTEGER: 0
.1.3.6.1.4.1.24681.1.2.11.1.4.8 = INTEGER: 0
.1.3.6.1.4.1.24681.1.2.11.1.4.9 = INTEGER: 0
.1.3.6.1.4.1.24681.1.2.11.1.4.10 = INTEGER: 0
.1.3.6.1.4.1.24681.1.2.11.1.4.11 = INTEGER: 0
.1.3.6.1.4.1.24681.1.2.11.1.4.12 = INTEGER: 0
.1.3.6.1.4.1.24681.1.2.11.1.4.13 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.14 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.15 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.16 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.17 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.4.18 = INTEGER: -5
.1.3.6.1.4.1.24681.1.2.11.1.5.1 = STRING: Anonymized 224
.1.3.6.1.4.1.24681.1.2.11.1.5.2 = STRING: Anonymized 115
.1.3.6.1.4.1.24681.1.2.11.1.5.3 = STRING: Anonymized 199
.1.3.6.1.4.1.24681.1.2.11.1.5.4 = STRING: Anonymized 188
.1.3.6.1.4.1.24681.1.2.11.1.5.5 = STRING: Anonymized 185
.1.3.6.1.4.1.24681.1.2.11.1.5.6 = STRING: Anonymized 089
.1.3.6.1.4.1.24681.1.2.11.1.5.7 = STRING: Anonymized 184
.1.3.6.1.4.1.24681.1.2.11.1.5.8 = STRING: Anonymized 251
.1.3.6.1.4.1.24681.1.2.11.1.5.9 = STRING: Anonymized 191
.1.3.6.1.4.1.24681.1.2.11.1.5.10 = STRING: Anonymized 189
.1.3.6.1.4.1.24681.1.2.11.1.5.11 = STRING: Anonymized 063
.1.3.6.1.4.1.24681.1.2.11.1.5.12 = STRING: Anonymized 198
.1.3.6.1.4.1.24681.1.2.11.1.5.13 = STRING: Anonymized 035
.1.3.6.1.4.1.24681.1.2.11.1.5.14 = STRING: Anonymized 066
.1.3.6.1.4.1.24681.1.2.11.1.5.15 = STRING: Anonymized 243
.1.3.6.1.4.1.24681.1.2.11.1.5.16 = STRING: Anonymized 076
.1.3.6.1.4.1.24681.1.2.11.1.5.17 = STRING: Anonymized 079
.1.3.6.1.4.1.24681.1.2.11.1.5.18 = STRING: Anonymized 018
.1.3.6.1.4.1.24681.1.2.11.1.6.1 = STRING: Anonymized 072
.1.3.6.1.4.1.24681.1.2.11.1.6.2 = STRING: Anonymized 128
.1.3.6.1.4.1.24681.1.2.11.1.6.3 = STRING: Anonymized 184
.1.3.6.1.4.1.24681.1.2.11.1.6.4 = STRING: Anonymized 240
.1.3.6.1.4.1.24681.1.2.11.1.6.5 = STRING: Anonymized 017
.1.3.6.1.4.1.24681.1.2.11.1.6.6 = STRING: Anonymized 083
.1.3.6.1.4.1.24681.1.2.11.1.6.7 = STRING: Anonymized 120
.1.3.6.1.4.1.24681.1.2.11.1.6.8 = STRING: Anonymized 228
.1.3.6.1.4.1.24681.1.2.11.1.6.9 = STRING: Anonymized 078
.1.3.6.1.4.1.24681.1.2.11.1.6.10 = STRING: Anonymized 001
.1.3.6.1.4.1.24681.1.2.11.1.6.11 = STRING: Anonymized 242
.1.3.6.1.4.1.24681.1.2.11.1.6.12 = STRING: Anonymized 220
.1.3.6.1.4.1.24681.1.2.11.1.6.13 = STRING: Anonymized 182
.1.3.6.1.4.1.24681.1.2.11.1.6.14 = STRING: Anonymized 132
.1.3.6.1.4.1.24681.1.2.11.1.6.15 = STRING: Anonymized 038
.1.3.6.1.4.1.24681.1.2.11.1.6.16 = STRING: Anonymized 237
.1.3.6.1.4.1.24681.1.2.11.1.6.17 = STRING: Anonymized 069
.1.3.6.1.4.1.24681.1.2.11.1.6.18 = STRING: Anonymized 082
.1.3.6.1.4.1.24681.1.2.11.1.7.1 = STRING: Anonymized 046
.1.3.6.1.4.1.24681.1.2.11.1.7.2 = STRING: Anonymized 049
.1.3.6.1.4.1.24681.1.2.11.1.7.3 = STRING: Anonymized 065
.1.3.6.1.4.1.24681.1.2.11.1.7.4 = STRING: Anonymized 053
.1.3.6.1.4.1.24681.1.2.11.1.7.5 = STRING: Anonymized 035
.1.3.6.1.4.1.24681.1.2.11.1.7.6 = STRING: Anonymized 219
.1.3.6.1.4.1.24681.1.2.11.1.7.7 = STRING: Anonymized 033
.1.3.6.1.4.1.24681.1.2.11.1.7.8 = STRING: Anonymized 071
.1.3.6.1.4.1.24681.1.2.11.1.7.9 = STRING: Anonymized 233
.1.3.6.1.4.1.24681.1.2.11.1.7.10 = STRING: Anonymized 101
.1.3.6.1.4.1.24681.1.2.11.1.7.11 = STRING: Anonymized 223
.1.3.6.1.4.1.24681.1.2.11.1.7.12 = STRING: Anonymized 128
.1.3.6.1.4.1.24681.1.2.11.1.7.13 = STRING: Anonymized 060
.1.3.6.1.4.1.24681.1.2.11.1.7.14 = STRING: Anonymized 059
.1.3.6.1.4.1.24681.1.2.11.1.7.15 = STRING: Anonymized 036
.1.3.6.1.4.1.24681.1.2.11.1.7.16 = STRING: Anonymized 116
.1.3.6.1.4.1.24681.1.2.11.1.7.17 = STRING: Anonymized 251
.1.3.6.1.4.1.24681.1.2.11.1.7.18 = STRING: Anonymized 216
.1.3.6.1.4.1.24681.1.2.15.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.24681.1.2.15.1.1.2 = INTEGER: 2
.1.3.6.1.4.1.24681.1.2.15.1.1.3 = INTEGER: 3
.1.3.6.1.4.1.24681.1.2.15.1.2.1 = STRING: Anonymized 205
.1.3.6.1.4.1.24681.1.2.15.1.2.2 = STRING: Anonymized 110
.1.3.6.1.4.1.24681.1.2.15.1.2.3 = STRING: Anonymized 191
.1.3.6.1.4.1.24681.1.2.15.1.3.1 = STRING: Anonymized 029
.1.3.6.1.4.1.24681.1.2.15.1.3.2 = STRING: Anonymized 039
.1.3.6.1.4.1.24681.1.2.15.1.3.3 = STRING: Anonymized 129
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.1.2 = INTEGER: 2
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.1.3 = INTEGER: 3
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.2.1 = INTEGER: 1
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.2.2 = INTEGER: 2
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.2.3 = INTEGER: 3
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.3.1 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.3.2 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.3.3 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.4.1 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.4.2 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.4.3 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.5.1 = INTEGER: 6286
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.5.2 = INTEGER: 6143
.1.3.6.1.4.1.24681.1.4.1.1.1.1.2.2.1.5.3 = INTEGER: 6196
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.1.2 = INTEGER: 2
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.1.3 = INTEGER: 3
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.1.4 = INTEGER: 4
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.2.1 = INTEGER: 1
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.2.2 = INTEGER: 2
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.2.3 = INTEGER: 1
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.2.4 = INTEGER: 1
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.3.1 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.3.2 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.3.3 = INTEGER: 32
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.3.4 = INTEGER: 33
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.4.1 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.4.2 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.4.3 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.4.4 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.5.1 = INTEGER: 2040
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.5.2 = INTEGER: 1980
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.5.3 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.5.4 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.6.1 = INTEGER: 27
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.6.2 = INTEGER: 28
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.6.3 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.6.4 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.1.2 = INTEGER: 2
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.1.3 = INTEGER: 3
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.1.4 = INTEGER: 4
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.1.5 = INTEGER: 5
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.1.6 = INTEGER: 6
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2.1 = INTEGER: 7
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2.2 = INTEGER: 8
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2.3 = INTEGER: 9
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2.4 = INTEGER: 10
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2.5 = INTEGER: 11
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2.6 = INTEGER: 12
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.3.1 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.3.2 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.3.3 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.3.4 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.3.5 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.3.6 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.4.1 = STRING: Anonymized 165
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.4.2 = STRING: Anonymized 124
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.4.3 = STRING: Anonymized 111
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.4.4 = STRING: Anonymized 012
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.4.5 = STRING: Anonymized 131
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.4.6 = STRING: Anonymized 109
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.5.1 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.5.2 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.5.3 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.5.4 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.5.5 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.5.6 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6.1 = INTEGER: 24
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6.2 = INTEGER: 24
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6.3 = INTEGER: 24
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6.4 = INTEGER: 24
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6.5 = INTEGER: 24
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6.6 = INTEGER: 24
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.7.1 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.7.2 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.7.3 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.7.4 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.7.5 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.7.6 = INTEGER: 0
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.8.1 = STRING: Anonymized 162
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.8.2 = STRING: Anonymized 190
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.8.3 = STRING: Anonymized 060
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.8.4 = STRING: Anonymized 086
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.8.5 = STRING: Anonymized 042
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.8.6 = STRING: Anonymized 023
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.9.1 = Counter64: 4000787030016
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.9.2 = Counter64: 4000787030016
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.9.3 = Counter64: 4000787030016
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.9.4 = Counter64: 4000787030016
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.9.5 = Counter64: 4000787030016
.1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.9.6 = Counter64: 4000787030016
.1.3.6.1.4.1.55062.2.10.2.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.2.1.1.2 = INTEGER: 2
.1.3.6.1.4.1.55062.2.10.2.1.1.3 = INTEGER: 3
.1.3.6.1.4.1.55062.2.10.2.1.1.4 = INTEGER: 4
.1.3.6.1.4.1.55062.2.10.2.1.1.5 = INTEGER: 5
.1.3.6.1.4.1.55062.2.10.2.1.1.6 = INTEGER: 6
.1.3.6.1.4.1.55062.2.10.2.1.2.1 = INTEGER: 7
.1.3.6.1.4.1.55062.2.10.2.1.2.2 = INTEGER: 8
.1.3.6.1.4.1.55062.2.10.2.1.2.3 = INTEGER: 9
.1.3.6.1.4.1.55062.2.10.2.1.2.4 = INTEGER: 10
.1.3.6.1.4.1.55062.2.10.2.1.2.5 = INTEGER: 11
.1.3.6.1.4.1.55062.2.10.2.1.2.6 = INTEGER: 12
.1.3.6.1.4.1.55062.2.10.2.1.3.1 = STRING: Anonymized 250
.1.3.6.1.4.1.55062.2.10.2.1.3.2 = STRING: Anonymized 142
.1.3.6.1.4.1.55062.2.10.2.1.3.3 = STRING: Anonymized 201
.1.3.6.1.4.1.55062.2.10.2.1.3.4 = STRING: Anonymized 182
.1.3.6.1.4.1.55062.2.10.2.1.3.5 = STRING: Anonymized 069
.1.3.6.1.4.1.55062.2.10.2.1.3.6 = STRING: Anonymized 197
.1.3.6.1.4.1.55062.2.10.2.1.4.1 = STRING: Anonymized 109
.1.3.6.1.4.1.55062.2.10.2.1.4.2 = STRING: Anonymized 206
.1.3.6.1.4.1.55062.2.10.2.1.4.3 = STRING: Anonymized 217
.1.3.6.1.4.1.55062.2.10.2.1.4.4 = STRING: Anonymized 174
.1.3.6.1.4.1.55062.2.10.2.1.4.5 = STRING: Anonymized 201
.1.3.6.1.4.1.55062.2.10.2.1.4.6 = STRING: Anonymized 181
.1.3.6.1.4.1.55062.2.10.2.1.5.1 = STRING: Anonymized 058
.1.3.6.1.4.1.55062.2.10.2.1.5.2 = STRING: Anonymized 133
.1.3.6.1.4.1.55062.2.10.2.1.5.3 = STRING: Anonymized 072
.1.3.6.1.4.1.55062.2.10.2.1.5.4 = STRING: Anonymized 195
.1.3.6.1.4.1.55062.2.10.2.1.5.5 = STRING: Anonymized 184
.1.3.6.1.4.1.55062.2.10.2.1.5.6 = STRING: Anonymized 221
.1.3.6.1.4.1.55062.2.10.2.1.6.1 = STRING: Anonymized 023
.1.3.6.1.4.1.55062.2.10.2.1.6.2 = STRING: Anonymized 012
.1.3.6.1.4.1.55062.2.10.2.1.6.3 = STRING: Anonymized 195
.1.3.6.1.4.1.55062.2.10.2.1.6.4 = STRING: Anonymized 065
.1.3.6.1.4.1.55062.2.10.2.1.6.5 = STRING: Anonymized 102
.1.3.6.1.4.1.55062.2.10.2.1.6.6 = STRING: Anonymized 024
.1.3.6.1.4.1.55062.2.10.2.1.7.1 = STRING: Anonymized 095
.1.3.6.1.4.1.55062.2.10.2.1.7.2 = STRING: Anonymized 113
.1.3.6.1.4.1.55062.2.10.2.1.7.3 = STRING: Anonymized 004
.1.3.6.1.4.1.55062.2.10.2.1.7.4 = STRING: Anonymized 169
.1.3.6.1.4.1.55062.2.10.2.1.7.5 = STRING: Anonymized 133
.1.3.6.1.4.1.55062.2.10.2.1.7.6 = STRING: Anonymized 161
.1.3.6.1.4.1.55062.2.10.2.1.8.1 = INTEGER: 24
.1.3.6.1.4.1.55062.2.10.2.1.8.2 = INTEGER: 24
.1.3.6.1.4.1.55062.2.10.2.1.8.3 = INTEGER: 24
.1.3.6.1.4.1.55062.2.10.2.1.8.4 = INTEGER: 24
.1.3.6.1.4.1.55062.2.10.2.1.8.5 = INTEGER: 24
.1.3.6.1.4.1.55062.2.10.2.1.8.6 = INTEGER: 24
.1.3.6.1.4.1.55062.2.10.2.1.9.1 = Counter64: 4000787030016
.1.3.6.1.4.1.55062.2.10.2.1.9.2 = Counter64: 4000787030016
.1.3.6.1.4.1.55062.2.10.2.1.9.3 = Counter64: 4000787030016
.1.3.6.1.4.1.55062.2.10.2.1.9.4 = Counter64: 4000787030016
.1.3.6.1.4.1.55062.2.10.2.1.9.5 = Counter64: 4000787030016
.1.3.6.1.4.1.55062.2.10.2.1.9.6 = Counter64: 4000787030016
.1.3.6.1.4.1.55062.2.10.5.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.5.1.2.1 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.5.1.3.1 = STRING: Anonymized 241
.1.3.6.1.4.1.55062.2.10.5.1.4.1 = STRING: Anonymized 197
.1.3.6.1.4.1.55062.2.10.5.1.5.1 = Counter64: 15502684454912
.1.3.6.1.4.1.55062.2.10.5.1.6.1 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.5.1.7.1 = STRING: "6"
.1.3.6.1.4.1.55062.2.10.7.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.7.1.2.1 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.7.1.3.1 = Counter64: 15393162788864
.1.3.6.1.4.1.55062.2.10.7.1.4.1 = Counter64: 11675469464832
.1.3.6.1.4.1.55062.2.10.7.1.5.1 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.9.1.1.2 = INTEGER: 2
.1.3.6.1.4.1.55062.2.10.9.1.1.3 = INTEGER: 3
.1.3.6.1.4.1.55062.2.10.9.1.2.1 = STRING: Anonymized 227
.1.3.6.1.4.1.55062.2.10.9.1.2.2 = STRING: Anonymized 180
.1.3.6.1.4.1.55062.2.10.9.1.2.3 = STRING: Anonymized 004
.1.3.6.1.4.1.55062.2.10.9.1.3.1 = Counter64: 15333033246720
.1.3.6.1.4.1.55062.2.10.9.1.3.2 = Counter64: 15173260463104
.1.3.6.1.4.1.55062.2.10.9.1.3.3 = Counter64: 15173260463104
.1.3.6.1.4.1.55062.2.10.9.1.4.1 = Counter64: 15333032787968
.1.3.6.1.4.1.55062.2.10.9.1.4.2 = Counter64: 11670260403200
.1.3.6.1.4.1.55062.2.10.9.1.4.3 = Counter64: 15173260246016
.1.3.6.1.4.1.55062.2.10.9.1.5.1 = STRING: Anonymized 103
.1.3.6.1.4.1.55062.2.10.9.1.5.2 = STRING: Anonymized 185
.1.3.6.1.4.1.55062.2.10.9.1.5.3 = STRING: Anonymized 145
.1.3.6.1.4.1.55062.2.10.9.1.6.1 = STRING: Anonymized 176
.1.3.6.1.4.1.55062.2.10.9.1.6.2 = STRING: Anonymized 163
.1.3.6.1.4.1.55062.2.10.9.1.6.3 = STRING: Anonymized 004
.1.3.6.1.4.1.55062.2.10.9.1.7.1 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.7.2 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.7.3 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.8.1 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.9.1.8.2 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.9.1.8.3 = INTEGER: 1
.1.3.6.1.4.1.55062.2.10.9.1.9.1 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.9.2 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.9.3 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.10.1 = STRING: Anonymized 252
.1.3.6.1.4.1.55062.2.10.9.1.10.2 = STRING: Anonymized 056
.1.3.6.1.4.1.55062.2.10.9.1.10.3 = STRING: Anonymized 182
.1.3.6.1.4.1.55062.2.10.9.1.11.1 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.11.2 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.11.3 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.12.1 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.12.2 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.12.3 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.13.1 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.13.2 = INTEGER: 0
.1.3.6.1.4.1.55062.2.10.9.1.13.3 = INTEGER: 0

View File

@ -0,0 +1,32 @@
*** Settings ***
Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource
Test Timeout 120s
*** Variables ***
${CMD} ${CENTREON_PLUGINS}
... --plugin=storage::qnap::snmp::plugin
... --mode=volumes
... --hostname=${HOSTNAME}
... --snmp-port=${SNMPPORT}
... --snmp-community=storage/qnap/snmp/qnap
*** Test Cases ***
volumes ${tc}
[Tags] storage qnap volumes
${command} Catenate
... ${CMD}
... ${extra_options}
Ctn Run Command And Check Result As Strings ${command} ${expected_result}
Examples: tc extra_options expected_result --
... 1 ${EMPTY} OK: All volumes are ok
... 2 --filter-name="Anonymized 227" --verbose OK: volume 'Anonymized 227' status: Anonymized 103 checking volume 'Anonymized 227' status: Anonymized 103
... 3 --unknown-volume-status='\\\%{status} eq "Anonymized 145"' UNKNOWN: volume 'Anonymized 004' status: Anonymized 145
... 4 --warning-volume-status='\\\%{status} eq "Anonymized 185"' WARNING: volume 'Anonymized 180' status: Anonymized 185
... 5 --critical-volume-status='\\\%{status} eq "Anonymized 103"' CRITICAL: volume 'Anonymized 227' status: Anonymized 103