This commit is contained in:
Quentin Garnier 2015-01-09 16:36:00 +01:00
parent fd0334cc90
commit 5971bc54be
2 changed files with 130 additions and 0 deletions

View File

@ -0,0 +1,129 @@
package centreon::esxd::cmdalarmdatacenter;
use strict;
use warnings;
use centreon::esxd::common;
sub new {
my $class = shift;
my $self = {};
$self->{logger} = shift;
$self->{commandName} = 'alarmdatacenter';
bless $self, $class;
return $self;
}
sub getCommandName {
my $self = shift;
return $self->{commandName};
}
sub checkArgs {
my ($self, %options) = @_;
if (defined($options{arguments}->{datacenter}) && $options{arguments}->{datacenter} eq "") {
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
short_msg => "Argument error: datacenter cannot be null");
return 1;
}
return 0;
}
sub initArgs {
my ($self, %options) = @_;
foreach (keys %{$options{arguments}}) {
$self->{$_} = $options{arguments}->{$_};
}
$self->{manager} = centreon::esxd::common::init_response();
$self->{manager}->{output}->{plugin} = $options{arguments}->{identity};
$self->{manager}->{perfdata}->threshold_validate(label => 'warning', value => $options{arguments}->{warning});
$self->{manager}->{perfdata}->threshold_validate(label => 'critical', value => $options{arguments}->{critical});
}
sub set_connector {
my ($self, %options) = @_;
$self->{obj_esxd} = $options{connector};
}
sub run {
my $self = shift;
my %filters = ();
if (defined($self->{filter_time}) && $self->{filter_time} ne '' && $self->{obj_esxd}->{module_date_parse_loaded} == 0) {
$self->{manager}->{output}->output_add(severity => 'UNKNOWN',
short_msg => "Need to install Date::Parse CPAN Module");
return ;
}
if (defined($self->{datacenter}) && !defined($self->{filter})) {
$filters{name} = qr/^\Q$self->{datacenter}\E$/;
} elsif (!defined($self->{datacenter})) {
$filters{name} = qr/.*/;
} else {
$filters{name} = qr/$self->{datacenter}/;
}
my @properties = ('name', 'triggeredAlarmState');
my $result = centreon::esxd::common::get_entities_host($self->{obj_esxd}, 'Datacenter', \%filters, \@properties);
return if (!defined($result));
$self->{manager}->{output}->output_add(severity => 'OK',
short_msg => sprintf("No current alarms on datacenter(s)"));
my $alarmMgr = centreon::esxd::common::get_view($self->{obj_esxd}, $self->{obj_esxd}->{session1}->get_service_content()->alarmManager, undef);
my $total_alarms = { red => 0, yellow => 0 };
my $dc_alarms = {};
foreach my $datacenter_view (@$result) {
$dc_alarms->{$datacenter_view->name} = { red => 0, yellow => 0, alarms => {} };
next if (!defined($datacenter_view->triggeredAlarmState));
foreach(@{$datacenter_view->triggeredAlarmState}) {
next if ($_->overallStatus->val !~ /(red|yellow)/i);
if (defined($self->{filter_time}) && $self->{filter_time} ne '') {
my $time_sec = Date::Parse::str2time($_->time);
next if (time() - $time_sec > $self->{filter_time});
}
my $entity = centreon::esxd::common::get_view($self->{obj_esxd}, $_->entity, ['name']);
my $alarm = centreon::esxd::common::get_view($self->{obj_esxd}, $_->alarm, ['info']);
$dc_alarms->{$datacenter_view->name}->{alarms}->{$_->key} = { type => $_->entity->type, name => $entity->name,
time => $_->time, name => $alarm->info->name,
description => $alarm->info->description,
status => $_->overallStatus->val};
$dc_alarms->{$datacenter_view->name}->{$_->overallStatus->val}++;
}
}
my $exit = $self->{manager}->{perfdata}->threshold_check(value => $total_alarms->{yellow},
threshold => [ { label => 'warning', exit_litteral => 'warning' } ]);
if (!$self->{manager}->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{manager}->{output}->output_add(severity => $exit,
short_msg => sprintf("%s alarm(s) found(s)", $total_alarms->{yellow}));
}
$exit = $self->{manager}->{perfdata}->threshold_check(value => $total_alarms->{red}, threshold => [ { label => 'critical', exit_litteral => 'critical' } ]);
if (!$self->{manager}->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{manager}->{output}->output_add(severity => $exit,
short_msg => sprintf("%s alarm(s) found(s)", $total_alarms->{red}));
}
foreach my $dc_name (keys %{$dc_alarms}) {
$self->{manager}->{output}->output_add(long_msg => sprintf("Checking datacenter %s", $dc_name));
$self->{manager}->{output}->output_add(long_msg => sprintf(" %s warn alarm(s) found(s) - %s critical alarm(s) found(s)",
$dc_alarms->{$dc_name}->{yellow}, $dc_alarms->{$dc_name}->{red}));
foreach my $alert (keys %{$dc_alarms->{$dc_name}->{alarms}}) {
$self->{manager}->{output}->output_add(long_msg => sprintf(" [%s] [%s] [%s] [%s] %s",
$dc_alarms->{$dc_name}->{alarms}->{$alert}->{status},
$dc_alarms->{$dc_name}->{alarms}->{$alert}->{name},
$dc_alarms->{$dc_name}->{alarms}->{$alert}->{time},
$dc_alarms->{$dc_name}->{alarms}->{$alert}->{type},
$dc_alarms->{$dc_name}->{alarms}->{$alert}->{description}
));
}
}
}
1;

View File

@ -29,6 +29,7 @@ my $VERSION = "1.6.0";
my %handlers = (TERM => {}, HUP => {}, CHLD => {});
my @load_modules = (
'centreon::esxd::cmdalarmdatacenter',
'centreon::esxd::cmdcountvmhost',
'centreon::esxd::cmdcpuhost',
'centreon::esxd::cmdcpuvm',