From 26ad3df902f1333d6216399e2afa5e9300835c3b Mon Sep 17 00:00:00 2001 From: garnier-quentin Date: Thu, 28 Mar 2019 09:12:25 +0100 Subject: [PATCH] Fix #1450 --- .../database/oracle/mode/eventwaitsusage.pm | 92 ++++++++++--------- 1 file changed, 50 insertions(+), 42 deletions(-) diff --git a/centreon-plugins/database/oracle/mode/eventwaitsusage.pm b/centreon-plugins/database/oracle/mode/eventwaitsusage.pm index 800aad6eb..a897f1ea6 100644 --- a/centreon-plugins/database/oracle/mode/eventwaitsusage.pm +++ b/centreon-plugins/database/oracle/mode/eventwaitsusage.pm @@ -31,7 +31,7 @@ sub set_counters { $self->{maps_counters_type} = [ { name => 'event_count', type => 0 }, - { name => 'event', type => 1, cb_prefix_output => 'prefix_event_output', message_multiple => 'All event waits are OK', skipped_code => { 11 => -1 }}, + { name => 'event', type => 1, cb_prefix_output => 'prefix_event_output', message_multiple => 'All event waits are OK', skipped_code => { -11 => 1, -10 => 1 } }, ]; @@ -86,12 +86,12 @@ sub new { bless $self, $class; $self->{version} = '1.0'; - $options{options}->add_options(arguments => - { - "filter-name:s" => { name => 'filter_name' }, - "wait-time-min:s" => { name => 'wait_time_min', default => 1000 }, - "show-details" => { name => 'show_details' } - }); + $options{options}->add_options(arguments => { + "filter-name:s" => { name => 'filter_name' }, + "wait-time-min:s" => { name => 'wait_time_min', default => 1000 }, + "show-details" => { name => 'show_details' } + }); + return $self; } @@ -101,6 +101,46 @@ sub prefix_event_output { return "Event '" . $options{instance_value}->{display} . "' "; } +sub event_count_and_details { + my ($self, %options) = @_; + + my $query_count = "SELECT count(*) as NB + FROM v\$session + WHERE WAIT_TIME_MICRO>" . $self->{option_results}->{wait_time_min} . " + AND status='ACTIVE' and WAIT_CLASS <>'Idle'"; + + $self->{sql}->query(query => $query_count); + my $result = $self->{sql}->fetchrow_hashref(); + + $self->{event_count}->{count} = $result->{NB}; + + if (defined($self->{option_results}->{show_details})) { + my $query_details = "SELECT + a.username USERNAME, + a.program PROGRAM, + a.event EVENT, + round(a.WAIT_TIME_MICRO/1000000,0) SEC_WAIT, + d.sql_text SQL_TEXT + FROM + v\$session a, + v\$sqlstats d + WHERE + a.sql_id = d.sql_id + and a.status='ACTIVE' + and a.wait_class <> 'Idle' + and WAIT_TIME_MICRO>" . $self->{option_results}->{wait_time_min} . " + and a.sid not in (SELECT SID FROM V\$SESSION WHERE audsid = userenv('SESSIONID')) + ORDER BY + a.WAIT_TIME_MICRO desc"; + + $self->{sql}->query(query => $query_details ); + while (my $result = $self->{sql}->fetchrow_hashref()) { + $self->{output}->output_add(long_msg => sprintf("Username: '%s', Program: '%s' Event: '%s', Second wait: '%s's, Details: '%s'\n", + $result->{USERNAME}, $result->{PROGRAM}, $result->{EVENT}, $result->{SEC_WAIT}, $result->{SQL_TEXT})); + } + } +} + sub manage_selection { my ($self, %options) = @_; $self->{sql} = $options{sql}; @@ -141,42 +181,10 @@ sub manage_selection { }; } - my $query_count = "SELECT count(*) as NB - FROM v\$session - WHERE WAIT_TIME_MICRO>" . $self->{option_results}->{wait_time_min} . " - AND status='ACTIVE' and WAIT_CLASS <>'Idle'"; - - $self->{sql}->query(query => $query_count); - $result = $self->{sql}->fetchrow_hashref(); - - $self->{event_count}->{count} = $result->{NB}; - - if (defined($self->{option_results}->{show_details})) { - my $query_details = "SELECT - a.username USERNAME, - a.program PROGRAM, - a.event EVENT, - round(a.WAIT_TIME_MICRO/1000000,0) SEC_WAIT, - d.sql_text SQL_TEXT - FROM - v\$session a, - v\$sqlstats d - WHERE - a.sql_id = d.sql_id - and a.status='ACTIVE' - and a.wait_class <> 'Idle' - and WAIT_TIME_MICRO>" . $self->{option_results}->{wait_time_min} . " - and a.sid not in (SELECT SID FROM V\$SESSION WHERE audsid = userenv('SESSIONID')) - ORDER BY - a.WAIT_TIME_MICRO desc"; - - $self->{sql}->query(query => $query_details ); - while (my $result = $self->{sql}->fetchrow_hashref()) { - $self->{output}->output_add(long_msg => sprintf("Username: '%s', Program: '%s' Event: '%s', Second wait: '%s's, Details: '%s'\n", - $result->{USERNAME}, $result->{PROGRAM}, $result->{EVENT}, $result->{SEC_WAIT}, $result->{SQL_TEXT})); - } + if ($self->{sql}->is_version_minimum(version => '10')) { + $self->event_count_and_details(); } - + if (scalar(keys %{$self->{event}}) <= 0) { $self->{output}->add_option_msg(short_msg => "No event found."); $self->{output}->option_exit();