mirror of
https://github.com/centreon/centreon-plugins.git
synced 2025-07-30 00:55:18 +02:00
+ Add a mode for vmware connector
This commit is contained in:
parent
d350bc4535
commit
e64ae47b67
171
connectors/vmware/src/centreon/esxd/cmdvmoperationcluster.pm
Normal file
171
connectors/vmware/src/centreon/esxd/cmdvmoperationcluster.pm
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
|
||||||
|
package centreon::esxd::cmdvmoperationcluster;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use centreon::esxd::common;
|
||||||
|
use centreon::plugins::statefile;
|
||||||
|
use Digest::MD5 qw(md5_hex);
|
||||||
|
|
||||||
|
sub new {
|
||||||
|
my $class = shift;
|
||||||
|
my $self = {};
|
||||||
|
$self->{logger} = shift;
|
||||||
|
$self->{commandName} = 'vmoperationcluster';
|
||||||
|
|
||||||
|
bless $self, $class;
|
||||||
|
return $self;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub getCommandName {
|
||||||
|
my $self = shift;
|
||||||
|
return $self->{commandName};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub checkArgs {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
if (defined($options{arguments}->{cluster}) && $options{arguments}->{cluster} eq "") {
|
||||||
|
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||||
|
short_msg => "Argument error: cluster cannot be null");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
foreach my $label (('warning_svmotion', 'critical_svmotion', 'warning_vmotion', 'critical_vmotion',
|
||||||
|
'warning_clone', 'critical_clone')) {
|
||||||
|
if (($options{manager}->{perfdata}->threshold_validate(label => $label, value => $options{arguments}->{$label})) == 0) {
|
||||||
|
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||||
|
short_msg => "Argument error: wrong value for $label value '" . $options{arguments}->{$label} . "'.");
|
||||||
|
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};
|
||||||
|
foreach my $label (('warning_svmotion', 'critical_svmotion', 'warning_vmotion', 'critical_vmotion',
|
||||||
|
'warning_clone', 'critical_clone')) {
|
||||||
|
$self->{manager}->{perfdata}->threshold_validate(label => $label, value => $options{arguments}->{$label});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub set_connector {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
$self->{obj_esxd} = $options{connector};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub run {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
$self->{statefile_cache} = centreon::plugins::statefile->new(output => $self->{manager}->{output});
|
||||||
|
$self->{statefile_cache}->read(statefile_dir => $self->{obj_esxd}->{retention_dir},
|
||||||
|
statefile => "cache_vmware_connector_" . $self->{obj_esxd}->{whoaim} . "_" . $self->{commandName} . "_" . (defined($self->{cluster}) ? md5_hex($self->{cluster}) : md5_hex('.*')),
|
||||||
|
statefile_suffix => '',
|
||||||
|
no_quit => 1);
|
||||||
|
return if ($self->{statefile_cache}->error() == 1);
|
||||||
|
|
||||||
|
if (!($self->{obj_esxd}->{perfcounter_speriod} > 0)) {
|
||||||
|
$self->{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||||
|
short_msg => "Can't retrieve perf counters");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
my %filters = ();
|
||||||
|
my $multiple = 0;
|
||||||
|
if (defined($self->{cluster}) && !defined($self->{cluster})) {
|
||||||
|
$filters{name} = qr/^\Q$self->{cluster}\E$/;
|
||||||
|
} elsif (!defined($self->{cluster})) {
|
||||||
|
$filters{name} = qr/.*/;
|
||||||
|
} else {
|
||||||
|
$filters{name} = qr/$self->{cluster}/;
|
||||||
|
}
|
||||||
|
my @properties = ('name');
|
||||||
|
my $result = centreon::esxd::common::get_entities_host($self->{obj_esxd}, 'ClusterComputeResource', \%filters, \@properties);
|
||||||
|
return if (!defined($result));
|
||||||
|
|
||||||
|
if (scalar(@$result) > 1) {
|
||||||
|
$multiple = 1;
|
||||||
|
}
|
||||||
|
my $values = centreon::esxd::common::generic_performance_values_historic($self->{obj_esxd},
|
||||||
|
$result,
|
||||||
|
[{'label' => 'vmop.numVMotion.latest', 'instances' => ['']},
|
||||||
|
{'label' => 'vmop.numSVMotion.latest', 'instances' => ['']},
|
||||||
|
{'label' => 'vmop.numClone.latest', 'instances' => ['']}],
|
||||||
|
$self->{obj_esxd}->{perfcounter_speriod},
|
||||||
|
skip_undef_counter => 1, multiples => 1, multiples_result_by_entity => 1);
|
||||||
|
return if (centreon::esxd::common::performance_errors($self->{obj_esxd}, $values) == 1);
|
||||||
|
|
||||||
|
if ($multiple == 1) {
|
||||||
|
$self->{manager}->{output}->output_add(severity => 'OK',
|
||||||
|
short_msg => sprintf("All virtual machine operations are ok"));
|
||||||
|
}
|
||||||
|
|
||||||
|
my $new_datas = {};
|
||||||
|
my $old_datas = {};
|
||||||
|
my $checked = 0;
|
||||||
|
foreach my $entity_view (@$result) {
|
||||||
|
my $entity_value = $entity_view->{mo_ref}->{value};
|
||||||
|
my $name = centreon::esxd::common::substitute_name(value => $entity_view->{name});
|
||||||
|
my %values = ();
|
||||||
|
my ($short_msg, $short_msg_append, $long_msg, $long_msg_append) = ('', '', '', '');
|
||||||
|
my @exits;
|
||||||
|
|
||||||
|
foreach my $label (('Clone', 'VMotion', 'SVMotion')) {
|
||||||
|
$new_datas->{$label . '_' . $entity_value} = $values->{$entity_value}->{$self->{obj_esxd}->{perfcounter_cache}->{'vmop.num' . $label . '.latest'}->{key} . ":"}[0];
|
||||||
|
$old_datas->{$label . '_' . $entity_value} = $self->{statefile_cache}->get(name => $label . '_' . $entity_value);
|
||||||
|
|
||||||
|
next if (!defined($old_datas->{$label . '_' . $entity_value}));
|
||||||
|
$checked = 1;
|
||||||
|
|
||||||
|
if ($old_datas->{$label . '_' . $entity_value} > $new_datas->{$label . '_' . $entity_value}) {
|
||||||
|
$old_datas->{$label . '_' . $entity_value} = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $diff = $new_datas->{$label . '_' . $entity_value} - $old_datas->{$label . '_' . $entity_value};
|
||||||
|
$long_msg .= $long_msg_append . $label . ' ' . $diff;
|
||||||
|
$long_msg_append = ', ';
|
||||||
|
|
||||||
|
my $exit2 = $self->{manager}->{perfdata}->threshold_check(value => $diff, threshold => [ { label => 'critical_' . lc($label), exit_litteral => 'critical' }, { label => 'warning_' . lc($label), exit_litteral => 'warning' } ]);
|
||||||
|
push @exits, $exit2;
|
||||||
|
if ($multiple == 0 || !$self->{manager}->{output}->is_status(litteral => 1, value => $exit2, compare => 'ok')) {
|
||||||
|
$short_msg .= $short_msg_append . $label . ' ' . $diff;
|
||||||
|
$short_msg_append = ', ';
|
||||||
|
}
|
||||||
|
|
||||||
|
my $extra_label = '';
|
||||||
|
$extra_label = '_' . $name if ($multiple == 1);
|
||||||
|
$self->{manager}->{output}->perfdata_add(label => lc($label) . $extra_label,
|
||||||
|
value => $diff,
|
||||||
|
warning => $self->{manager}->{perfdata}->get_perfdata_for_output(label => 'warning_' . lc($label)),
|
||||||
|
critical => $self->{manager}->{perfdata}->get_perfdata_for_output(label => 'critical_' . lc($label)),
|
||||||
|
min => 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$self->{manager}->{output}->output_add(long_msg => "Cluster '" . $name . "' vm operations: $long_msg");
|
||||||
|
my $exit = $self->{manager}->{output}->get_most_critical(status => [ @exits ]);
|
||||||
|
if (!$self->{manager}->{output}->is_status(litteral => 1, value => $exit, compare => 'ok')) {
|
||||||
|
$self->{manager}->{output}->output_add(severity => $exit,
|
||||||
|
short_msg => "Cluster '" . $name . "' vm operations: $short_msg"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($multiple == 0) {
|
||||||
|
$self->{manager}->{output}->output_add(short_msg => "Cluster '" . $name . "' vm operations: $long_msg");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($checked == 0) {
|
||||||
|
$self->{manager}->{output}->output_add(severity => 'OK',
|
||||||
|
short_msg => sprintf("Buffer creation"));
|
||||||
|
}
|
||||||
|
$self->{statefile_cache}->write(data => $new_datas);
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
@ -504,6 +504,13 @@ sub host_state {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub substitute_name {
|
||||||
|
my (%options) = @_;
|
||||||
|
|
||||||
|
$options{value} =~ s/%2f/\//g;
|
||||||
|
return $options{value};
|
||||||
|
}
|
||||||
|
|
||||||
sub strip_cr {
|
sub strip_cr {
|
||||||
my (%options) = @_;
|
my (%options) = @_;
|
||||||
|
|
||||||
|
@ -55,7 +55,8 @@ my @load_modules = (
|
|||||||
'centreon::esxd::cmdswapvm',
|
'centreon::esxd::cmdswapvm',
|
||||||
'centreon::esxd::cmdthinprovisioningvm',
|
'centreon::esxd::cmdthinprovisioningvm',
|
||||||
'centreon::esxd::cmdtoolsvm',
|
'centreon::esxd::cmdtoolsvm',
|
||||||
'centreon::esxd::cmduptimehost'
|
'centreon::esxd::cmduptimehost',
|
||||||
|
'centreon::esxd::cmdvmoperationcluster',
|
||||||
);
|
);
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user