From 38307dfcca955234fcf8ef056d23d10a30243cb6 Mon Sep 17 00:00:00 2001 From: Quentin Garnier Date: Wed, 11 Sep 2013 13:59:05 +0000 Subject: [PATCH] Add filter regexp for 'datastoreshost' command git-svn-id: http://svn.merethis.net/centreon-esxd/trunk@73 a5eaa968-4c79-4d68-970d-af6011b5b055 --- connectors/vmware/centreon_esx_client.pl | 17 ++++++++++++----- connectors/vmware/lib/cmddatastoreshost.pm | 22 +++++++++++----------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/connectors/vmware/centreon_esx_client.pl b/connectors/vmware/centreon_esx_client.pl index 1f3fdf59f..02278188c 100644 --- a/connectors/vmware/centreon_esx_client.pl +++ b/connectors/vmware/centreon_esx_client.pl @@ -29,7 +29,7 @@ my %OPTION = ( on => undef, units => undef, free => undef, - filter => undef + filter => undef, ); Getopt::Long::Configure('bundling'); @@ -50,6 +50,7 @@ GetOptions( "units=s" => \$OPTION{units}, "light-perfdata" => \$OPTION{'light-perfdata'}, "datastore=s" => \$OPTION{datastore}, + "nic=s" => \$OPTION{nic}, "older=i" => \$OPTION{older}, @@ -144,7 +145,8 @@ sub print_usage () { print " -e (--esx-host) Esx Host to check (required)\n"; print " -w (--warning) Warning Threshold in ms (latency) (default none)\n"; print " -c (--critical) Critical Threshold in ms (latency) (default none)\n"; - print " --filter-datastores Datastores to verify (separated by coma)\n"; + print " --datastore Datastores to check (can use a regexp with --filter)\n"; + print " --filter Use regexp for --datastore option (can check multiples datastores at once)\n"; print "\n"; print "'countvmhost':\n"; print " -e (--esx-host) Esx Host to check (required)\n"; @@ -398,15 +400,20 @@ sub datastoreshost_check_arg { if (!defined($OPTION{critical})) { $OPTION{critical} = ''; } - if (!defined($OPTION{'filter-datastores'})) { - $OPTION{'filter-datastores'} = ''; + if (!defined($OPTION{datastore})) { + $OPTION{datastore} = ''; + } + if (defined($OPTION{filter})) { + $OPTION{filter} = 1; + } else { + $OPTION{filter} = 0; } return 0; } sub datastoreshost_get_str { return join($separatorin, - ('datastoreshost', $OPTION{vsphere}, $OPTION{'esx-host'}, $OPTION{warning}, $OPTION{critical} , $OPTION{'filter-datastores'})); + ('datastoreshost', $OPTION{vsphere}, $OPTION{'esx-host'}, $OPTION{warning}, $OPTION{critical} , $OPTION{datastore}, $OPTION{filter})); } sub memhost_check_arg { diff --git a/connectors/vmware/lib/cmddatastoreshost.pm b/connectors/vmware/lib/cmddatastoreshost.pm index 0191e3385..cdfe8378a 100644 --- a/connectors/vmware/lib/cmddatastoreshost.pm +++ b/connectors/vmware/lib/cmddatastoreshost.pm @@ -50,19 +50,15 @@ sub initArgs { $self->{lhost} = $_[0]; $self->{warn} = (defined($_[1]) ? $_[1] : ''); $self->{crit} = (defined($_[2]) ? $_[2] : ''); - $self->{filter_ds} = (defined($_[3]) ? $_[3] : ''); + $self->{ds} = (defined($_[3]) ? $_[3] : ''); + $self->{filter} = (defined($_[4]) && $_[4] == 1) ? 1 : 0; } sub run { my $self = shift; - my %valid_ds = (); my $filter_ok = 0; - if ($self->{filter_ds} ne '') { - foreach (split /,/, $self->{filter_ds}) { - $valid_ds{$_} = 1; - } - } + 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"); @@ -111,8 +107,12 @@ sub run { my $output_critical_append = ''; my $perfdata = ''; foreach (keys %uuid_list) { - if ($self->{filter_ds} ne '' and !defined($valid_ds{$uuid_list{$_}})) { - next; + if ($self->{ds} ne '') { + if ($self->{filter} == 0 && $uuid_list{$_} !~ /^\Q$self->{ds}\E$/) { + next; + } elsif ($self->{filter} == 1 && $uuid_list{$_} !~ /$self->{ds}/) { + next; + } } if (defined($values->{$self->{obj_esxd}->{perfcounter_cache}->{'datastore.totalReadLatency.average'}->{'key'} . ":" . $_}) and defined($values->{$self->{obj_esxd}->{perfcounter_cache}->{'datastore.totalWriteLatency.average'}->{'key'} . ":" . $_})) { @@ -142,9 +142,9 @@ sub run { } } - if ($self->{filter_ds} ne '' and $filter_ok == 0) { + if ($self->{ds} ne '' and $filter_ok == 0) { $status = centreon::esxd::common::errors_mask(0, 'UNKNOWN'); - $self->{obj_esxd}->print_response(centreon::esxd::common::get_status($status). "|Datastore names in filter are unknown.\n"); + $self->{obj_esxd}->print_response(centreon::esxd::common::get_status($status). "|Can't get a datastore with the filter '$self->{ds}'.\n"); return ; } if ($output_critical ne "") {