summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>2017-12-23 14:32:52 +0200
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>2017-12-23 14:32:52 +0200
commit39de0064d10522690585165c7199cab201d15dfc (patch)
treeb50a9291aef67b3ea8e80229e7832ce7b4b2da92 /src
parent93fa1cc26e6e28eaae45c742db7192770e7fe098 (diff)
the dimensions list of API calls now supports netdata simple patterns
Diffstat (limited to 'src')
-rw-r--r--src/backends.c2
-rw-r--r--src/freebsd_devstat.c1
-rw-r--r--src/freebsd_getifaddrs.c4
-rw-r--r--src/freebsd_getmntinfo.c10
-rw-r--r--src/health_config.c6
-rw-r--r--src/main.c14
-rw-r--r--src/plugin_proc_diskspace.c10
-rw-r--r--src/proc_diskstats.c5
-rw-r--r--src/proc_net_dev.c2
-rw-r--r--src/rrd2json.c56
-rw-r--r--src/rrdpush.c4
-rw-r--r--src/simple_pattern.c20
-rw-r--r--src/simple_pattern.h2
-rw-r--r--src/statsd.c6
-rw-r--r--src/sys_fs_cgroup.c8
15 files changed, 79 insertions, 71 deletions
diff --git a/src/backends.c b/src/backends.c
index df9a1ccbc0..bcf35ee751 100644
--- a/src/backends.c
+++ b/src/backends.c
@@ -529,7 +529,7 @@ void *backends_main(void *ptr) {
long timeoutms = config_get_number(CONFIG_SECTION_BACKEND, "timeout ms", backend_update_every * 2 * 1000);
backend_send_names = config_get_boolean(CONFIG_SECTION_BACKEND, "send names instead of ids", backend_send_names);
- charts_pattern = simple_pattern_create(config_get(CONFIG_SECTION_BACKEND, "send charts matching", "*"), SIMPLE_PATTERN_EXACT);
+ charts_pattern = simple_pattern_create(config_get(CONFIG_SECTION_BACKEND, "send charts matching", "*"), NULL, SIMPLE_PATTERN_EXACT);
// ------------------------------------------------------------------------
diff --git a/src/freebsd_devstat.c b/src/freebsd_devstat.c
index 2ed64ad49b..ed7466eade 100644
--- a/src/freebsd_devstat.c
+++ b/src/freebsd_devstat.c
@@ -221,6 +221,7 @@ int do_kern_devstat(int update_every, usec_t dt) {
excluded_disks = simple_pattern_create(
config_get(CONFIG_SECTION_KERN_DEVSTAT, "disable by default disks matching", DELAULT_EXLUDED_DISKS)
+ , NULL
, SIMPLE_PATTERN_EXACT
);
}
diff --git a/src/freebsd_getifaddrs.c b/src/freebsd_getifaddrs.c
index 94c0a6a4b4..73f8f18247 100644
--- a/src/freebsd_getifaddrs.c
+++ b/src/freebsd_getifaddrs.c
@@ -170,8 +170,8 @@ int do_getifaddrs(int update_every, usec_t dt) {
CONFIG_BOOLEAN_AUTO);
excluded_interfaces = simple_pattern_create(
- config_get(CONFIG_SECTION_GETIFADDRS, "disable by default interfaces matching",
- DELAULT_EXLUDED_INTERFACES)
+ config_get(CONFIG_SECTION_GETIFADDRS, "disable by default interfaces matching", DELAULT_EXLUDED_INTERFACES)
+ , NULL
, SIMPLE_PATTERN_EXACT
);
}
diff --git a/src/freebsd_getmntinfo.c b/src/freebsd_getmntinfo.c
index 66be533154..0ff072f750 100644
--- a/src/freebsd_getmntinfo.c
+++ b/src/freebsd_getmntinfo.c
@@ -142,14 +142,16 @@ int do_getmntinfo(int update_every, usec_t dt) {
excluded_mountpoints = simple_pattern_create(
config_get(CONFIG_SECTION_GETMNTINFO, "exclude space metrics on paths",
- DELAULT_EXLUDED_PATHS),
- SIMPLE_PATTERN_EXACT
+ DELAULT_EXLUDED_PATHS)
+ , NULL
+ , SIMPLE_PATTERN_EXACT
);
excluded_filesystems = simple_pattern_create(
config_get(CONFIG_SECTION_GETMNTINFO, "exclude space metrics on filesystems",
- DEFAULT_EXCLUDED_FILESYSTEMS),
- SIMPLE_PATTERN_EXACT
+ DEFAULT_EXCLUDED_FILESYSTEMS)
+ , NULL
+ , SIMPLE_PATTERN_EXACT
);
}
diff --git a/src/health_config.c b/src/health_config.c
index 108eecc4a8..1fe3079630 100644
--- a/src/health_config.c
+++ b/src/health_config.c
@@ -556,7 +556,7 @@ int health_readfile(RRDHOST *host, const char *path, const char *filename) {
}
else if(hash == hash_os && !strcasecmp(key, HEALTH_OS_KEY)) {
char *os_match = value;
- SIMPLE_PATTERN *os_pattern = simple_pattern_create(os_match, SIMPLE_PATTERN_EXACT);
+ SIMPLE_PATTERN *os_pattern = simple_pattern_create(os_match, NULL, SIMPLE_PATTERN_EXACT);
if(!simple_pattern_matches(os_pattern, host->os)) {
if(rc)
@@ -572,7 +572,7 @@ int health_readfile(RRDHOST *host, const char *path, const char *filename) {
}
else if(hash == hash_host && !strcasecmp(key, HEALTH_HOST_KEY)) {
char *host_match = value;
- SIMPLE_PATTERN *host_pattern = simple_pattern_create(host_match, SIMPLE_PATTERN_EXACT);
+ SIMPLE_PATTERN *host_pattern = simple_pattern_create(host_match, NULL, SIMPLE_PATTERN_EXACT);
if(!simple_pattern_matches(host_pattern, host->hostname)) {
if(rc)
@@ -721,7 +721,7 @@ int health_readfile(RRDHOST *host, const char *path, const char *filename) {
simple_pattern_free(rt->family_pattern);
rt->family_match = strdupz(value);
- rt->family_pattern = simple_pattern_create(rt->family_match, SIMPLE_PATTERN_EXACT);
+ rt->family_pattern = simple_pattern_create(rt->family_match, NULL, SIMPLE_PATTERN_EXACT);
}
else if(hash == hash_lookup && !strcasecmp(key, HEALTH_LOOKUP_KEY)) {
health_parse_db_lookup(line, path, filename, value, &rt->group, &rt->after, &rt->before,
diff --git a/src/main.c b/src/main.c
index b14ebc0c11..0422b2047e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -94,12 +94,12 @@ void web_server_config_options(void) {
web_x_frame_options = config_get(CONFIG_SECTION_WEB, "x-frame-options response header", "");
if(!*web_x_frame_options) web_x_frame_options = NULL;
- web_allow_connections_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow connections from", "localhost *"), SIMPLE_PATTERN_EXACT);
- web_allow_dashboard_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow dashboard from", "localhost *"), SIMPLE_PATTERN_EXACT);
- web_allow_badges_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow badges from", "*"), SIMPLE_PATTERN_EXACT);
- web_allow_registry_from = simple_pattern_create(config_get(CONFIG_SECTION_REGISTRY, "allow from", "*"), SIMPLE_PATTERN_EXACT);
- web_allow_streaming_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow streaming from", "*"), SIMPLE_PATTERN_EXACT);
- web_allow_netdataconf_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow netdata.conf from", "localhost fd* 10.* 192.168.* 172.16.* 172.17.* 172.18.* 172.19.* 172.20.* 172.21.* 172.22.* 172.23.* 172.24.* 172.25.* 172.26.* 172.27.* 172.28.* 172.29.* 172.30.* 172.31.*"), SIMPLE_PATTERN_EXACT);
+ web_allow_connections_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow connections from", "localhost *"), NULL, SIMPLE_PATTERN_EXACT);
+ web_allow_dashboard_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow dashboard from", "localhost *"), NULL, SIMPLE_PATTERN_EXACT);
+ web_allow_badges_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow badges from", "*"), NULL, SIMPLE_PATTERN_EXACT);
+ web_allow_registry_from = simple_pattern_create(config_get(CONFIG_SECTION_REGISTRY, "allow from", "*"), NULL, SIMPLE_PATTERN_EXACT);
+ web_allow_streaming_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow streaming from", "*"), NULL, SIMPLE_PATTERN_EXACT);
+ web_allow_netdataconf_from = simple_pattern_create(config_get(CONFIG_SECTION_WEB, "allow netdata.conf from", "localhost fd* 10.* 192.168.* 172.16.* 172.17.* 172.18.* 172.19.* 172.20.* 172.21.* 172.22.* 172.23.* 172.24.* 172.25.* 172.26.* 172.27.* 172.28.* 172.29.* 172.30.* 172.31.*"), NULL, SIMPLE_PATTERN_EXACT);
#ifdef NETDATA_WITH_ZLIB
web_enable_gzip = config_get_boolean(CONFIG_SECTION_WEB, "enable gzip compression", web_enable_gzip);
@@ -774,7 +774,7 @@ int main(int argc, char **argv) {
size_t len = strlen(needle) + 1;
char wildcarded[len];
- SIMPLE_PATTERN *p = simple_pattern_create(heystack, SIMPLE_PATTERN_EXACT);
+ SIMPLE_PATTERN *p = simple_pattern_create(heystack, NULL, SIMPLE_PATTERN_EXACT);
int ret = simple_pattern_matches_extract(p, needle, wildcarded, len);
simple_pattern_free(p);
diff --git a/src/plugin_proc_diskspace.c b/src/plugin_proc_diskspace.c
index e41e76182c..d588bd90ff 100644
--- a/src/plugin_proc_diskspace.c
+++ b/src/plugin_proc_diskspace.c
@@ -96,13 +96,15 @@ static inline void do_disk_space_stats(struct mountinfo *mi, int update_every) {
}
excluded_mountpoints = simple_pattern_create(
- config_get(CONFIG_SECTION_DISKSPACE, "exclude space metrics on paths", DELAULT_EXLUDED_PATHS),
- mode
+ config_get(CONFIG_SECTION_DISKSPACE, "exclude space metrics on paths", DELAULT_EXLUDED_PATHS)
+ , NULL
+ , mode
);
excluded_filesystems = simple_pattern_create(
- config_get(CONFIG_SECTION_DISKSPACE, "exclude space metrics on filesystems", DEFAULT_EXCLUDED_FILESYSTEMS),
- SIMPLE_PATTERN_EXACT
+ config_get(CONFIG_SECTION_DISKSPACE, "exclude space metrics on filesystems", DEFAULT_EXCLUDED_FILESYSTEMS)
+ , NULL
+ , SIMPLE_PATTERN_EXACT
);
dict_mountpoints = dictionary_create(DICTIONARY_FLAG_SINGLE_THREADED);
diff --git a/src/proc_diskstats.c b/src/proc_diskstats.c
index 866e49c771..884b499b6b 100644
--- a/src/proc_diskstats.c
+++ b/src/proc_diskstats.c
@@ -501,8 +501,9 @@ int do_proc_diskstats(int update_every, usec_t dt) {
if(unlikely(!excluded_disks)) {
excluded_disks = simple_pattern_create(
- config_get(CONFIG_SECTION_DISKSTATS, "exclude disks", DEFAULT_EXCLUDED_DISKS),
- SIMPLE_PATTERN_EXACT
+ config_get(CONFIG_SECTION_DISKSTATS, "exclude disks", DEFAULT_EXCLUDED_DISKS)
+ , NULL
+ , SIMPLE_PATTERN_EXACT
);
}
diff --git a/src/proc_net_dev.c b/src/proc_net_dev.c
index 32bb5bab1f..341b9e0ca7 100644
--- a/src/proc_net_dev.c
+++ b/src/proc_net_dev.c
@@ -447,7 +447,7 @@ int do_proc_net_dev(int update_every, usec_t dt) {
do_compressed = config_get_boolean_ondemand("plugin:proc:/proc/net/dev", "compressed packets for all interfaces", CONFIG_BOOLEAN_AUTO);
do_events = config_get_boolean_ondemand("plugin:proc:/proc/net/dev", "frames, collisions, carrier counters for all interfaces", CONFIG_BOOLEAN_AUTO);
- disabled_list = simple_pattern_create(config_get("plugin:proc:/proc/net/dev", "disable by default interfaces matching", "lo fireqos* *-ifb"), SIMPLE_PATTERN_EXACT);
+ disabled_list = simple_pattern_create(config_get("plugin:proc:/proc/net/dev", "disable by default interfaces matching", "lo fireqos* *-ifb"), NULL, SIMPLE_PATTERN_EXACT);
}
if(unlikely(!ff)) {
diff --git a/src/rrd2json.c b/src/rrd2json.c
index 00d7a552ff..94762d0c21 100644
--- a/src/rrd2json.c
+++ b/src/rrd2json.c
@@ -464,47 +464,35 @@ static void rrdr_dump(RRDR *r)
void rrdr_disable_not_selected_dimensions(RRDR *r, uint32_t options, const char *dims) {
rrdset_check_rdlock(r->st);
- if(unlikely(!dims || !*dims)) return;
-
- char b[strlen(dims) + 1];
- char *o = b, *tok;
- strcpy(o, dims);
+ if(unlikely(!dims || !*dims || (dims[0] == '*' && dims[1] == '\0'))) return;
long c, dims_selected = 0, dims_not_hidden_not_zero = 0;
RRDDIM *d;
- // disable all of them
- for(c = 0, d = r->st->dimensions; d ;c++, d = d->next)
- r->od[c] |= RRDR_HIDDEN;
-
- while(o && *o && (tok = mystrsep(&o, ",|"))) {
- if(!*tok) continue;
-
- uint32_t hash = simple_hash(tok);
-
- // find it and enable it
- for(c = 0, d = r->st->dimensions; d ;c++, d = d->next) {
- if(unlikely((hash == d->hash && !strcmp(d->id, tok)) || (hash == d->hash_name && !strcmp(d->name, tok)))) {
-
- if(likely(r->od[c] & RRDR_HIDDEN)) {
- r->od[c] |= RRDR_SELECTED;
- r->od[c] &= ~RRDR_HIDDEN;
- dims_selected++;
- }
-
- // since the user needs this dimension
- // make it appear as NONZERO, to return it
- // even if the dimension has only zeros
- // unless option non_zero is set
- if(likely(!(options & RRDR_OPTION_NONZERO)))
- r->od[c] |= RRDR_NONZERO;
+ SIMPLE_PATTERN *pattern = simple_pattern_create(dims, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT);
+ for(c = 0, d = r->st->dimensions; d ;c++, d = d->next) {
+ if(simple_pattern_matches(pattern, d->id) || simple_pattern_matches(pattern, d->name)) {
+ r->od[c] |= RRDR_SELECTED;
+ if(unlikely(r->od[c] & RRDR_HIDDEN)) r->od[c] &= ~RRDR_HIDDEN;
+ dims_selected++;
+
+ // since the user needs this dimension
+ // make it appear as NONZERO, to return it
+ // even if the dimension has only zeros
+ // unless option non_zero is set
+ if(unlikely(!(options & RRDR_OPTION_NONZERO)))
+ r->od[c] |= RRDR_NONZERO;
- // count the visible dimensions
- if(likely(r->od[c] & RRDR_NONZERO))
- dims_not_hidden_not_zero++;
- }
+ // count the visible dimensions
+ if(likely(r->od[c] & RRDR_NONZERO))
+ dims_not_hidden_not_zero++;
+ }
+ else {
+ r->od[c] |= RRDR_HIDDEN;
+ if(unlikely(r->od[c] & RRDR_SELECTED)) r->od[c] &= ~RRDR_SELECTED;
}
}
+ simple_pattern_free(pattern);
// check if all dimensions are hidden
if(unlikely(!dims_not_hidden_not_zero && dims_selected)) {
diff --git a/src/rrdpush.c b/src/rrdpush.c
index 2d10c3ca95..5fd1d129be 100644
--- a/src/rrdpush.c
+++ b/src/rrdpush.c
@@ -1004,7 +1004,7 @@ int rrdpush_receiver_thread_spawn(RRDHOST *host, struct web_client *w, char *url
}
{
- SIMPLE_PATTERN *key_allow_from = simple_pattern_create(appconfig_get(&stream_config, key, "allow from", "*"), SIMPLE_PATTERN_EXACT);
+ SIMPLE_PATTERN *key_allow_from = simple_pattern_create(appconfig_get(&stream_config, key, "allow from", "*"), NULL, SIMPLE_PATTERN_EXACT);
if(key_allow_from) {
if(!simple_pattern_matches(key_allow_from, w->client_ip)) {
simple_pattern_free(key_allow_from);
@@ -1023,7 +1023,7 @@ int rrdpush_receiver_thread_spawn(RRDHOST *host, struct web_client *w, char *url
}
{
- SIMPLE_PATTERN *machine_allow_from = simple_pattern_create(appconfig_get(&stream_config, machine_guid, "allow from", "*"), SIMPLE_PATTERN_EXACT);
+ SIMPLE_PATTERN *machine_allow_from = simple_pattern_create(appconfig_get(&stream_config, machine_guid, "allow from", "*"), NULL, SIMPLE_PATTERN_EXACT);
if(machine_allow_from) {
if(!simple_pattern_matches(machine_allow_from, w->client_ip)) {
simple_pattern_free(machine_allow_from);
diff --git a/src/simple_pattern.c b/src/simple_pattern.c
index 469ea396fb..747b5150a9 100644
--- a/src/simple_pattern.c
+++ b/src/simple_pattern.c
@@ -68,11 +68,25 @@ static inline struct simple_pattern *parse_pattern(char *str, SIMPLE_PREFIX_MODE
return m;
}
-SIMPLE_PATTERN *simple_pattern_create(const char *list, SIMPLE_PREFIX_MODE default_mode) {
+SIMPLE_PATTERN *simple_pattern_create(const char *list, const char *separators, SIMPLE_PREFIX_MODE default_mode) {
struct simple_pattern *root = NULL, *last = NULL;
if(unlikely(!list || !*list)) return root;
+ int isseparator[256] = {
+ [' '] = 1 // space
+ , ['\t'] = 1 // tab
+ , ['\r'] = 1 // carriage return
+ , ['\n'] = 1 // new line
+ , ['\f'] = 1 // form feed
+ , ['\v'] = 1 // vertical tab
+ };
+
+ if (unlikely(separators && *separators)) {
+ memset(&isseparator[0], 0, sizeof(isseparator));
+ while(*separators) isseparator[(unsigned char)*separators++] = 1;
+ }
+
char *buf = mallocz(strlen(list) + 1);
const char *s = list;
@@ -83,7 +97,7 @@ SIMPLE_PATTERN *simple_pattern_create(const char *list, SIMPLE_PREFIX_MODE defau
char negative = 0;
// skip all spaces
- while(isspace(*s))
+ while(isseparator[(unsigned char)*s])
s++;
if(*s == '!') {
@@ -103,7 +117,7 @@ SIMPLE_PATTERN *simple_pattern_create(const char *list, SIMPLE_PREFIX_MODE defau
s++;
}
else {
- if (isspace(*s) && !escape) {
+ if (isseparator[(unsigned char)*s] && !escape) {
s++;
break;
}
diff --git a/src/simple_pattern.h b/src/simple_pattern.h
index 60a25f4930..d0b75af7e9 100644
--- a/src/simple_pattern.h
+++ b/src/simple_pattern.h
@@ -13,7 +13,7 @@ typedef void SIMPLE_PATTERN;
// create a simple_pattern from the string given
// default_mode is used in cases where EXACT matches, without an asterisk,
// should be considered PREFIX matches.
-extern SIMPLE_PATTERN *simple_pattern_create(const char *list, SIMPLE_PREFIX_MODE default_mode);
+extern SIMPLE_PATTERN *simple_pattern_create(const char *list, const char *separators, SIMPLE_PREFIX_MODE default_mode);
// test if string str is matched from the pattern and fill 'wildcarded' with the parts matched by '*'
extern int simple_pattern_matches_extract(SIMPLE_PATTERN *list, const char *str, char *wildcarded, size_t wildcarded_size);
diff --git a/src/statsd.c b/src/statsd.c
index bfe5d4828c..78096af141 100644
--- a/src/statsd.c
+++ b/src/statsd.c
@@ -1139,7 +1139,7 @@ int statsd_readfile(const char *path, const char *filename) {
}
else if (!strcmp(name, "metrics")) {
simple_pattern_free(app->metrics);
- app->metrics = simple_pattern_create(value, SIMPLE_PATTERN_EXACT);
+ app->metrics = simple_pattern_create(value, NULL, SIMPLE_PATTERN_EXACT);
}
else if (!strcmp(name, "private charts")) {
if (!strcmp(value, "yes") || !strcmp(value, "on"))
@@ -1249,7 +1249,7 @@ int statsd_readfile(const char *path, const char *filename) {
);
if(pattern)
- dim->metric_pattern = simple_pattern_create(dim->metric, SIMPLE_PATTERN_EXACT);
+ dim->metric_pattern = simple_pattern_create(dim->metric, NULL, SIMPLE_PATTERN_EXACT);
}
else {
error("STATSD: ignoring line %zu ('%s') of file '%s/%s'. Unknown keyword for the [%s] section.", line, name, path, filename, chart->id);
@@ -1995,7 +1995,7 @@ void *statsd_main(void *ptr) {
statsd.recvmmsg_size = (size_t)config_get_number(CONFIG_SECTION_STATSD, "udp messages to process at once", (long long)statsd.recvmmsg_size);
#endif
- statsd.charts_for = simple_pattern_create(config_get(CONFIG_SECTION_STATSD, "create private charts for metrics matching", "*"), SIMPLE_PATTERN_EXACT);
+ statsd.charts_for = simple_pattern_create(config_get(CONFIG_SECTION_STATSD, "create private charts for metrics matching", "*"), NULL, SIMPLE_PATTERN_EXACT);
statsd.max_private_charts = (size_t)config_get_number(CONFIG_SECTION_STATSD, "max private charts allowed", (long long)statsd.max_private_charts);
statsd.max_private_charts_hard = (size_t)config_get_number(CONFIG_SECTION_STATSD, "max private charts hard limit", (long long)statsd.max_private_charts * 5);
statsd.private_charts_memory_mode = rrd_memory_mode_id(config_get(CONFIG_SECTION_STATSD, "private charts memory mode", rrd_memory_mode_name(default_rrd_memory_mode)));
diff --git a/src/sys_fs_cgroup.c b/src/sys_fs_cgroup.c
index 4098ac8f4c..f80135a240 100644
--- a/src/sys_fs_cgroup.c
+++ b/src/sys_fs_cgroup.c
@@ -175,7 +175,7 @@ void read_cgroup_plugin_configuration() {
" !/systemd "
" !/user "
" * " // enable anything else
- ), SIMPLE_PATTERN_EXACT);
+ ), NULL, SIMPLE_PATTERN_EXACT);
enabled_cgroup_paths = simple_pattern_create(
config_get("plugin:cgroups", "search for cgroups in subpaths matching",
@@ -189,7 +189,7 @@ void read_cgroup_plugin_configuration() {
" !/user.slice "
" !/lxc/*/* " // #2161 #2649
" * "
- ), SIMPLE_PATTERN_EXACT);
+ ), NULL, SIMPLE_PATTERN_EXACT);
snprintfz(filename, FILENAME_MAX, "%s/cgroup-name.sh", netdata_configured_plugins_dir);
cgroups_rename_script = config_get("plugin:cgroups", "script to get cgroup names", filename);
@@ -215,14 +215,14 @@ void read_cgroup_plugin_configuration() {
" *qemu* "
" *.libvirt-qemu " // #3010
" * "
- ), SIMPLE_PATTERN_EXACT);
+ ), NULL, SIMPLE_PATTERN_EXACT);
if(cgroup_enable_systemd_services) {
systemd_services_cgroups = simple_pattern_create(
config_get("plugin:cgroups", "cgroups to match as systemd services",
" !/system.slice/*/*.service "
" /system.slice/*.service "
- ), SIMPLE_PATTERN_EXACT);
+ ), NULL, SIMPLE_PATTERN_EXACT);
}
mountinfo_free(root);