mirror of
https://github.com/centreon/centreon-plugins.git
synced 2025-07-29 00:24:46 +02:00
parent
03ac8daff8
commit
bfb15e4d93
@ -113,16 +113,7 @@ sub print_usage () {
|
||||
print " --vsphere vsphere name (default: none)\n";
|
||||
print " -u (--usage) What to check. The list and args (required)\n";
|
||||
print "\n";
|
||||
print "'healthhost':\n";
|
||||
print " -e (--esx-host) Esx Host to check (required)\n";
|
||||
print " --storage-status Check storage of ESX\n";
|
||||
print "\n";
|
||||
print "'maintenancehost':\n";
|
||||
print " -e (--esx-host) Esx Host to check (required)\n";
|
||||
print "\n";
|
||||
print "'statushost':\n";
|
||||
print " -e (--esx-host) Esx Host to check (required)\n";
|
||||
print "\n";
|
||||
|
||||
print "'datastore-usage':\n";
|
||||
print " --datastore Datastore name to check (required)\n";
|
||||
print " -w (--warning) Warning Threshold (default 80)\n";
|
||||
@ -248,21 +239,7 @@ sub print_usage () {
|
||||
print " --warn Warn\n";
|
||||
print " --skip-errors Status OK if vms are disconnected (when you checks multiples)\n";
|
||||
print "\n";
|
||||
print "'listhost':\n";
|
||||
print " None\n";
|
||||
print "\n";
|
||||
print "'listdatastore':\n";
|
||||
print " --xml centreon-autodiscovery xml format\n";
|
||||
print " --show-attributes centreon-autodiscovery attributes xml display\n";
|
||||
print "\n";
|
||||
print "'listnichost':\n";
|
||||
print " -e (--esx-host) Esx Host to check (required)\n";
|
||||
print " --xml centreon-autodiscovery xml format\n";
|
||||
print " --show-attributes centreon-autodiscovery attributes xml display\n";
|
||||
print "\n";
|
||||
print "'getmap':\n";
|
||||
print " -e (--esx-host) Esx Host to check\n";
|
||||
print "\n";
|
||||
|
||||
print "'stats':\n";
|
||||
print " -w (--warning) Warning Threshold in total client connections (default none)\n";
|
||||
print " -c (--critical) Critical Threshold in total client connections (default none)\n";
|
||||
|
@ -9,7 +9,6 @@ sub new {
|
||||
my $class = shift;
|
||||
my $self = {};
|
||||
$self->{logger} = shift;
|
||||
$self->{obj_esxd} = shift;
|
||||
$self->{commandName} = 'cpuhost';
|
||||
|
||||
bless $self, $class;
|
||||
@ -21,86 +20,132 @@ sub getCommandName {
|
||||
return $self->{commandName};
|
||||
}
|
||||
|
||||
sub checkArgs {
|
||||
my $self = shift;
|
||||
my ($host, $warn, $crit, $light_perfdata) = @_;
|
||||
|
||||
if (!defined($host) || $host eq "") {
|
||||
$self->{logger}->writeLogError("ARGS error: need hostname");
|
||||
sub checkArgs {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
if (defined($options{arguments}->{esx_hostname}) && $options{arguments}->{esx_hostname} eq "") {
|
||||
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Argument error: esx hostname cannot be null");
|
||||
return 1;
|
||||
}
|
||||
if (defined($warn) && $warn !~ /^-?(?:\d+\.?|\.\d)\d*\z/) {
|
||||
$self->{logger}->writeLogError("ARGS error: warn threshold must be a positive number");
|
||||
return 1;
|
||||
}
|
||||
if (defined($crit) && $crit !~ /^-?(?:\d+\.?|\.\d)\d*\z/) {
|
||||
$self->{logger}->writeLogError("ARGS error: crit threshold must be a positive number");
|
||||
if (defined($options{arguments}->{disconnect_status}) &&
|
||||
$options{manager}->{output}->is_litteral_status(status => $options{arguments}->{disconnect_status}) == 0) {
|
||||
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Argument error: wrong value for disconnect status '" . $options{arguments}->{disconnect_status} . "'");
|
||||
return 1;
|
||||
}
|
||||
if (defined($warn) && defined($crit) && $warn > $crit) {
|
||||
$self->{logger}->writeLogError("ARGS error: warn threshold must be lower than crit threshold");
|
||||
return 1;
|
||||
if (($options{manager}->{perfdata}->threshold_validate(label => 'warning', value => $options{arguments}->{warning})) == 0) {
|
||||
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Argument error: wrong value for warning value '" . $options{arguments}->{warning} . "'.");
|
||||
return 1;
|
||||
}
|
||||
if (($options{manager}->{perfdata}->threshold_validate(label => 'critical', value => $options{arguments}->{critical})) == 0) {
|
||||
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Argument error: wrong value for critical value '" . $options{arguments}->{critical} . "'.");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub initArgs {
|
||||
my $self = shift;
|
||||
$self->{lhost} = $_[0];
|
||||
$self->{warn} = (defined($_[1]) ? $_[1] : 80);
|
||||
$self->{crit} = (defined($_[2]) ? $_[2] : 90);
|
||||
$self->{light_perfdata} = (defined($_[3]) ? $_[3] : 0);
|
||||
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;
|
||||
|
||||
if (!($self->{obj_esxd}->{perfcounter_speriod} > 0)) {
|
||||
my $status = centreon::esxd::common::errors_mask(0, 'UNKNOWN');
|
||||
$self->{obj_esxd}->print_response(centreon::esxd::common::get_status($status) . "|Can't retrieve perf counters.\n");
|
||||
$self->{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Can't retrieve perf counters");
|
||||
return ;
|
||||
}
|
||||
|
||||
my %filters = ('name' => $self->{lhost});
|
||||
my %filters = ();
|
||||
my $multiple = 0;
|
||||
if (defined($self->{esx_hostname}) && !defined($self->{filter})) {
|
||||
$filters{name} = qr/^\Q$self->{esx_hostname}\E$/;
|
||||
} elsif (!defined($self->{esx_hostname})) {
|
||||
$filters{name} = qr/.*/;
|
||||
} else {
|
||||
$filters{name} = qr/$self->{esx_hostname}/;
|
||||
}
|
||||
|
||||
my @properties = ('name', 'runtime.connectionState');
|
||||
my $result = centreon::esxd::common::get_entities_host($self->{obj_esxd}, 'HostSystem', \%filters, \@properties);
|
||||
return if (!defined($result));
|
||||
|
||||
return if (centreon::esxd::common::host_state($self->{obj_esxd}, $self->{lhost},
|
||||
$$result[0]->{'runtime.connectionState'}->val) == 0);
|
||||
|
||||
if (scalar(@$result) > 1) {
|
||||
$multiple = 1;
|
||||
}
|
||||
my @instances = ('*');
|
||||
|
||||
my $values = centreon::esxd::common::generic_performance_values_historic($self->{obj_esxd},
|
||||
$result,
|
||||
[{'label' => 'cpu.usage.average', 'instances' => \@instances}],
|
||||
$self->{obj_esxd}->{perfcounter_speriod});
|
||||
$result,
|
||||
[{'label' => 'cpu.usage.average', 'instances' => \@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);
|
||||
|
||||
my $status = 0; # OK
|
||||
my $output = '';
|
||||
my $total_cpu_average = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$self->{obj_esxd}->{perfcounter_cache}->{'cpu.usage.average'}->{'key'} . ":"}[0] * 0.01));
|
||||
|
||||
if ($total_cpu_average >= $self->{warn}) {
|
||||
$status = centreon::esxd::common::errors_mask($status, 'WARNING');
|
||||
}
|
||||
if ($total_cpu_average >= $self->{crit}) {
|
||||
$status = centreon::esxd::common::errors_mask($status, 'CRITICAL');
|
||||
}
|
||||
|
||||
$output = "Total Average CPU usage '$total_cpu_average%' on last " . int($self->{obj_esxd}->{perfcounter_speriod} / 60) . "min | cpu_total=$total_cpu_average%;$self->{warn};$self->{crit};0;100";
|
||||
if ($multiple == 1) {
|
||||
$self->{manager}->{output}->output_add(severity => 'OK',
|
||||
short_msg => sprintf("All Total Average CPU usages are ok"));
|
||||
}
|
||||
foreach my $entity_view (@$result) {
|
||||
next if (centreon::esxd::common::host_state(connector => $self->{obj_esxd},
|
||||
hostname => $entity_view->{name},
|
||||
state => $entity_view->{'runtime.connectionState'}->val,
|
||||
status => $self->{disconnect_status},
|
||||
multiple => $multiple) == 0);
|
||||
my $entity_value = $entity_view->{mo_ref}->{value};
|
||||
my $total_cpu_average = centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$entity_value}->{$self->{obj_esxd}->{perfcounter_cache}->{'cpu.usage.average'}->{'key'} . ":"}[0] * 0.01));
|
||||
|
||||
my $exit = $self->{manager}->{perfdata}->threshold_check(value => $total_cpu_average,
|
||||
threshold => [ { label => 'critical', exit_litteral => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]);
|
||||
|
||||
$self->{manager}->{output}->output_add(long_msg => sprintf("'%s' Total Average CPU usage '%s%%' on last %s min",
|
||||
$entity_view->{name}, $total_cpu_average, int($self->{obj_esxd}->{perfcounter_speriod} / 60)));
|
||||
if ($multiple == 0 ||
|
||||
!$self->{manager}->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
|
||||
$self->{manager}->{output}->output_add(severity => $exit,
|
||||
short_msg => sprintf("'%s' Total Average CPU usage '%s%%' on last %s min",
|
||||
$entity_view->{name}, $total_cpu_average, int($self->{obj_esxd}->{perfcounter_speriod} / 60)));
|
||||
}
|
||||
|
||||
foreach my $id (sort { my ($cida, $cia) = split /:/, $a;
|
||||
my ($cidb, $cib) = split /:/, $b;
|
||||
$cia = -1 if (!defined($cia) || $cia eq "");
|
||||
$cib = -1 if (!defined($cib) || $cib eq "");
|
||||
$cia <=> $cib} keys %$values) {
|
||||
my ($counter_id, $instance) = split /:/, $id;
|
||||
if ($instance ne "" and $self->{light_perfdata} != 1) {
|
||||
$output .= " cpu$instance=" . centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$id}[0]) * 0.01) . "%;;0;100";
|
||||
my $extra_label = '';
|
||||
$extra_label = '_' . $entity_view->{name} if ($multiple == 1);
|
||||
$self->{manager}->{output}->perfdata_add(label => 'cpu_total' . $extra_label, unit => '%',
|
||||
value => $total_cpu_average,
|
||||
warning => $self->{manager}->{perfdata}->get_perfdata_for_output(label => 'warning'),
|
||||
critical => $self->{manager}->{perfdata}->get_perfdata_for_output(label => 'critical'),
|
||||
min => 0, max => 100);
|
||||
|
||||
foreach my $id (sort { my ($cida, $cia) = split /:/, $a;
|
||||
my ($cidb, $cib) = split /:/, $b;
|
||||
$cia = -1 if (!defined($cia) || $cia eq "");
|
||||
$cib = -1 if (!defined($cib) || $cib eq "");
|
||||
$cia <=> $cib} keys %{$values->{$entity_value}}) {
|
||||
my ($counter_id, $instance) = split /:/, $id;
|
||||
if ($instance ne "") {
|
||||
$self->{manager}->{output}->perfdata_add(label => 'cpu' . $instance . $extra_label, unit => '%',
|
||||
value => centreon::esxd::common::simplify_number(centreon::esxd::common::convert_number($values->{$entity_value}->{$id}[0]) * 0.01),
|
||||
min => 0, max => 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
$self->{obj_esxd}->print_response(centreon::esxd::common::get_status($status) . "|$output\n");
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -9,7 +9,6 @@ sub new {
|
||||
my $class = shift;
|
||||
my $self = {};
|
||||
$self->{logger} = shift;
|
||||
$self->{obj_esxd} = shift;
|
||||
$self->{commandName} = 'statushost';
|
||||
|
||||
bless $self, $class;
|
||||
@ -22,63 +21,92 @@ sub getCommandName {
|
||||
}
|
||||
|
||||
sub checkArgs {
|
||||
my $self = shift;
|
||||
my ($host) = @_;
|
||||
my ($self, %options) = @_;
|
||||
|
||||
if (!defined($host) || $host eq "") {
|
||||
$self->{logger}->writeLogError("ARGS error: need hostname");
|
||||
if (defined($options{arguments}->{esx_hostname}) && $options{arguments}->{esx_hostname} eq "") {
|
||||
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Argument error: esx hostname cannot be null");
|
||||
return 1;
|
||||
}
|
||||
if (defined($options{arguments}->{disconnect_status}) &&
|
||||
$options{manager}->{output}->is_litteral_status(status => $options{arguments}->{disconnect_status}) == 0) {
|
||||
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Argument error: wrong value for disconnect status '" . $options{arguments}->{disconnect_status} . "'");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub initArgs {
|
||||
my $self = shift;
|
||||
$self->{lhost} = $_[0];
|
||||
my ($self, %options) = @_;
|
||||
|
||||
foreach (keys %{$options{arguments}}) {
|
||||
$self->{$_} = $options{arguments}->{$_};
|
||||
}
|
||||
$self->{manager} = centreon::esxd::common::init_response();
|
||||
$self->{manager}->{output}->{plugin} = $options{arguments}->{identity};
|
||||
}
|
||||
|
||||
sub set_connector {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
$self->{obj_esxd} = $options{connector};
|
||||
}
|
||||
|
||||
sub run {
|
||||
my $self = shift;
|
||||
|
||||
my %filters = ('name' => $self->{lhost});
|
||||
my @properties = ('summary.overallStatus', 'runtime.connectionState');
|
||||
my $result = centreon::esxd::common::get_entities_host($self->{obj_esxd}, 'HostSystem', \%filters, \@properties);
|
||||
if (!defined($result)) {
|
||||
return ;
|
||||
}
|
||||
my %filters = ();
|
||||
my $multiple = 0;
|
||||
|
||||
return if (centreon::esxd::common::host_state($self->{obj_esxd}, $self->{lhost},
|
||||
$$result[0]->{'runtime.connectionState'}->val) == 0);
|
||||
|
||||
my $status = 0; # OK
|
||||
my $output = '';
|
||||
if (defined($self->{esx_hostname}) && !defined($self->{filter})) {
|
||||
$filters{name} = qr/^\Q$self->{esx_hostname}\E$/;
|
||||
} elsif (!defined($self->{esx_hostname})) {
|
||||
$filters{name} = qr/.*/;
|
||||
} else {
|
||||
$filters{name} = qr/$self->{esx_hostname}/;
|
||||
}
|
||||
my @properties = ('name', 'summary.overallStatus', 'runtime.connectionState');
|
||||
my $result = centreon::esxd::common::get_entities_host($self->{obj_esxd}, 'HostSystem', \%filters, \@properties);
|
||||
return if (!defined($result));
|
||||
|
||||
if (scalar(@$result) > 1) {
|
||||
$multiple = 1;
|
||||
}
|
||||
my %overallStatus = (
|
||||
'gray' => 'status is unknown',
|
||||
'green' => 'is OK',
|
||||
'red' => 'has a problem',
|
||||
'yellow' => 'might have a problem',
|
||||
'gray' => 'status is unknown',
|
||||
'green' => 'is OK',
|
||||
'red' => 'has a problem',
|
||||
'yellow' => 'might have a problem',
|
||||
);
|
||||
my %overallStatusReturn = (
|
||||
'gray' => 'UNKNOWN',
|
||||
'green' => 'OK',
|
||||
'red' => 'CRITICAL',
|
||||
'yellow' => 'WARNING'
|
||||
'gray' => 'UNKNOWN',
|
||||
'green' => 'OK',
|
||||
'red' => 'CRITICAL',
|
||||
'yellow' => 'WARNING'
|
||||
);
|
||||
|
||||
if ($multiple == 1) {
|
||||
$self->{manager}->{output}->output_add(severity => 'OK',
|
||||
short_msg => sprintf("All ESX are ok"));
|
||||
}
|
||||
|
||||
foreach my $entity_view (@$result) {
|
||||
next if (centreon::esxd::common::host_state(connector => $self->{obj_esxd},
|
||||
hostname => $entity_view->{name},
|
||||
state => $entity_view->{'runtime.connectionState'}->val,
|
||||
status => $self->{disconnect_status},
|
||||
multiple => $multiple) == 0);
|
||||
|
||||
my $status_esx = $entity_view->{'summary.overallStatus'}->val;
|
||||
|
||||
if (defined($status) && $overallStatus{$status_esx}) {
|
||||
$output = "The Server '" . $self->{lhost} . "' " . $overallStatus{$status_esx};
|
||||
$status = centreon::esxd::common::errors_mask($status, $overallStatusReturn{$status_esx});
|
||||
} else {
|
||||
$output = "Can't interpret data...";
|
||||
$status = centreon::esxd::common::errors_mask($status, 'UNKNOWN');
|
||||
$self->{manager}->{output}->output_add(long_msg => sprintf("'%s' %s", $entity_view->{name}, $overallStatus{$status_esx}));
|
||||
|
||||
if ($multiple == 0 ||
|
||||
!$self->{manager}->{output}->is_status(value => $overallStatusReturn{$status_esx}, compare => 'ok', litteral => 1)) {
|
||||
$self->{manager}->{output}->output_add(severity => $overallStatusReturn{$status_esx},
|
||||
short_msg => sprintf("'%s' %s", $entity_view->{name}, $overallStatus{$status_esx}));
|
||||
}
|
||||
}
|
||||
|
||||
$self->{obj_esxd}->print_response(centreon::esxd::common::get_status($status) . "|$output\n");
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -171,7 +171,8 @@ sub get_perf_metric_ids {
|
||||
}
|
||||
} else {
|
||||
$obj_esxd->{logger}->writeLogError("Metric '" . $_->{'label'} . "' unavailable.");
|
||||
$obj_esxd->print_response("-3|Error: Counter doesn't exist. VMware version can be too old.\n");
|
||||
$manager_display->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Counter doesn't exist. VMware version can be too old.");
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
@ -179,7 +180,7 @@ sub get_perf_metric_ids {
|
||||
}
|
||||
|
||||
sub generic_performance_values_historic {
|
||||
my ($obj_esxd, $views, $perfs, $interval, $skip_undef_counter, $multiples) = @_;
|
||||
my ($obj_esxd, $views, $perfs, $interval, %options) = @_;
|
||||
my $counter = 0;
|
||||
my %results;
|
||||
|
||||
@ -225,7 +226,7 @@ sub generic_performance_values_historic {
|
||||
}
|
||||
foreach my $val (@$perfdata) {
|
||||
foreach (@{$val->{value}}) {
|
||||
if (defined($skip_undef_counter) && $skip_undef_counter == 1 && !defined($_->value)) {
|
||||
if (defined($options{skip_undef_counter}) && $options{skip_undef_counter} == 1 && !defined($_->value)) {
|
||||
$results{$_->id->counterId . ":" . (defined($_->id->instance) ? $_->id->instance : "")} = undef;
|
||||
next;
|
||||
} elsif (!defined($_->value)) {
|
||||
@ -234,8 +235,13 @@ sub generic_performance_values_historic {
|
||||
return undef;
|
||||
}
|
||||
|
||||
if (defined($multiples) && $multiples == 1) {
|
||||
$results{$val->{entity}->{value} . ":" . $_->id->counterId . ":" . (defined($_->id->instance) ? $_->id->instance : "")} = $_->value;
|
||||
if (defined($options{multiples}) && $options{multiples} == 1) {
|
||||
if (defined($options{multiples_result_by_entity}) && $options{multiples_result_by_entity} == 1) {
|
||||
$results{$val->{entity}->{value}} = {} if (!defined($results{$val->{entity}->{value}}));
|
||||
$results{$val->{entity}->{value}}->{$_->id->counterId . ":" . (defined($_->id->instance) ? $_->id->instance : "")} = $_->value;
|
||||
} else {
|
||||
$results{$val->{entity}->{value} . ":" . $_->id->counterId . ":" . (defined($_->id->instance) ? $_->id->instance : "")} = $_->value;
|
||||
}
|
||||
} else {
|
||||
$results{$_->id->counterId . ":" . (defined($_->id->instance) ? $_->id->instance : "")} = $_->value;
|
||||
}
|
||||
@ -402,21 +408,20 @@ sub host_state {
|
||||
}
|
||||
|
||||
sub stats_info {
|
||||
my ($obj_esxd, $rh, $current_fileno, $args) = @_;
|
||||
my $output;
|
||||
my $status = 0;
|
||||
|
||||
$$args[0] ='' if (!defined($$args[0]));
|
||||
$$args[1] = '' if (!defined($$args[1]));
|
||||
|
||||
my $num_connection = scalar(keys(%{$obj_esxd->{sockets}}));
|
||||
$output = "'$num_connection' total client connections | connection=$num_connection;$$args[0];$$args[1];0; requests=" . $obj_esxd->{counter};
|
||||
if ($$args[1] ne '' and $num_connection >= $$args[1]) {
|
||||
$status = errors_mask($status, 'CRITICAL');
|
||||
} elsif ($$args[0] ne '' and $num_connection >= $$args[0]) {
|
||||
$status = errors_mask($status, 'WARNING');
|
||||
my (%options) = @_;
|
||||
|
||||
my $total = 0;
|
||||
foreach my $container (keys %{$options{counters}}) {
|
||||
$total += $options{counters}->{$container};
|
||||
$options{manager}->{output}->perfdata_add(label => 'c[requests_' . $container . ']',
|
||||
value => $options{counters}->{$container},
|
||||
min => 0);
|
||||
}
|
||||
#response_client1($obj_esxd, $rh, $current_fileno, get_status($status) . "|$output\n");
|
||||
$options{manager}->{output}->perfdata_add(label => 'c[requests]',
|
||||
value => $total,
|
||||
min => 0);
|
||||
$options{manager}->{output}->output_add(severity => 'OK',
|
||||
short_msg => sprintf("'%s' total requests", $total));
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -97,7 +97,7 @@ sub handle_CHLD {
|
||||
my $child_pid;
|
||||
|
||||
while (($child_pid = waitpid(-1, &WNOHANG)) > 0) {
|
||||
$self->{return_child}{$child_pid} = {status => 1, rtime => time()};
|
||||
$self->{return_child}->{$child_pid} = {status => 1, rtime => time()};
|
||||
}
|
||||
$SIG{CHLD} = \&class_handle_CHLD;
|
||||
}
|
||||
@ -120,7 +120,7 @@ sub verify_child {
|
||||
foreach (keys %{$self->{child_proc}}) {
|
||||
# Check ctime
|
||||
if (defined($self->{return_child}->{$self->{child_proc}->{$_}->{pid}})) {
|
||||
delete $self->{return_child}->{$_};
|
||||
delete $self->{return_child}->{$self->{child_proc}->{$_}->{pid}};
|
||||
delete $self->{child_proc}->{$_};
|
||||
} elsif (time() - $self->{child_proc}->{$_}->{ctime} > $self->{config_child_timeout}) {
|
||||
$self->response_router(severity => 'UNKNOWN', msg => 'Timeout process',
|
||||
|
@ -93,7 +93,7 @@ sub new {
|
||||
$self->{return_child} = {};
|
||||
$self->{stop} = 0;
|
||||
$self->{childs_vpshere_pid} = {};
|
||||
$self->{counter} = 0;
|
||||
$self->{counter_stats} = {};
|
||||
$self->{whoaim} = undef; # to know which vsphere to connect
|
||||
$self->{module_date_parse_loaded} = 0;
|
||||
$self->{modules_registry} = {};
|
||||
@ -272,6 +272,12 @@ sub request {
|
||||
centreon::esxd::common::response(token => 'RESPSERVER', endpoint => $frontend, identity => $options{identity});
|
||||
return ;
|
||||
}
|
||||
if ($result->{command} eq 'stats') {
|
||||
centreon::esxd::common::stats_info(manager => $options{manager},
|
||||
counters => $self->{counter_stats});
|
||||
centreon::esxd::common::response(token => 'RESPSERVER', endpoint => $frontend, identity => $options{identity});
|
||||
return ;
|
||||
}
|
||||
if (!defined($self->{modules_registry}->{$result->{command}})) {
|
||||
$options{manager}->{output}->output_add(severity => 'UNKNOWN',
|
||||
short_msg => "Unknown method name '$result->{command}'");
|
||||
@ -290,6 +296,7 @@ sub request {
|
||||
return ;
|
||||
}
|
||||
|
||||
$self->{counter_stats}->{$result->{container}}++;
|
||||
my $flag = ZMQ_NOBLOCK | ZMQ_SNDMORE;
|
||||
zmq_sendmsg($frontend, "server-" . $result->{container}, $flag);
|
||||
zmq_sendmsg($frontend, 'REQCLIENT ' . $options{data}, ZMQ_NOBLOCK);
|
||||
@ -384,6 +391,7 @@ sub run {
|
||||
}
|
||||
|
||||
foreach (keys %{$centreonesxd->{centreonesxd_config}->{vsphere_server}}) {
|
||||
$centreonesxd->{counter_stats}->{$_} = 0;
|
||||
$centreonesxd->create_vsphere_child(vsphere_name => $_);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user