From 8f699d27b3ee4b4ab3377ac4d5c2edab064f23ac Mon Sep 17 00:00:00 2001 From: alex2grad Date: Wed, 18 Oct 2017 02:42:21 -0400 Subject: [PATCH] filecount: Controls whether or not to include only regular files in the count (#2483) --- src/collectd.conf.in | 1 + src/collectd.conf.pod | 5 +++++ src/filecount.c | 12 ++++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/collectd.conf.in b/src/collectd.conf.in index ac0aa2d2..c982e554 100644 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@ -601,6 +601,7 @@ # Size "+10k" # Recursive true # IncludeHidden false +# RegularOnly true # #FilesSizeType "bytes" # #FilesCountType "files" # #TypeInstance "instance" diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 3739fe77..c92e3fde 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -2834,6 +2834,11 @@ Controls whether or not to include "hidden" files and directories in the count. "Hidden" files and directories are those, whose name begins with a dot. Defaults to I, i.e. by default hidden files and directories are ignored. +=item B I|I + +Controls whether or not to include only regular files in the count. +Defaults to I, i.e. by default non regular files are ignored. + =item B I Sets the type used to dispatch files combined size. Empty value ("") disables diff --git a/src/filecount.c b/src/filecount.c index 5b812b88..7842aa61 100644 --- a/src/filecount.c +++ b/src/filecount.c @@ -34,6 +34,7 @@ #define FC_RECURSIVE 1 #define FC_HIDDEN 2 +#define FC_REGULAR 4 struct fc_directory_conf_s { char *path; @@ -340,7 +341,7 @@ static int fc_config_add_dir(oconfig_item_t *ci) { return -1; } - dir->options = FC_RECURSIVE; + dir->options = FC_RECURSIVE | FC_REGULAR; dir->name = NULL; dir->plugin_name = strdup("filecount"); @@ -377,6 +378,8 @@ static int fc_config_add_dir(oconfig_item_t *ci) { status = fc_config_add_dir_option(dir, option, FC_RECURSIVE); else if (strcasecmp("IncludeHidden", option->key) == 0) status = fc_config_add_dir_option(dir, option, FC_HIDDEN); + else if (strcasecmp("RegularOnly", option->key) == 0) + status = fc_config_add_dir_option(dir, option, FC_REGULAR); else if (strcasecmp("FilesSizeType", option->key) == 0) status = cf_util_get_string(option, &dir->files_size_type); else if (strcasecmp("FilesCountType", option->key) == 0) @@ -488,7 +491,7 @@ static int fc_read_dir_callback(const char *dirname, const char *filename, abs_path, fc_read_dir_callback, dir, /* include hidden = */ (dir->options & FC_HIDDEN) ? 1 : 0); return status; - } else if (!S_ISREG(statbuf.st_mode)) { + } else if ((dir->options & FC_REGULAR) && !S_ISREG(statbuf.st_mode)) { return 0; } @@ -498,6 +501,11 @@ static int fc_read_dir_callback(const char *dirname, const char *filename, return 0; } + if (!S_ISREG(statbuf.st_mode)) { + dir->files_num++; + return 0; + } + if (dir->mtime != 0) { time_t mtime = dir->now; -- 2.11.0