Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge from master #40

Merged
merged 25 commits into from
Apr 11, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
50dff05
add ibm fs900 plugin
cgagnaire Mar 9, 2018
0508ac6
Merge pull request #908 from Sims24/master
Mar 17, 2018
1da5f89
update hardware.pm
jdidierpichat Mar 23, 2018
f3fb8cc
Merge pull request #921 from jdidierpichat/master
Mar 23, 2018
7528cc2
add modes trunks and list-trunks
cgagnaire Mar 27, 2018
d1b8b6c
fix bad character f5 vs and pool
cgagnaire Mar 27, 2018
3cd1e71
Merge pull request #932 from cgagnaire/930-fix-bad-character-f5-vs
Mar 29, 2018
e0414e6
Merge pull request #926 from cgagnaire/ibm-fs900-snmp
Mar 29, 2018
839e68f
fix stormshield hanodes mode
cgagnaire Mar 30, 2018
31f8fbd
improve apc sensors mode
cgagnaire Mar 30, 2018
c7a6dda
Merge pull request #934 from cgagnaire/849-apc-sensors-display-values
Apr 3, 2018
2aa94be
Merge pull request #933 from cgagnaire/fix-stormshield-hanodes-mode
Apr 3, 2018
1dfab8e
add kaspersky plugin
cgagnaire Mar 30, 2018
8332668
Merge pull request #937 from cgagnaire/apps-kaspersky
Apr 4, 2018
fa02d77
move to antivirus subfolder
cgagnaire Apr 6, 2018
4f91249
Merge pull request #940 from cgagnaire/apps-kaspersky
Apr 9, 2018
ee37de8
Merge pull request #931 from cgagnaire/872-add-mode-f5-trunk
Apr 9, 2018
1f4b834
add netapp restapi plugin
cgagnaire Apr 3, 2018
fe72a78
Merge pull request #941 from cgagnaire/storage-netapp-api
Apr 9, 2018
949dad1
add aws friendly plugins
cgagnaire Apr 9, 2018
7068b2c
Merge pull request #942 from cgagnaire/884-cloud-aws-friendly-plugins
Apr 9, 2018
6efad71
prepare new release
cgagnaire Apr 9, 2018
a2874c7
Merge pull request #943 from cgagnaire/new-release
Apr 9, 2018
bc7ba62
fix uri uninitialized option (#944)
cgagnaire Apr 9, 2018
4ce3365
fix snapmirror modes debug output (#948)
cgagnaire Apr 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
340 changes: 340 additions & 0 deletions apps/antivirus/kaspersky/snmp/mode/deployment.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,340 @@
#
# Copyright 2018 Centreon (http://www.centreon.com/)
#
# Centreon is a full-fledged industry-strength solution that meets
# the needs in IT infrastructure and application monitoring for
# service performance.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

package apps::antivirus::kaspersky::snmp::mode::deployment;

use base qw(centreon::plugins::templates::counter);

use strict;
use warnings;

my $instance_mode;

sub custom_status_threshold {
my ($self, %options) = @_;
my $status = 'ok';
my $message;

eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };

if (defined($instance_mode->{option_results}->{critical_status}) && $instance_mode->{option_results}->{critical_status} ne '' &&
eval "$instance_mode->{option_results}->{critical_status}") {
$status = 'critical';
} elsif (defined($instance_mode->{option_results}->{warning_status}) && $instance_mode->{option_results}->{warning_status} ne '' &&
eval "$instance_mode->{option_results}->{warning_status}") {
$status = 'warning';
}
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}

return $status;
}

sub custom_status_output {
my ($self, %options) = @_;

my $msg = sprintf("Deployment status is '%s'", $self->{result_values}->{status});
return $msg;
}

sub custom_status_calc {
my ($self, %options) = @_;

$self->{result_values}->{status} = $options{new_datas}->{$self->{instance} . '_deploymentStatus'};
return 0;
}

sub custom_progress_perfdata {
my ($self, %options) = @_;

$self->{output}->perfdata_add(label => 'progress',
value => $self->{result_values}->{installed},
min => 0, max => $self->{result_values}->{total});
}

sub custom_progress_threshold {
my ($self, %options) = @_;

my ($exit, $threshold_value);
$threshold_value = defined($instance_mode->{option_results}->{percent}) ? $self->{result_values}->{prct_installed} : $self->{result_values}->{installed} ;
$exit = $self->{perfdata}->threshold_check(value => $threshold_value,
threshold => [ { label => 'critical-' . $self->{label}, exit_litteral => 'critical' },
{ label => 'warning-' . $self->{label}, exit_litteral => 'warning' } ]);
return $exit;
}

sub custom_progress_output {
my ($self, %options) = @_;

my $msg = sprintf("Deployment progress: %d/%d (%.2f%%)",
$self->{result_values}->{installed}, $self->{result_values}->{total}, $self->{result_values}->{prct_installed});
return $msg;
}

sub custom_progress_calc {
my ($self, %options) = @_;

$self->{result_values}->{total} = $options{new_datas}->{$self->{instance} . '_hostsInGroups'};
$self->{result_values}->{installed} = $options{new_datas}->{$self->{instance} . '_hostsWithAntivirus'};
$self->{result_values}->{prct_installed} = $self->{result_values}->{installed} * 100 / $self->{result_values}->{total};

return 0;
}

sub custom_expiring_perfdata {
my ($self, %options) = @_;

$self->{output}->perfdata_add(label => 'expiring',
value => $self->{result_values}->{expiring},
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}),
min => 0);
}

sub custom_expiring_threshold {
my ($self, %options) = @_;

my $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{expiring},
threshold => [ { label => 'critical-' . $self->{label}, exit_litteral => 'critical' },
{ label => 'warning-' . $self->{label}, exit_litteral => 'warning' } ]);
return $exit;
}

sub custom_expiring_output {
my ($self, %options) = @_;

my $msg = sprintf("%d host(s) with expiring licence", $self->{result_values}->{expiring});
$msg .= sprintf(" [serial: %s] [days: %d]", $self->{result_values}->{serial}, $self->{result_values}->{days}) if ($self->{result_values}->{serial} ne '');
return $msg;
}

sub custom_expiring_calc {
my ($self, %options) = @_;

$self->{result_values}->{serial} = $options{new_datas}->{$self->{instance} . '_licenceExpiringSerial'};
$self->{result_values}->{days} = $options{new_datas}->{$self->{instance} . '_licenceExpiringDays'};
$self->{result_values}->{expiring} = $options{new_datas}->{$self->{instance} . '_hostsLicenceExpiring'};

return 0;
}

sub custom_expired_perfdata {
my ($self, %options) = @_;

$self->{output}->perfdata_add(label => 'expired',
value => $self->{result_values}->{expired},
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}),
min => 0);
}

sub custom_expired_threshold {
my ($self, %options) = @_;

my $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{expired},
threshold => [ { label => 'critical-' . $self->{label}, exit_litteral => 'critical' },
{ label => 'warning-' . $self->{label}, exit_litteral => 'warning' } ]);
return $exit;
}

sub custom_expired_output {
my ($self, %options) = @_;

my $msg = sprintf("%d host(s) with expired licence", $self->{result_values}->{expired});
$msg .= sprintf(" [serial: %s]", $self->{result_values}->{serial}) if ($self->{result_values}->{serial} ne '');
return $msg;
}

sub custom_expired_calc {
my ($self, %options) = @_;

$self->{result_values}->{serial} = $options{new_datas}->{$self->{instance} . '_licenceExpiredSerial'};
$self->{result_values}->{expired} = $options{new_datas}->{$self->{instance} . '_hostsLicenceExpired'};

return 0;
}

sub set_counters {
my ($self, %options) = @_;

$self->{maps_counters_type} = [
{ name => 'global', type => 0, message_separator => ' - ' },
];

$self->{maps_counters}->{global} = [
{ label => 'status', set => {
key_values => [ { name => 'deploymentStatus' } ],
closure_custom_calc => $self->can('custom_status_calc'),
closure_custom_output => $self->can('custom_status_output'),
closure_custom_perfdata => sub { return 0; },
closure_custom_threshold_check => $self->can('custom_status_threshold'),
}
},
{ label => 'progress', set => {
key_values => [ { name => 'hostsInGroups' }, { name => 'hostsWithAntivirus' } ],
closure_custom_calc => $self->can('custom_progress_calc'),
closure_custom_output => $self->can('custom_progress_output'),
closure_custom_threshold_check => $self->can('custom_progress_threshold'),
closure_custom_perfdata => $self->can('custom_progress_perfdata'),
}
},
{ label => 'failed', set => {
key_values => [ { name => 'hostsRemoteInstallFailed' } ],
output_template => '%d failed remote installation(s)',
perfdatas => [
{ label => 'failed', value => 'hostsRemoteInstallFailed_absolute', template => '%d', min => 0 },
],
}
},
{ label => 'expiring', set => {
key_values => [ { name => 'licenceExpiringSerial' }, { name => 'licenceExpiringDays' }, { name => 'hostsLicenceExpiring' } ],
closure_custom_calc => $self->can('custom_expiring_calc'),
closure_custom_output => $self->can('custom_expiring_output'),
closure_custom_threshold_check => $self->can('custom_expiring_threshold'),
closure_custom_perfdata => $self->can('custom_expiring_perfdata'),
}
},
{ label => 'expired', set => {
key_values => [ { name => 'licenceExpiredSerial' }, { name => 'hostsLicenceExpired' } ],
closure_custom_calc => $self->can('custom_expired_calc'),
closure_custom_output => $self->can('custom_expired_output'),
closure_custom_threshold_check => $self->can('custom_expired_threshold'),
closure_custom_perfdata => $self->can('custom_expired_perfdata'),
}
},
];
}

sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class;

$self->{version} = '1.0';
$options{options}->add_options(arguments =>
{
"warning-status:s" => { name => 'warning_status', default => '%{status} =~ /Warning/i' },
"critical-status:s" => { name => 'critical_status', default => '%{status} =~ /Critical/i' },
"percent" => { name => 'percent' },
});
return $self;
}

sub change_macros {
my ($self, %options) = @_;

foreach ('warning_status', 'critical_status') {
if (defined($self->{option_results}->{$_})) {
$self->{option_results}->{$_} =~ s/%\{(.*?)\}/\$self->{result_values}->{$1}/g;
}
}
}

sub check_options {
my ($self, %options) = @_;
$self->SUPER::check_options(%options);

$instance_mode = $self;
$self->change_macros();
}

my %map_status = (
0 => 'OK',
1 => 'Info',
2 => 'Warning',
3 => 'Critical',
);

my $oid_deploymentStatus = '.1.3.6.1.4.1.23668.1093.1.1.1';
my $oid_hostsInGroups = '.1.3.6.1.4.1.23668.1093.1.1.3';
my $oid_hostsWithAntivirus = '.1.3.6.1.4.1.23668.1093.1.1.4';
my $oid_hostsRemoteInstallFailed = '.1.3.6.1.4.1.23668.1093.1.1.5';
my $oid_licenceExpiringSerial = '.1.3.6.1.4.1.23668.1093.1.1.6';
my $oid_licenceExpiredSerial = '.1.3.6.1.4.1.23668.1093.1.1.7';
my $oid_licenceExpiringDays = '.1.3.6.1.4.1.23668.1093.1.1.8';
my $oid_hostsLicenceExpiring = '.1.3.6.1.4.1.23668.1093.1.1.9';
my $oid_hostsLicenceExpired = '.1.3.6.1.4.1.23668.1093.1.1.10';

sub manage_selection {
my ($self, %options) = @_;

my $snmp_result = $options{snmp}->get_leef(oids => [ $oid_deploymentStatus, $oid_hostsInGroups,
$oid_hostsWithAntivirus, $oid_hostsRemoteInstallFailed,
$oid_licenceExpiringSerial, $oid_licenceExpiredSerial,
$oid_licenceExpiringDays, $oid_hostsLicenceExpiring,
$oid_hostsLicenceExpired ],
nothing_quit => 1);

$self->{global} = {};

$self->{global} = {
deploymentStatus => $map_status{$snmp_result->{$oid_deploymentStatus}},
hostsInGroups => $snmp_result->{$oid_hostsInGroups},
hostsWithAntivirus => $snmp_result->{$oid_hostsWithAntivirus},
hostsRemoteInstallFailed => $snmp_result->{$oid_hostsRemoteInstallFailed},
licenceExpiringSerial => $snmp_result->{$oid_licenceExpiringSerial},
licenceExpiredSerial => $snmp_result->{$oid_licenceExpiredSerial},
licenceExpiringDays => $snmp_result->{$oid_licenceExpiringDays},
hostsLicenceExpiring => $snmp_result->{$oid_hostsLicenceExpiring},
hostsLicenceExpired => $snmp_result->{$oid_hostsLicenceExpired},
};
}

1;

__END__

=head1 MODE

Check antivirus software deployment status.

=over 8

=item B<--warning-status>

Set warning threshold for status. (Default: '%{status} =~ /Warning/i').
Can use special variables like: %{status}

=item B<--critical-status>

Set critical threshold for status. (Default: '%{status} =~ /Critical/i').
Can use special variables like: %{status}

=item B<--warning-*>

Threshold warning.
Can be: 'progress' (counter or %), 'failed', 'expiring', 'expired'.

=item B<--critical-*>

Threshold critical.
Can be: 'progress' (counter or %), 'failed', 'expiring', 'expired'.

=item B<--percent>

Set this option if you want to use percent on progress thresholds.

=back

=cut
Loading