Skip to content

Commit

Permalink
fix(plugins) cifs,sftp,ftp plugin now check recursively folders when …
Browse files Browse the repository at this point in the history
…filter-file parameter is used.

REF:CTOR-258
  • Loading branch information
Evan-Adam committed May 2, 2024
1 parent 5d88c7c commit 838ff78
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 47 deletions.
22 changes: 11 additions & 11 deletions src/apps/protocols/cifs/mode/filescount.pm
Original file line number Diff line number Diff line change
Expand Up @@ -106,27 +106,27 @@ sub countFiles {
# Cannot list we skip
next;
}

# this loop is recursive, when we find a directory we add it to the list used by the for loop.
# max_depth is used to limit the depth we search.
# same behaviour as ftp and sftp protocol.
foreach my $file (@$files) {
next if ($file->[0] != SMBC_FILE && $file->[0] != SMBC_DIR);
next if ($file->[0] != SMBC_FILE && $file->[0] != SMBC_DIR);
next if ($file->[1] eq '.' || $file->[1] eq '..');

my $name = $dir . '/' . $file->[1];

if (defined($self->{option_results}->{filter_file}) && $self->{option_results}->{filter_file} ne '' &&
$name !~ /$self->{option_results}->{filter_file}/) {
$self->{output}->output_add(long_msg => sprintf("skipping '%s'", $name), debug => 1);
next;
}

if ($file->[0] == SMBC_DIR) {
if (defined($self->{option_results}->{max_depth}) && $level + 1 <= $self->{option_results}->{max_depth}) {
push @$list, { name => $name, level => $level + 1 };
}
} else {
$self->{output}->output_add(long_msg => sprintf("Match '%s'", $name));
$self->{global}->{detected}++;
} elsif (!centreon::plugins::misc::is_empty($self->{option_results}->{filter_file})
# if this is a file check the filter_file regex
&& $name !~ /$self->{option_results}->{filter_file}/) {
$self->{output}->output_add(long_msg => sprintf("skipping '%s'", $name), debug => 1);
next;
}
$self->{output}->output_add(long_msg => sprintf("Match '%s'", $name));
$self->{global}->{detected}++;
}
}
}
Expand Down
38 changes: 20 additions & 18 deletions src/apps/protocols/ftp/mode/filescount.pm
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ sub run {

my $exit_code = $self->{perfdata}->threshold_check(value => $count,
threshold => [ { label => 'critical', exit_litteral => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]);

$self->{output}->output_add(severity => $exit_code,
short_msg => sprintf("Number of files : %s", $count));
$self->{output}->perfdata_add(label => 'files',
Expand All @@ -105,7 +105,7 @@ sub countFiles {
my ($self) = @_;
my @listings;
my $count = 0;

if (!defined($self->{option_results}->{directory}) || scalar(@{$self->{option_results}->{directory}}) == 0) {
push @listings, [ { name => '.', level => 0 } ];
} else {
Expand All @@ -121,36 +121,38 @@ sub countFiles {
my $hash = pop @$list;
my $dir = $hash->{name};
my $level = $hash->{level};

if (!(@files = apps::protocols::ftp::lib::ftp::execute($self, command => $map_commands{ls}->{$self->{ssl_or_not}}->{name}, command_args => [$dir]))) {
# Cannot list we skip
next;
}

# this loop is recursive, when we find a directory we add it to the list used by the for loop.
# max_depth is used to limit the depth we search.
# same behaviour as cifs(samba) and sftp protocol.
foreach my $line (@files) {
# IIS: 05-13-15 10:59AM 1184403 test.jpg
next if ($line !~ /(\S+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(.*)/ &&
$line !~ /^\s*\S+\s*\S+\s*(\S+)\s+(.*)/);
$line !~ /^\s*\S+\s*\S+\s*(\S+)\s+(.*)/);
my ($rights, $filename) = ($1, $2);
my $bname = basename($filename);
next if ($bname eq '.' || $bname eq '..');
my $name = $dir . '/' . $bname;

if (defined($self->{option_results}->{filter_file}) && $self->{option_results}->{filter_file} ne '' &&
$name !~ /$self->{option_results}->{filter_file}/) {
$self->{output}->output_add(long_msg => sprintf("Skipping '%s'", $name));
next;
}


if ($rights =~ /^(d|<DIR>)/i) {
if (defined($self->{option_results}->{max_depth}) && $level + 1 <= $self->{option_results}->{max_depth}) {
push @$list, { name => $name, level => $level + 1};
# need 2 if or directory not matching the max_depth condition would be treated as files
if (defined($self->{option_results}->{max_depth})
&& $level + 1 <= $self->{option_results}->{max_depth}) {
push @$list, { name => $name, level => $level + 1 };
}
} else {
$self->{output}->output_add(long_msg => sprintf("Match '%s'", $name));
$count++;
next;
} elsif (!centreon::plugins::misc::is_empty($self->{option_results}->{filter_file})
&& $name !~ /$self->{option_results}->{filter_file}/) {
$self->{output}->output_add(long_msg => sprintf("Skipping '%s'", $name));
next;
}
}
$self->{output}->output_add(long_msg => sprintf("Match '%s'", $name));
$count++;
}
}
}
return $count;
Expand Down
36 changes: 18 additions & 18 deletions src/apps/protocols/sftp/mode/filescount.pm
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ sub set_counters {

$self->{maps_counters}->{global} = [
{ label => 'files-detected', nlabel => 'files.detected.count', set => {
key_values => [ { name => 'detected' } ],
output_template => 'number of files: %s',
perfdatas => [
{ template => '%s', min => 0 }
]
}
key_values => [ { name => 'detected' } ],
output_template => 'number of files: %s',
perfdatas => [
{ template => '%s', min => 0 }
]
}
}
];
}
Expand Down Expand Up @@ -93,7 +93,7 @@ sub manage_selection {
sub countFiles {
my ($self, %options) = @_;
my @listings;

foreach my $dir (@{$self->{option_results}->{directory}}) {
push @listings, [ { name => $dir, level => 0 } ];
}
Expand All @@ -111,26 +111,26 @@ sub countFiles {
# Cannot list we skip
next;
}

# this loop is recursive, when we find a directory we add it to the list used by the for loop.
# max_depth is used to limit the depth we search.
# same behaviour as cifs(samba) and ftp protocol.
foreach my $file (@{$rv->{files}}) {
next if ($file->{name} eq '.' || $file->{name} eq '..');
my $name = $dir . '/' . $file->{name};

if (defined($self->{option_results}->{filter_file}) && $self->{option_results}->{filter_file} ne '' &&
$name !~ /$self->{option_results}->{filter_file}/) {
$self->{output}->output_add(long_msg => sprintf("skipping '%s'", $name), debug => 1);
next;
}

if ($file->{type} == 2) {
if (defined($self->{option_results}->{max_depth}) && $level + 1 <= $self->{option_results}->{max_depth}) {
push @$list, { name => $name, level => $level + 1 };
}
} else {
$self->{output}->output_add(long_msg => sprintf("Match '%s'", $name));
$self->{global}->{detected}++;
next;
} elsif (!centreon::plugins::misc::is_empty($self->{option_results}->{filter_file})
&& $name !~ /$self->{option_results}->{filter_file}/) {
$self->{output}->output_add(long_msg => sprintf("skipping '%s'", $name), debug => 1);
next;
}
}
$self->{output}->output_add(long_msg => sprintf("Match '%s'", $name));
$self->{global}->{detected}++;
}
}
}
}
Expand Down

0 comments on commit 838ff78

Please sign in to comment.