(plugin) apps::centreon::sql::mode::multiservices - allow host arrays in config file (#4251)

This commit is contained in:
itoussies 2023-03-03 10:50:00 +01:00 committed by David Boucher
parent c3949a205a
commit bdb0c55c06
1 changed files with 46 additions and 19 deletions

View File

@ -367,6 +367,36 @@ my %map_service_state = (
3 => 'unknown',
);
sub manage_query {
my ($self, %options) = @_;
my $query = "SELECT hosts.name, services.description, hosts.state as hstate, services.state as sstate, services.output as soutput
FROM centreon_storage.hosts, centreon_storage.services WHERE hosts.host_id=services.host_id
AND hosts.name NOT LIKE 'Module%' AND hosts.enabled=1 AND services.enabled=1
AND hosts.name = '" . $options{host} . "'
AND services.description = '" . $options{service} . "'";
$self->{sql}->query(query => $query);
while ((my $row = $self->{sql}->fetchrow_hashref())) {
if (!exists($self->{instance_mode}->{inventory}->{hosts}->{$options{group}}->{$row->{name}})) {
push @{$self->{instance_mode}->{inventory}->{groups}->{$options{group}}->{'list_'.$map_host_state{$row->{hstate}}}} ,$row->{name};
if (!defined($self->{hosts}->{$options{host}})) {
$self->{hosts}->{$options{host}} = 1;
$self->{totalhost}->{$map_host_state{$row->{hstate}}}++;
$self->{logicalgroups}->{$options{group}}->{$map_host_state{$row->{hstate}}}++;
}
}
push @{$self->{instance_mode}->{inventory}->{groups}->{$options{group}}->{'list_'.$map_service_state{$row->{sstate}}}}, $row->{name} . ${config_data}->{formatting}->{host_service_separator} . $row->{description};
$self->{instance_mode}->{inventory}->{hosts}->{$options{group}}->{$row->{name}} = $row->{hstate};
$self->{instance_mode}->{inventory}->{services}{ $row->{name} . ${config_data}->{formatting}->{host_service_separator} . $row->{description} } = { state => $row->{sstate}, output => $row->{soutput} } ;
$self->{instance_mode}->{inventory}->{groups}->{$options{group}}->{$row->{name} . ${config_data}->{formatting}->{host_service_separator} . $row->{description}} = { state => $row->{sstate}, output => $row->{soutput} };
$self->{totalservice}->{$map_service_state{$row->{sstate}}}++;
$self->{logicalgroups}->{$options{group}}->{$map_service_state{$row->{sstate}}}++;
}
}
sub manage_selection {
my ($self, %options) = @_;
# $options{sql} = sqlmode object
@ -374,6 +404,7 @@ sub manage_selection {
$self->{sql}->connect();
$self->{groups} = {};
$self->{hosts} = {};
if ($config_data->{counters}->{totalhosts} eq 'true') {
push @{$self->{maps_counters_type}}, {
@ -435,26 +466,22 @@ sub manage_selection {
up => 0, down => 0, unreachable => 0,
ok => 0, warning => 0, critical => 0, unknown => 0
};
foreach my $tuple (keys %{$config_data->{selection}->{$group}}) {
my $query = "SELECT hosts.name, services.description, hosts.state as hstate, services.state as sstate, services.output as soutput
FROM centreon_storage.hosts, centreon_storage.services WHERE hosts.host_id=services.host_id
AND hosts.name NOT LIKE 'Module%' AND hosts.enabled=1 AND services.enabled=1
AND hosts.name = '" . $tuple . "'
AND services.description = '" . $config_data->{selection}->{$group}->{$tuple} . "'";
$self->{sql}->query(query => $query);
while ((my $row = $self->{sql}->fetchrow_hashref())) {
if (!exists($self->{instance_mode}->{inventory}->{hosts}->{$group}->{$row->{name}})) {
push @{$self->{instance_mode}->{inventory}->{groups}->{$group}->{'list_'.$map_host_state{$row->{hstate}}}} ,$row->{name};
$self->{totalhost}->{$map_host_state{$row->{hstate}}}++;
$self->{logicalgroups}->{$group}->{$map_host_state{$row->{hstate}}}++;
foreach my $host (keys %{$config_data->{selection}->{$group}}) {
if (ref($config_data->{selection}->{$group}->{$host}) eq "ARRAY") {
foreach my $service (@{$config_data->{selection}->{$group}->{$host}}) {
$self->manage_query(
group => $group,
host => $host,
service => $service
);
}
push @{$self->{instance_mode}->{inventory}->{groups}->{$group}->{'list_'.$map_service_state{$row->{sstate}}}}, $row->{name} . ${config_data}->{formatting}->{host_service_separator} . $row->{description};
$self->{instance_mode}->{inventory}->{hosts}->{$group}->{$row->{name}} = $row->{hstate};
$self->{instance_mode}->{inventory}->{services}{ $row->{name} . ${config_data}->{formatting}->{host_service_separator} . $row->{description} } = { state => $row->{sstate}, output => $row->{soutput} } ;
$self->{instance_mode}->{inventory}->{groups}->{$group}->{$row->{name} . ${config_data}->{formatting}->{host_service_separator} . $row->{description}} = { state => $row->{sstate}, output => $row->{soutput} };
$self->{totalservice}->{$map_service_state{$row->{sstate}}}++;
$self->{logicalgroups}->{$group}->{$map_service_state{$row->{sstate}}}++;
} else {
$self->manage_query(
group => $group,
host => $host,
service => $config_data->{selection}->{$group}->{$host}
);
}
}
}