add database option

This commit is contained in:
garnier-quentin 2019-09-09 14:36:45 +02:00
parent 725e31e18a
commit 0fa4c26613
2 changed files with 43 additions and 31 deletions

View File

@ -129,9 +129,13 @@ sub custom_metric_threshold {
my $label_warn = ($self->{result_values}->{type} eq 'unique') ? 'warning-metric' : 'warning-global-'.$self->{result_values}->{instance}; my $label_warn = ($self->{result_values}->{type} eq 'unique') ? 'warning-metric' : 'warning-global-'.$self->{result_values}->{instance};
my $label_crit = ($self->{result_values}->{type} eq 'unique') ? 'critical-metric' : 'critical-global-'.$self->{result_values}->{instance}; my $label_crit = ($self->{result_values}->{type} eq 'unique') ? 'critical-metric' : 'critical-global-'.$self->{result_values}->{instance};
my $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{perfdata_value}, my $exit = $self->{perfdata}->threshold_check(
threshold => [ { label => $label_crit, exit_litteral => 'critical' }, value => $self->{result_values}->{perfdata_value},
{ label => $label_warn, exit_litteral => 'warning' } ]); threshold => [
{ label => $label_crit, exit_litteral => 'critical' },
{ label => $label_warn, exit_litteral => 'warning' }
]
);
return $exit; return $exit;
} }
@ -169,11 +173,12 @@ sub new {
my $self = $class->SUPER::new(package => __PACKAGE__, %options); my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class; bless $self, $class;
$options{options}->add_options(arguments => $options{options}->add_options(arguments => {
{ 'config-file:s' => { name => 'config_file' },
"config-file:s" => { name => 'config_file' }, 'json-data:s' => { name => 'json_data' },
"json-data:s" => { name => 'json_data' }, 'database:s' => { name => 'database' },
}); });
return $self; return $self;
} }
@ -205,6 +210,10 @@ sub check_options {
$config_data->{formatting}->{custom_message_metric} = "All metrics are OK" if (!exists($config_data->{formatting}->{custom_message_metric})); $config_data->{formatting}->{custom_message_metric} = "All metrics are OK" if (!exists($config_data->{formatting}->{custom_message_metric}));
$config_data->{formatting}->{cannonical_separator} = "#" if (!exists($config_data->{formatting}->{cannonical_separator})); $config_data->{formatting}->{cannonical_separator} = "#" if (!exists($config_data->{formatting}->{cannonical_separator}));
$config_data->{formatting}->{change_bytes} = 0 if (!exists($config_data->{formatting}->{change_bytes})); $config_data->{formatting}->{change_bytes} = 0 if (!exists($config_data->{formatting}->{change_bytes}));
$self->{option_results}->{database} =
(defined($self->{option_results}->{database}) && $self->{option_results}->{database} ne '') ?
$self->{option_results}->{database} . '.' : 'centreon_storage.';
} }
sub parse_json_config { sub parse_json_config {
@ -234,7 +243,6 @@ sub parse_json_config {
sub manage_selection { sub manage_selection {
my ($self, %options) = @_; my ($self, %options) = @_;
# $options{sql} = sqlmode object
$self->{sql} = $options{sql}; $self->{sql} = $options{sql};
$self->{sql}->connect(); $self->{sql}->connect();
$self->{metrics} = {}; $self->{metrics} = {};
@ -253,7 +261,7 @@ sub manage_selection {
}; };
foreach my $id (keys %{$config_data->{selection}}) { foreach my $id (keys %{$config_data->{selection}}) {
my $query = "SELECT index_data.host_name, index_data.service_description, metrics.metric_name, metrics.current_value, metrics.unit_name, metrics.min, metrics.max "; my $query = "SELECT index_data.host_name, index_data.service_description, metrics.metric_name, metrics.current_value, metrics.unit_name, metrics.min, metrics.max ";
$query .= "FROM centreon_storage.index_data, centreon_storage.metrics WHERE index_data.id = metrics.index_id "; $query .= "FROM $self->{option_results}->{database}.index_data, $self->{option_results}->{database}.metrics WHERE index_data.id = metrics.index_id ";
$query .= "AND index_data.service_description = '" . $config_data->{selection}->{$id}->{service_name} . "'"; $query .= "AND index_data.service_description = '" . $config_data->{selection}->{$id}->{service_name} . "'";
$query .= "AND index_data.host_name = '" . $config_data->{selection}->{$id}->{host_name} . "'" ; $query .= "AND index_data.host_name = '" . $config_data->{selection}->{$id}->{host_name} . "'" ;
$query .= "AND metrics.metric_name = '" . $config_data->{selection}->{$id}->{metric_name} . "'"; $query .= "AND metrics.metric_name = '" . $config_data->{selection}->{$id}->{metric_name} . "'";
@ -274,7 +282,7 @@ sub manage_selection {
name => 'metric', type => 1, message_separator => $config_data->{formatting}->{message_separator}, message_multiple => $config_data->{formatting}->{custom_message_metric}, name => 'metric', type => 1, message_separator => $config_data->{formatting}->{message_separator}, message_multiple => $config_data->{formatting}->{custom_message_metric},
}; };
my $query = "SELECT index_data.host_name, index_data.service_description, metrics.metric_name, metrics.current_value, metrics.unit_name, metrics.min, metrics.max "; my $query = "SELECT index_data.host_name, index_data.service_description, metrics.metric_name, metrics.current_value, metrics.unit_name, metrics.min, metrics.max ";
$query .= "FROM centreon_storage.index_data, centreon_storage.metrics WHERE index_data.id = metrics.index_id "; $query .= "FROM $self->{option_results}->{database}.index_data, $self->{option_results}->{database}.metrics WHERE index_data.id = metrics.index_id ";
$query .= "AND index_data.service_description LIKE '" . $config_data->{filters}->{service} . "'" if (defined($config_data->{filters}->{service}) && ($config_data->{filters}->{service} ne '')); $query .= "AND index_data.service_description LIKE '" . $config_data->{filters}->{service} . "'" if (defined($config_data->{filters}->{service}) && ($config_data->{filters}->{service} ne ''));
$query .= "AND index_data.host_name LIKE '" . $config_data->{filters}->{host} . "'" if (defined($config_data->{filters}->{host}) && ($config_data->{filters}->{host} ne '')); $query .= "AND index_data.host_name LIKE '" . $config_data->{filters}->{host} . "'" if (defined($config_data->{filters}->{host}) && ($config_data->{filters}->{host} ne ''));
$query .= "AND metrics.metric_name LIKE '" . $config_data->{filters}->{metric} . "'" if (defined($config_data->{filters}->{metric}) && ($config_data->{filters}->{metric} ne '')); $query .= "AND metrics.metric_name LIKE '" . $config_data->{filters}->{metric} . "'" if (defined($config_data->{filters}->{metric}) && ($config_data->{filters}->{metric} ne ''));
@ -325,24 +333,28 @@ sub manage_selection {
value => (defined($self->{option_results}->{'critical-global'})) ? $self->{option_results}->{'critical-global'} : $config_data->{virtualcurve}->{$vcurve}->{critical}); value => (defined($self->{option_results}->{'critical-global'})) ? $self->{option_results}->{'critical-global'} : $config_data->{virtualcurve}->{$vcurve}->{critical});
} }
$self->{global}->{$vcurve} = {display => $vcurve, $self->{global}->{$vcurve} = {
type => 'global', display => $vcurve,
unit => $self->{vmetrics}->{$vcurve}->{unit}, type => 'global',
value => $self->{vmetrics}->{$vcurve}->{aggregated_value}, unit => $self->{vmetrics}->{$vcurve}->{unit},
min => $self->{vmetrics}->{$vcurve}->{min}, value => $self->{vmetrics}->{$vcurve}->{aggregated_value},
max => $self->{vmetrics}->{$vcurve}->{max} }; min => $self->{vmetrics}->{$vcurve}->{min},
} max => $self->{vmetrics}->{$vcurve}->{max}
};
}
$self->{metric}->{$metric} = {display => $self->{metrics}->{$metric}->{display_name}, $self->{metric}->{$metric} = {
type => 'unique', display => $self->{metrics}->{$metric}->{display_name},
unit => $self->{metrics}->{$metric}->{unit}, type => 'unique',
value => $self->{metrics}->{$metric}->{current}, unit => $self->{metrics}->{$metric}->{unit},
min => $self->{metrics}->{$metric}->{min}, value => $self->{metrics}->{$metric}->{current},
max => $self->{metrics}->{$metric}->{max} } if ($self->{metrics}->{$metric}->{display} == 1); min => $self->{metrics}->{$metric}->{min},
max => $self->{metrics}->{$metric}->{max}
} if ($self->{metrics}->{$metric}->{display} == 1);
} }
if (scalar(keys %{$self->{metric}}) <= 0 && scalar(keys %{$self->{vmetrics}}) <= 0) { if (scalar(keys %{$self->{metric}}) <= 0 && scalar(keys %{$self->{vmetrics}}) <= 0) {
$self->{output}->add_option_msg(short_msg => "No metrics returned - are your selection/filters correct ?"); $self->{output}->add_option_msg(short_msg => 'No metrics returned - are your selection/filters correct ?');
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
} }

View File

@ -60,12 +60,12 @@ sub init {
my ($self, %options) = @_; my ($self, %options) = @_;
$self->{options}->add_options( $self->{options}->add_options(
arguments => { arguments => {
'host:s@' => { name => 'db_host' }, 'host:s@' => { name => 'db_host' },
'port:s@' => { name => 'db_port' }, 'port:s@' => { name => 'db_port' },
'socket:s@' => { name => 'db_socket' }, 'socket:s@' => { name => 'db_socket' },
} }
); );
$self->{options}->parse_options(); $self->{options}->parse_options();
my $options_result = $self->{options}->get_options(); my $options_result = $self->{options}->get_options();
$self->{options}->clean(); $self->{options}->clean();