This commit is contained in:
qgarnier 2020-09-07 14:48:13 +02:00 committed by GitHub
parent 7a177673ed
commit fd845dff88
11 changed files with 163 additions and 128 deletions

View File

@ -46,16 +46,19 @@ sub new {
if (!defined($options{noptions})) {
$options{options}->add_options(arguments => {
'hostname:s' => { name => 'hostname' },
'port:s' => { name => 'port' },
'proto:s' => { name => 'proto' },
'credentials' => { name => 'credentials' },
'basic' => { name => 'basic' },
'username:s' => { name => 'username' },
'password:s' => { name => 'password' },
'legacy-password:s' => { name => 'legacy_password' },
'new-api' => { name => 'new_api' },
'timeout:s' => { name => 'timeout' }
'hostname:s' => { name => 'hostname' },
'port:s' => { name => 'port' },
'proto:s' => { name => 'proto' },
'credentials' => { name => 'credentials' },
'basic' => { name => 'basic' },
'username:s' => { name => 'username' },
'password:s' => { name => 'password' },
'legacy-password:s' => { name => 'legacy_password' },
'new-api' => { name => 'new_api' },
'timeout:s' => { name => 'timeout' },
'unknown-http-status:s' => { name => 'unknown_http_status' },
'warning-http-status:s' => { name => 'warning_http_status' },
'critical-http-status:s' => { name => 'critical_http_status' }
});
}
$options{options}->add_help(package => __PACKAGE__, sections => 'CUSTOM MODE OPTIONS', once => 1);
@ -84,9 +87,12 @@ sub check_options {
$self->{username} = (defined($self->{option_results}->{username})) ? $self->{option_results}->{username} : undef;
$self->{password} = (defined($self->{option_results}->{password})) ? $self->{option_results}->{password} : undef;
$self->{legacy_password} = (defined($self->{option_results}->{legacy_password})) ? $self->{option_results}->{legacy_password} : undef;
$self->{unknown_http_status} = (defined($self->{option_results}->{unknown_http_status})) ? $self->{option_results}->{unknown_http_status} : '%{http_code} < 200 or %{http_code} >= 300' ;
$self->{warning_http_status} = (defined($self->{option_results}->{warning_http_status})) ? $self->{option_results}->{warning_http_status} : '';
$self->{critical_http_status} = (defined($self->{option_results}->{critical_http_status})) ? $self->{option_results}->{critical_http_status} : '';
if (!defined($self->{hostname}) || $self->{hostname} eq '') {
$self->{output}->add_option_msg(short_msg => "Need to specify --hostname option.");
if ($self->{hostname} eq '') {
$self->{output}->add_option_msg(short_msg => 'Need to specify --hostname option.');
$self->{output}->option_exit();
}
return 0;
@ -100,9 +106,6 @@ sub build_options_for_httplib {
$self->{option_results}->{port} = $self->{port};
$self->{option_results}->{proto} = $self->{proto};
$self->{option_results}->{timeout} = $self->{timeout};
$self->{option_results}->{warning_status} = '';
$self->{option_results}->{critical_status} = '';
$self->{option_results}->{unknown_status} = '%{http_code} < 200 or %{http_code} >= 300';
if (defined($self->{username})) {
$self->{option_results}->{username} = $self->{username};
@ -228,7 +231,12 @@ sub request {
} else {
$url = '/query/' . $options{command} . '?' . $encoded_args
}
my ($content) = $self->{http}->request(url_path => $url);
my ($content) = $self->{http}->request(
url_path => $url,
unknown_status => $self->{unknown_http_status},
warning_status => $self->{warning_http_status},
critical_status => $self->{critical_http_status}
);
if (!defined($content) || $content eq '') {
$self->{output}->add_option_msg(short_msg => "API returns empty content [code: '" . $self->{http}->get_code() . "'] [message: '" . $self->{http}->get_message() . "']");
$self->{output}->option_exit();

View File

@ -31,11 +31,11 @@ sub new {
bless $self, $class;
$options{options}->add_options(arguments => {
"command:s" => { name => 'command' },
"arg:s@" => { name => 'arg' },
"sanitize-message:s" => { name => 'sanitize_message' },
'command:s' => { name => 'command' },
'arg:s@' => { name => 'arg' },
'sanitize-message:s' => { name => 'sanitize_message' }
});
return $self;
}
@ -44,7 +44,7 @@ sub check_options {
$self->SUPER::init(%options);
if (!defined($self->{option_results}->{command}) || $self->{option_results}->{command} eq '') {
$self->{output}->add_option_msg(short_msg => "Please set --command option");
$self->{output}->add_option_msg(short_msg => 'Please set --command option');
$self->{output}->option_exit();
}
}

View File

@ -30,12 +30,12 @@ sub new {
bless $self, $class;
$self->{version} = '0.1';
%{$self->{modes}} = (
'query' => 'apps::protocols::nrpe::mode::query',
);
$self->{modes} = {
'query' => 'apps::protocols::nrpe::mode::query'
};
$self->{custom_modes}{nrpe} = 'apps::protocols::nrpe::custom::nrpe';
$self->{custom_modes}{nsclient} = 'apps::protocols::nrpe::custom::nsclient';
$self->{custom_modes}->{nrpe} = 'apps::protocols::nrpe::custom::nrpe';
$self->{custom_modes}->{nsclient} = 'apps::protocols::nrpe::custom::nsclient';
return $self;
}

View File

@ -45,12 +45,12 @@ sub new {
if (!defined($options{noptions})) {
$options{options}->add_options(arguments => {
'hostname:s' => { name => 'hostname' },
'port:s' => { name => 'port'},
'proto:s' => { name => 'proto' },
'api-username:s' => { name => 'api_username' },
'api-password:s' => { name => 'api_password' },
'timeout:s' => { name => 'timeout', default => 30 },
'hostname:s' => { name => 'hostname' },
'port:s' => { name => 'port'},
'proto:s' => { name => 'proto' },
'api-username:s' => { name => 'api_username' },
'api-password:s' => { name => 'api_password' },
'timeout:s' => { name => 'timeout', default => 30 },
'unknown-http-status:s' => { name => 'unknown_http_status' },
'warning-http-status:s' => { name => 'warning_http_status' },
'critical-http-status:s' => { name => 'critical_http_status' }
@ -77,27 +77,27 @@ sub set_defaults {}
sub check_options {
my ($self, %options) = @_;
$self->{hostname} = (defined($self->{option_results}->{hostname})) ? $self->{option_results}->{hostname} : undef;
$self->{hostname} = (defined($self->{option_results}->{hostname})) ? $self->{option_results}->{hostname} : '';
$self->{port} = (defined($self->{option_results}->{port})) ? $self->{option_results}->{port} : 443;
$self->{proto} = (defined($self->{option_results}->{proto})) ? $self->{option_results}->{proto} : 'https';
$self->{timeout} = (defined($self->{option_results}->{timeout})) ? $self->{option_results}->{timeout} : 30;
$self->{ssl_opt} = (defined($self->{option_results}->{ssl_opt})) ? $self->{option_results}->{ssl_opt} : undef;
$self->{api_username} = (defined($self->{option_results}->{api_username})) ? $self->{option_results}->{api_username} : undef;
$self->{api_password} = (defined($self->{option_results}->{api_password})) ? $self->{option_results}->{api_password} : undef;
$self->{api_username} = (defined($self->{option_results}->{api_username})) ? $self->{option_results}->{api_username} : '';
$self->{api_password} = (defined($self->{option_results}->{api_password})) ? $self->{option_results}->{api_password} : '';
$self->{unknown_http_status} = (defined($self->{option_results}->{unknown_http_status})) ? $self->{option_results}->{unknown_http_status} : '%{http_code} < 200 or %{http_code} >= 300' ;
$self->{warning_http_status} = (defined($self->{option_results}->{warning_http_status})) ? $self->{option_results}->{warning_http_status} : '';
$self->{critical_http_status} = (defined($self->{option_results}->{critical_http_status})) ? $self->{option_results}->{critical_http_status} : '';
if (!defined($self->{hostname}) || $self->{hostname} eq '') {
$self->{output}->add_option_msg(short_msg => "Need to specify --hostname option.");
if ($self->{hostname} eq '') {
$self->{output}->add_option_msg(short_msg => 'Need to specify --hostname option.');
$self->{output}->option_exit();
}
if (!defined($self->{api_username}) || $self->{api_username} eq '') {
$self->{output}->add_option_msg(short_msg => "Need to specify --api-username option.");
if ($self->{api_username} eq '') {
$self->{output}->add_option_msg(short_msg => 'Need to specify --api-username option.');
$self->{output}->option_exit();
}
if (!defined($self->{api_password}) || $self->{api_password} eq '') {
$self->{output}->add_option_msg(short_msg => "Need to specify --api-password option.");
if ($self->{api_password} eq '') {
$self->{output}->add_option_msg(short_msg => 'Need to specify --api-password option.');
$self->{output}->option_exit();
}
@ -147,14 +147,15 @@ sub authenticate {
my $content = $self->{http}->request(
method => 'POST', query_form_post => $post_data,
url_path => '/api/login',
warning_status => '', unknown_status => '', critical_status => '%{http_code} < 200 or %{http_code} >= 300'
unknown_status => $self->{unknown_http_status},
warning_status => $self->{warning_http_status},
critical_status => $self->{critical_http_status}
);
my $header = $self->{http}->get_header(name => 'Set-Cookie');
if (defined ($header) && $header =~ /(?:^| ).AspNetCore.Cookies=([^;]+);.*/) {
$cookie = $1;
} else {
$self->{output}->output_add(long_msg => $content, debug => 1);
$self->{output}->add_option_msg(short_msg => "Error retrieving cookie");
$self->{output}->option_exit();
}
@ -184,7 +185,7 @@ sub request_api {
%options,
unknown_status => $self->{unknown_http_status},
warning_status => $self->{warning_http_status},
critical_status => $self->{critical_http_status},
critical_status => $self->{critical_http_status}
);
# Some content may be strangely returned, for example :
@ -201,12 +202,10 @@ sub request_api {
$decoded = JSON::XS->new->decode($content);
};
if ($@) {
$self->{output}->output_add(long_msg => $content, debug => 1);
$self->{output}->add_option_msg(short_msg => "Cannot decode json response: $@");
$self->{output}->option_exit();
}
if (!defined($decoded)) {
$self->{output}->output_add(long_msg => $decoded, debug => 1);
$self->{output}->add_option_msg(short_msg => "Error while retrieving data (add --debug option for detailed message)");
$self->{output}->option_exit();
}

View File

@ -24,7 +24,7 @@ use base qw(centreon::plugins::templates::counter);
use strict;
use warnings;
use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold catalog_status_calc);
use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold);
sub custom_status_output {
my ($self, %options) = @_;
@ -56,14 +56,16 @@ sub set_counters {
];
$self->{maps_counters}->{extension} = [
{ label => 'status', threshold => 0, set => {
key_values => [ { name => 'extension' }, { name => 'registered' }, { name => 'dnd' }, { name => 'profile' }, { name => 'status' }, { name => 'duration' } ],
closure_custom_calc => \&catalog_status_calc,
{ label => 'status', type => 2, set => {
key_values => [
{ name => 'extension' }, { name => 'registered' }, { name => 'dnd' },
{ name => 'profile' }, { name => 'status' }, { name => 'duration' }
],
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
}
},
}
];
}
@ -78,25 +80,13 @@ sub new {
my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1);
bless $self, $class;
$self->{version} = '1.0';
$options{options}->add_options(arguments => {
'unknown-status:s' => { name => 'unknown_status', default => '' },
'warning-status:s' => { name => 'warning_status', default => '' },
'critical-status:s' => { name => 'critical_status', default => '' },
'filter-extension:s' => { name => 'filter_extension' }
});
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::check_options(%options);
$self->change_macros(macros => [
'warning_status', 'critical_status', 'unknown_status',
]);
}
sub manage_selection {
my ($self, %options) = @_;
@ -116,6 +106,12 @@ sub manage_selection {
my $extension = $options{custom}->api_extension_list();
$self->{extension} = {};
foreach my $item (@$extension) {
if (defined($self->{option_results}->{filter_extension}) && $self->{option_results}->{filter_extension} ne '' &&
$item->{_str} !~ /$self->{option_results}->{filter_extension}/) {
$self->{output}->output_add(long_msg => "skipping extension '" . $item->{_str} . "': no matching filter.", debug => 1);
next;
}
$self->{extension}->{$item->{_str}} = {
extension => $item->{_str},
registered => $item->{IsRegistered} ? 'true' : 'false',
@ -138,6 +134,10 @@ Check extentions status
=over 8
=item B<--filter-extension>
Filter extension.
=item B<--unknown-status>
Set unknown threshold for status.

View File

@ -24,14 +24,14 @@ use base qw(centreon::plugins::templates::counter);
use strict;
use warnings;
use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold catalog_status_calc);
use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold);
sub custom_status_output {
my ($self, %options) = @_;
my $msg = '';
if ($self->{result_values}->{service} !~ /^Has[A-Z]/) {
$msg .= 'error ';
$msg .= 'error';
}
$msg .= ': ' . $self->{result_values}->{error};
return $msg;
@ -48,33 +48,30 @@ sub set_counters {
$self->{maps_counters}->{global} = [
{ label => 'calls-active', nlabel => 'system.calls.active.current', set => {
key_values => [ { name => 'calls_active' } ],
output_template => 'calls active : %s',
output_template => 'calls active: %s',
perfdatas => [
{ label => 'calls_active', template => '%s', value => 'calls_active',
min => 0 },
],
{ label => 'calls_active', template => '%s', min => 0 }
]
}
},
{ label => 'extensions-registered', nlabel => 'system.extensions.registered.current', set => {
{ label => 'extensions-registered', nlabel => 'system.extensions.registered.current', set => {
key_values => [ { name => 'extensions_registered' } ],
output_template => 'extensions registered : %s',
output_template => 'extensions registered: %s',
perfdatas => [
{ label => 'extensions_registered', template => '%s', value => 'extensions_registered',
min => 0 },
],
{ label => 'extensions_registered', template => '%s', min => 0 }
]
}
},
}
];
$self->{maps_counters}->{service} = [
{ label => 'status', threshold => 0, set => {
{ label => 'status', type => 2, critical_default => '%{error} =~ /true/', set => {
key_values => [ { name => 'error' }, { name => 'service' } ],
closure_custom_calc => \&catalog_status_calc,
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
}
},
}
];
}
@ -89,25 +86,12 @@ sub new {
my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1);
bless $self, $class;
$self->{version} = '1.0';
$options{options}->add_options(arguments => {
"unknown-status:s" => { name => 'unknown_status', default => '' },
"warning-status:s" => { name => 'warning_status', default => '' },
"critical-status:s" => { name => 'critical_status', default => '%{error} =~ /true/' },
});
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::check_options(%options);
$self->change_macros(macros => [
'warning_status', 'critical_status', 'unknown_status',
]);
}
sub manage_selection {
my ($self, %options) = @_;

View File

@ -31,12 +31,12 @@ sub new {
bless $self, $class;
$self->{version} = '1.0';
%{$self->{modes}} = (
$self->{modes} = {
'extension' => 'apps::voip::3cx::restapi::mode::extension',
'system' => 'apps::voip::3cx::restapi::mode::system',
);
'system' => 'apps::voip::3cx::restapi::mode::system'
};
$self->{custom_modes}{api} = 'apps::voip::3cx::restapi::custom::api';
$self->{custom_modes}->{api} = 'apps::voip::3cx::restapi::custom::api';
return $self;
}

View File

@ -32,7 +32,7 @@ sub new {
if (!defined($options{noptions}) || $options{noptions} != 1) {
$options{options}->add_options(arguments => {
'curl-opt:s@' => { name => 'curl_opt' },
'curl-opt:s@' => { name => 'curl_opt' }
});
$options{options}->add_help(package => __PACKAGE__, sections => 'BACKEND CURL OPTIONS', once => 1);
}
@ -109,7 +109,7 @@ my $http_code_explained = {
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported',
505 => 'HTTP Version Not Supported'
};
sub cb_debug {
@ -208,7 +208,7 @@ sub set_auth {
$self->curl_setopt(option => $self->{constant_cb}->(name => 'CURLOPT_SSLKEY'), parameter => $options{request}->{key_file});
$self->curl_setopt(option => $self->{constant_cb}->(name => 'CURLOPT_KEYPASSWD'), parameter => $options{request}->{cert_pwd});
}
$self->curl_setopt(option => $self->{constant_cb}->(name => 'CURLOPT_SSLCERTTYPE'), parameter => "PEM");
if (defined($options{request}->{cert_pkcs12})) {
$self->curl_setopt(option => $self->{constant_cb}->(name => 'CURLOPT_SSLCERTTYPE'), parameter => "P12");
@ -231,17 +231,38 @@ sub set_proxy {
sub set_extra_curl_opt {
my ($self, %options) = @_;
my $fields = { key => '', value => '' };
my $entries = {};
foreach (@{$options{request}->{curl_opt}}) {
($fields->{key}, $fields->{value}) = split /=>/;
foreach my $label ('key', 'value') {
$fields->{$label} = centreon::plugins::misc::trim($fields->{$label});
if ($fields->{$label} =~ /^CURLOPT|CURL/) {
$fields->{$label} = $self->{constant_cb}->(name => $fields->{$label});
}
my ($key, $value) = split /=>/;
$key = centreon::plugins::misc::trim($key);
if (!defined($entries->{$key})) {
$entries->{$key} = { val => [], force_array => 0 };
}
$self->curl_setopt(option => $fields->{key}, parameter => $fields->{value});
$value = centreon::plugins::misc::trim($value);
if ($value =~ /^\[(.*)\]$/) {
$entries->{$key}->{force_array} = 1;
$value = centreon::plugins::misc::trim($1);
}
if ($value =~ /^CURLOPT|CURL/) {
$value = $self->{constant_cb}->(name => $value);
}
push @{$entries->{$key}->{val}}, $value;
}
foreach (keys %$entries) {
my $key = $_;
if (/^CURLOPT|CURL/) {
$key = $self->{constant_cb}->(name => $_);
}
if ($entries->{$_}->{force_array} == 1 || scalar(@{$entries->{$_}->{val}}) > 1) {
$self->curl_setopt(option => $key, parameter => $entries->{$_}->{val});
} else {
$self->curl_setopt(option => $key, parameter => pop @{$entries->{$_}->{val}});
}
}
}

View File

@ -24,18 +24,25 @@ use strict;
use warnings;
use hardware::server::dell::idrac::snmp::mode::components::resources qw(%map_status %map_pdisk_state %map_pdisk_smartstate);
my $map_pdisk_sparestate = {
1 => '', # notASpare
2 => 'SpareDedicated', # dedicatedHotSpare
3 => 'SpareGlobal' # globalHotSpare
};
my $mapping = {
physicalDiskState => { oid => '.1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4', map => \%map_pdisk_state },
physicalDiskSpareState => { oid => '.1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22', map => $map_pdisk_sparestate },
physicalDiskComponentStatus => { oid => '.1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24', map => \%map_status },
physicalDiskSmartAlertIndication => { oid => '.1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31', map => \%map_pdisk_smartstate },
physicalDiskFQDD => { oid => '.1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54' },
physicalDiskFQDD => { oid => '.1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54' }
};
my $oid_physicalDiskTableEntry = '.1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1';
sub load {
my ($self) = @_;
foreach (keys %{$mapping}) {
foreach (keys %$mapping) {
push @{$self->{request}}, { oid => $mapping->{$_}->{oid} };
}
}
@ -56,31 +63,45 @@ sub check {
$oid =~ /^$mapping->{physicalDiskComponentStatus}->{oid}\.(.*)$/;
my $instance = $1;
my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $results, instance => $instance);
next if ($self->check_filter(section => 'pdisk', instance => $instance));
$self->{components}->{pdisk}->{total}++;
$self->{output}->output_add(long_msg => sprintf("physical disk '%s' status is '%s' [instance = %s] [state = %s] [smart alert = %s]",
$result->{physicalDiskFQDD}, $result->{physicalDiskComponentStatus}, $instance,
$result->{physicalDiskState}, $result->{physicalDiskSmartAlertIndication}));
if ($result->{physicalDiskState} eq 'ready') {
$result->{physicalDiskState} .= $result->{physicalDiskSpareState};
}
$self->{output}->output_add(
long_msg => sprintf(
"physical disk '%s' status is '%s' [instance = %s] [state = %s] [smart alert = %s]",
$result->{physicalDiskFQDD}, $result->{physicalDiskComponentStatus}, $instance,
$result->{physicalDiskState}, $result->{physicalDiskSmartAlertIndication}
)
);
my $exit = $self->get_severity(section => 'pdisk.state', value => $result->{physicalDiskState});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("physical disk '%s' state is '%s'", $result->{physicalDiskFQDD}, $result->{physicalDiskState}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("physical disk '%s' state is '%s'", $result->{physicalDiskFQDD}, $result->{physicalDiskState})
);
next;
}
$exit = $self->get_severity(label => 'default.status', section => 'pdisk.status', value => $result->{physicalDiskComponentStatus});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("physical disk '%s' status is '%s'", $result->{physicalDiskFQDD}, $result->{physicalDiskComponentStatus}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("physical disk '%s' status is '%s'", $result->{physicalDiskFQDD}, $result->{physicalDiskComponentStatus})
);
}
$exit = $self->get_severity(section => 'pdisk.smartalert', value => $result->{physicalDiskSmartAlertIndication});
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("physical disk '%s' smart alert predictive failure is '%s'", $result->{physicalDiskFQDD}, $result->{physicalDiskSmartAlertIndication}));
$self->{output}->output_add(
severity => $exit,
short_msg => sprintf("physical disk '%s' smart alert predictive failure is '%s'", $result->{physicalDiskFQDD}, $result->{physicalDiskSmartAlertIndication})
);
}
}
}

View File

@ -61,7 +61,9 @@ sub set_system {
],
'pdisk.state' => [
['unknown', 'UNKNOWN'],
['ready', 'OK'],
['readySpareDedicated', 'OK'],
['readySpareGlobal', 'OK'],
['ready', 'WARNING'],
['online', 'OK'],
['foreign', 'OK'],
['offline', 'WARNING'],

View File

@ -30,10 +30,10 @@ sub new {
bless $self, $class;
$self->{version} = '1.0';
%{$self->{modes}} = (
'global-status' => 'hardware::server::dell::idrac::snmp::mode::globalstatus',
'hardware' => 'hardware::server::dell::idrac::snmp::mode::hardware',
);
$self->{modes} = {
'global-status' => 'hardware::server::dell::idrac::snmp::mode::globalstatus',
'hardware' => 'hardware::server::dell::idrac::snmp::mode::hardware'
};
return $self;
}