From: Florian Forster Date: Sat, 18 Nov 2006 12:44:23 +0000 (+0100) Subject: Ignorelist: Renamed `src/config_list.[ch]' to `src/utils_ignorelist.[ch]'. X-Git-Tag: collectd-3.11.0~53 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=ba5aa781cacb54b167867929759bda738c386a91;p=collectd.git Ignorelist: Renamed `src/config_list.[ch]' to `src/utils_ignorelist.[ch]'. The interface has been changed to use the `ignorelist'-prefix rather than `configlist', which is a confusing term for this functionality. --- diff --git a/src/Makefile.am b/src/Makefile.am index 35b92f84..be062863 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,11 +12,11 @@ sbin_PROGRAMS = collectd collectd_SOURCES = collectd.c collectd.h \ utils_debug.c utils_debug.h \ utils_mount.c utils_mount.h \ + utils_ignorelist.c utils_ignorelist.h \ common.c common.h \ network.c network.h \ plugin.c plugin.h \ - configfile.c configfile.h \ - config_list.c config_list.h + configfile.c configfile.h collectd_CPPFLAGS = $(LTDLINCL) collectd_CPPFLAGS += -DCONFIGFILE='"${sysconfdir}/${PACKAGE_NAME}.conf"' collectd_CPPFLAGS += -DPKGLOCALSTATEDIR='"${localstatedir}/lib/${PACKAGE_NAME}"' diff --git a/src/config_list.c b/src/config_list.c deleted file mode 100644 index eff976d8..00000000 --- a/src/config_list.c +++ /dev/null @@ -1,393 +0,0 @@ -/** - * collectd - src/config_list.c - * Copyright (C) 2006 Lubos Stanek - * - * This program is free software; you can redistribute it and/ - * or modify it under the terms of the GNU General Public Li- - * cence as published by the Free Software Foundation; either - * version 2 of the Licence, or any later version. - * - * This program is distributed in the hope that it will be use- - * ful, but WITHOUT ANY WARRANTY; without even the implied war- - * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public Licence for more details. - * - * You should have received a copy of the GNU General Public - * Licence along with this program; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, - * USA. - * - * Authors: - * Lubos Stanek - **/ -/** - * configlist handles plugin's list of configured collectable - * entries with global ignore action - **/ -/** - * Usage: - * - * Define plugin's global pointer variable of type configlist_t: - * configlist_t *myconfig_ignore; - * If you know the state of the global ignore (IgnoreSelected), - * allocate the variable with: - * myconfig_ignore = configlist_create (YourKnownIgnore); - * If you do not know the state of the global ignore, - * initialize the global variable and set the ignore flag later: - * myconfig_ignore = configlist_init (); - * Append single entries in your cf_register'ed callback function: - * configlist_add (myconfig_ignore, newentry); - * When you hit the IgnoreSelected config option, - * offer it to the list: - * configlist_ignore (myconfig_ignore, instantly_got_value_of_ignore); - * That is all for the configlist initialization. - * Later during read and write (plugin's registered functions) get - * the information whether this entry would be collected or not: - * if (configlist_ignored (myconfig_ignore, thisentry)) - * return; - **/ - -#include "common.h" -#include "utils_debug.h" -#include "config_list.h" - -/* private prototypes */ - -struct configentry_s; -typedef struct configentry_s configentry_t; - -struct configlist_s { - int ignore; /* ignore entries */ - int num; /* number of entries */ - configentry_t *next; /* pointer to the first entry */ -}; - -struct configentry_s { -#if HAVE_REGEX_H - regex_t *rmatch; /* regular expression entry identification */ -#endif - char *smatch; /* string entry identification */ - configentry_t *next; -}; - - -/* *** *** *** ********************************************* *** *** *** */ -/* *** *** *** *** *** *** private functions *** *** *** *** *** *** */ -/* *** *** *** ********************************************* *** *** *** */ - -#if HAVE_REGEX_H -static int configlist_regappend(configlist_t *conflist, const char *entry) -{ - int rcompile; - regex_t *regtemp; - int errsize; - char *regerr = NULL; - configentry_t *new; - - /* create buffer */ - if ((regtemp = malloc(sizeof(regex_t))) == NULL) - { - syslog (LOG_ERR, "cannot allocate new config entry"); - return (0); - } - memset (regtemp, '\0', sizeof(regex_t)); - - /* compile regex */ - if ((rcompile = regcomp (regtemp, entry, REG_EXTENDED)) != 0) - { - /* prepare message buffer */ - errsize = regerror(rcompile, regtemp, NULL, 0); - if (errsize) - regerr = smalloc(errsize); - /* get error message */ - if (regerror(rcompile, regtemp, regerr, errsize)) - syslog (LOG_ERR, "cannot compile regex %s: %i/%s", - entry, rcompile, regerr); - else - syslog (LOG_ERR, "cannot compile regex %s: %i", - entry, rcompile); - if (errsize) - sfree (regerr); - regfree (regtemp); - return (0); - } - DBG("regex compiled: %s - %i", entry, rcompile); - - /* create new entry */ - if ((new = malloc(sizeof(configentry_t))) == NULL) - { - syslog (LOG_ERR, "cannot allocate new config entry"); - regfree (regtemp); - return (0); - } - memset (new, '\0', sizeof(configentry_t)); - new->rmatch = regtemp; - - /* append new entry */ - if (conflist->next == NULL) - { - conflist->next=new; - } - else - { - new->next=conflist->next; - conflist->next=new; - } - conflist->num++; - return (1); -} /* int configlist_regappend(configlist_t *conflist, const char *entry) */ -#endif - -static int configlist_strappend(configlist_t *conflist, const char *entry) -{ - configentry_t *new; - - /* create new entry */ - if ((new = malloc(sizeof(configentry_t))) == NULL ) - { - syslog (LOG_ERR, "cannot allocate new entry"); - return (0); - } - memset (new, '\0', sizeof(configentry_t)); - new->smatch = sstrdup(entry); - - /* append new entry */ - if (conflist->next == NULL) - { - conflist->next=new; - } - else - { - new->next=conflist->next; - conflist->next=new; - } - conflist->num++; - return (1); -} /* int configlist_strappend(configlist_t *conflist, const char *entry) */ - -#if HAVE_REGEX_H -/* - * check list for entry regex match - * return 1 if found - */ -static int configentry_rmatch (configentry_t *confentry, const char *entry) -{ - if (confentry == NULL) - return (0); - - if (strlen (entry) == 0) - return (0); - - if (confentry->rmatch == NULL) - return (0); - - /* match regex */ - if (regexec (confentry->rmatch, entry, 0, NULL, 0) == 0) - return (1); - - return (0); -} /* int configentry_rmatch (configentry_t *confentry, const char *entry) */ -#endif - -/* - * check list for entry string match - * return 1 if found - */ -static int configentry_smatch (configentry_t *confentry, const char *entry) -{ - if (confentry == NULL) - return (0); - - if (strlen (entry) == 0) - return (0); - - if ((confentry->smatch != NULL && strcmp (entry, confentry->smatch) == 0)) - return (1); - - return (0); -} /* int configentry_smatch (configentry_t *confentry, const char *entry) */ - - -/* *** *** *** ******************************************** *** *** *** */ -/* *** *** *** *** *** *** public functions *** *** *** *** *** *** */ -/* *** *** *** ******************************************** *** *** *** */ - -/* - * create the configlist_t with known ignore state - * return pointer to configlist_t - */ -configlist_t *configlist_create (int ignore) -{ - configlist_t *conflist; - - if ((conflist = smalloc (sizeof (configlist_t))) == NULL) - { - syslog(LOG_ERR, "not enough memory to allocate configlist"); - return (NULL); - } - DBG("configlist created 0x%p, ignore %i", (void *) conflist, ignore); - memset (conflist, '\0', sizeof (configlist_t)); - - if (ignore) - conflist->ignore = ignore; - - return (conflist); -} /* configlist_t *configlist_create (int ignore) */ - -/* - * create configlist_t and initialize the ignore state to 0 - * return pointer to configlist_t - */ -configlist_t *configlist_init (void) -{ - return (configlist_create (0)); -} /* configlist_t *configlist_init (void) */ - - -/* - * free memory used by configlist_t - */ -void configlist_free (configlist_t *conflist) -{ - configentry_t *this; - configentry_t *next; - - DBG ("(conflist = 0x%p)", (void *) conflist); - - if (conflist == NULL) - return; - - for (this = conflist->next; this != NULL; this = next) - { - DBG ("free - confentry = 0x%p, numlist %i", (void *) this, conflist->num); - next = this->next; - conflist->num--; -#if HAVE_REGEX_H - if (this->rmatch != NULL) - { - regfree (this->rmatch); - this->rmatch = NULL; - } -#endif - if (this->smatch != NULL) - { - sfree (this->smatch); - this->smatch = NULL; - } - sfree (this); - } -#if COLLECTD_DEBUG - if (conflist->num != 0) - DBG ("after free numlist: %i", conflist->num); -#endif - conflist->num = 0; - sfree (conflist); - conflist = NULL; -} /* void configlist_destroy (configlist_t *conflist) */ - -/* - * set ignore state of the configlist_t - */ -void configlist_ignore (configlist_t *conflist, int ignore) -{ - if (conflist == NULL) - { - DBG("ignore call with configlist_t == NULL"); - return; - } - - conflist->ignore = ignore; -} /* void configlist_ignore (configlist_t *conflist, int ignore) */ - -/* - * get number of entries in the configlist_t - * return int number - */ -int configlist_num (configlist_t *conflist) -{ - if (conflist == NULL) - { - DBG("get num called with configlist_t == NULL"); - return (0); - } - - return (conflist->num); -} /* int configlist_num (configlist_t *conflist) */ - -/* - * append entry into configlist_t - * return 1 for success - */ -int configlist_add (configlist_t *conflist, const char *entry) -{ -#if HAVE_REGEX_H - char *entrytemp; -#endif - int restemp; - - if (conflist == NULL) - { - DBG("add called with configlist_t == NULL"); - return (0); - } - - /* append nothing, report success */ - if (strlen(entry) == 0) - { - DBG("not appending: empty entry"); - return (1); - } - -#if HAVE_REGEX_H - /* regex string is enclosed in "/.../" */ - if (entry[0] == '/' && strlen(entry) > 2 && entry[strlen(entry) - 1] == '/') - { - entrytemp = smalloc(strlen(entry) - 2); - sstrncpy(entrytemp, &entry[1], strlen(entry) - 1); - DBG("to add regex entry: %s", entrytemp); - restemp = configlist_regappend(conflist, entrytemp); - sfree (entrytemp); - } - else -#endif - { - DBG("to add entry: %s", entry); - restemp = configlist_strappend(conflist, entry); - } - return (restemp); -} /* int configlist_add (configlist_t *conflist, const char *entry) */ - -/* - * check list for entry - * return 1 for ignored entry - */ -int configlist_ignored (configlist_t *conflist, const char *entry) -{ - configentry_t *traverse; - - /* if no entries, collect all */ - if (configlist_num(conflist) == 0) - return (0); - - /* traverse list and check entries */ - traverse = conflist->next; - while (traverse != NULL) - { -#if HAVE_REGEX_H - if (traverse->rmatch != NULL) - { - if (configentry_rmatch (traverse, entry)) - return (conflist->ignore); - } - else -#endif - { - if (configentry_smatch (traverse, entry)) - return (conflist->ignore); - } - traverse = traverse->next; - } - - return (1 - conflist->ignore); -} /* int configlist_ignored (configlist_t *conflist, const char *entry) */ - diff --git a/src/config_list.h b/src/config_list.h deleted file mode 100644 index dd434a56..00000000 --- a/src/config_list.h +++ /dev/null @@ -1,82 +0,0 @@ -/** - * collectd - src/config_list.h - * Copyright (C) 2006 Lubos Stanek - * - * This program is free software; you can redistribute it and/ - * or modify it under the terms of the GNU General Public Li- - * cence as published by the Free Software Foundation; either - * version 2 of the Licence, or any later version. - * - * This program is distributed in the hope that it will be use- - * ful, but WITHOUT ANY WARRANTY; without even the implied war- - * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public Licence for more details. - * - * You should have received a copy of the GNU General Public - * Licence along with this program; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, - * USA. - * - * Authors: - * Lubos Stanek - **/ -/** - * configlist handles plugin's list of configured collectable - * entries with global ignore action - **/ - -#if !CONFIG_LIST_H -#define CONFIG_LIST_H 1 - -#include "common.h" - -#if HAVE_REGEX_H -# include -#endif - -/* public prototypes */ - -struct configlist_s; -typedef struct configlist_s configlist_t; - -/* - * create the configlist_t with known ignore state - * return pointer to configlist_t - */ -configlist_t *configlist_create (int ignore); - -/* - * create configlist_t and initialize the ignore state to 0 - * return pointer to configlist_t - */ -configlist_t *configlist_init (void); - -/* - * free memory used by configlist_t - */ -void configlist_free (configlist_t *conflist); - -/* - * set ignore state of the configlist_t - */ -void configlist_ignore (configlist_t *conflist, int ignore); -/* - * get number of entries in the configlist_t - * return int number - */ -int configlist_num (configlist_t *conflist); - -/* - * append entry to configlist_t - * return 1 for success - */ -int configlist_add (configlist_t *conflist, const char *entry); - -/* - * check list for entry - * return 1 for ignored entry - */ -int configlist_ignored (configlist_t *conflist, const char *entry); - -#endif /* !CONFIG_LIST_H */ - diff --git a/src/sensors.c b/src/sensors.c index c60f2914..21b5661e 100644 --- a/src/sensors.c +++ b/src/sensors.c @@ -33,7 +33,7 @@ #include "common.h" #include "plugin.h" #include "configfile.h" -#include "config_list.h" +#include "utils_ignorelist.h" #include "utils_debug.h" #define MODULE_NAME "sensors" @@ -165,7 +165,7 @@ static char *config_keys[] = }; static int config_keys_num = 3; -static configlist_t *sensor_list; +static ignorelist_t *sensor_list; /* * sensor_extended_naming: @@ -189,11 +189,11 @@ featurelist_t *first_feature = NULL; static int sensors_config (char *key, char *value) { if (sensor_list == NULL) - sensor_list = configlist_init(); + sensor_list = ignorelist_init(); if (strcasecmp (key, "Sensor") == 0) { - if (!configlist_add (sensor_list, value)) + if (!ignorelist_add (sensor_list, value)) { syslog (LOG_EMERG, "Cannot add value."); return (1); @@ -204,7 +204,7 @@ static int sensors_config (char *key, char *value) if ((strcasecmp (value, "True") == 0) || (strcasecmp (value, "Yes") == 0) || (strcasecmp (value, "On") == 0)) - configlist_ignore (sensor_list, 1); + ignorelist_ignore (sensor_list, 1); } else if (strcasecmp (key, "ExtendedSensorNaming") == 0) { @@ -336,7 +336,7 @@ static void sensors_voltage_write (char *host, char *inst, char *val) int status; /* skip ignored in our config */ - if (configlist_ignored (sensor_list, inst)) + if (ignorelist_ignored (sensor_list, inst)) return; /* extended sensor naming */ @@ -357,7 +357,7 @@ static void sensors_write (char *host, char *inst, char *val) int status; /* skip ignored in our config */ - if (configlist_ignored (sensor_list, inst)) + if (ignorelist_ignored (sensor_list, inst)) return; /* extended sensor naming */ @@ -384,7 +384,7 @@ static void sensors_submit (const char *feat_name, return; /* skip ignored in our config */ - if (configlist_ignored (sensor_list, inst)) + if (ignorelist_ignored (sensor_list, inst)) return; if (snprintf (buf, BUFSIZE, "%u:%.3f", (unsigned int) curtime, diff --git a/src/utils_ignorelist.c b/src/utils_ignorelist.c new file mode 100644 index 00000000..c1de4c6a --- /dev/null +++ b/src/utils_ignorelist.c @@ -0,0 +1,393 @@ +/** + * collectd - src/config_list.c + * Copyright (C) 2006 Lubos Stanek + * + * This program is free software; you can redistribute it and/ + * or modify it under the terms of the GNU General Public Li- + * cence as published by the Free Software Foundation; either + * version 2 of the Licence, or any later version. + * + * This program is distributed in the hope that it will be use- + * ful, but WITHOUT ANY WARRANTY; without even the implied war- + * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public Licence for more details. + * + * You should have received a copy of the GNU General Public + * Licence along with this program; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, + * USA. + * + * Authors: + * Lubos Stanek + **/ +/** + * ignorelist handles plugin's list of configured collectable + * entries with global ignore action + **/ +/** + * Usage: + * + * Define plugin's global pointer variable of type ignorelist_t: + * ignorelist_t *myconfig_ignore; + * If you know the state of the global ignore (IgnoreSelected), + * allocate the variable with: + * myconfig_ignore = ignorelist_create (YourKnownIgnore); + * If you do not know the state of the global ignore, + * initialize the global variable and set the ignore flag later: + * myconfig_ignore = ignorelist_init (); + * Append single entries in your cf_register'ed callback function: + * ignorelist_add (myconfig_ignore, newentry); + * When you hit the IgnoreSelected config option, + * offer it to the list: + * ignorelist_ignore (myconfig_ignore, instantly_got_value_of_ignore); + * That is all for the ignorelist initialization. + * Later during read and write (plugin's registered functions) get + * the information whether this entry would be collected or not: + * if (ignorelist_ignored (myconfig_ignore, thisentry)) + * return; + **/ + +#include "common.h" +#include "utils_debug.h" +#include "utils_ignorelist.h" + +/* + * private prototypes + */ +struct ignorelist_item_s +{ +#if HAVE_REGEX_H + regex_t *rmatch; /* regular expression entry identification */ +#endif + char *smatch; /* string entry identification */ + struct ignorelist_item_s *next; +}; +typedef struct ignorelist_item_s ignorelist_item_t; + +struct ignorelist_s +{ + int ignore; /* ignore entries */ + int num; /* number of entries */ + ignorelist_item_t *next; /* pointer to the first entry */ +}; + +/* *** *** *** ********************************************* *** *** *** */ +/* *** *** *** *** *** *** private functions *** *** *** *** *** *** */ +/* *** *** *** ********************************************* *** *** *** */ + +#if HAVE_REGEX_H +static int ignorelist_regappend(ignorelist_t *conflist, const char *entry) +{ + int rcompile; + regex_t *regtemp; + int errsize; + char *regerr = NULL; + ignorelist_item_t *new; + + /* create buffer */ + if ((regtemp = malloc(sizeof(regex_t))) == NULL) + { + syslog (LOG_ERR, "cannot allocate new config entry"); + return (0); + } + memset (regtemp, '\0', sizeof(regex_t)); + + /* compile regex */ + if ((rcompile = regcomp (regtemp, entry, REG_EXTENDED)) != 0) + { + /* prepare message buffer */ + errsize = regerror(rcompile, regtemp, NULL, 0); + if (errsize) + regerr = smalloc(errsize); + /* get error message */ + if (regerror(rcompile, regtemp, regerr, errsize)) + syslog (LOG_ERR, "cannot compile regex %s: %i/%s", + entry, rcompile, regerr); + else + syslog (LOG_ERR, "cannot compile regex %s: %i", + entry, rcompile); + if (errsize) + sfree (regerr); + regfree (regtemp); + return (0); + } + DBG("regex compiled: %s - %i", entry, rcompile); + + /* create new entry */ + if ((new = malloc(sizeof(ignorelist_item_t))) == NULL) + { + syslog (LOG_ERR, "cannot allocate new config entry"); + regfree (regtemp); + return (0); + } + memset (new, '\0', sizeof(ignorelist_item_t)); + new->rmatch = regtemp; + + /* append new entry */ + if (conflist->next == NULL) + { + conflist->next=new; + } + else + { + new->next=conflist->next; + conflist->next=new; + } + conflist->num++; + return (1); +} /* int ignorelist_regappend(ignorelist_t *conflist, const char *entry) */ +#endif + +static int ignorelist_strappend(ignorelist_t *conflist, const char *entry) +{ + ignorelist_item_t *new; + + /* create new entry */ + if ((new = malloc(sizeof(ignorelist_item_t))) == NULL ) + { + syslog (LOG_ERR, "cannot allocate new entry"); + return (0); + } + memset (new, '\0', sizeof(ignorelist_item_t)); + new->smatch = sstrdup(entry); + + /* append new entry */ + if (conflist->next == NULL) + { + conflist->next=new; + } + else + { + new->next=conflist->next; + conflist->next=new; + } + conflist->num++; + return (1); +} /* int ignorelist_strappend(ignorelist_t *conflist, const char *entry) */ + +#if HAVE_REGEX_H +/* + * check list for entry regex match + * return 1 if found + */ +static int ignorelist_item_rmatch (ignorelist_item_t *confentry, const char *entry) +{ + if (confentry == NULL) + return (0); + + if (strlen (entry) == 0) + return (0); + + if (confentry->rmatch == NULL) + return (0); + + /* match regex */ + if (regexec (confentry->rmatch, entry, 0, NULL, 0) == 0) + return (1); + + return (0); +} /* int ignorelist_item_rmatch (ignorelist_item_t *confentry, const char *entry) */ +#endif + +/* + * check list for entry string match + * return 1 if found + */ +static int ignorelist_item_smatch (ignorelist_item_t *confentry, const char *entry) +{ + if (confentry == NULL) + return (0); + + if (strlen (entry) == 0) + return (0); + + if ((confentry->smatch != NULL && strcmp (entry, confentry->smatch) == 0)) + return (1); + + return (0); +} /* int ignorelist_item_smatch (ignorelist_item_t *confentry, const char *entry) */ + + +/* *** *** *** ******************************************** *** *** *** */ +/* *** *** *** *** *** *** public functions *** *** *** *** *** *** */ +/* *** *** *** ******************************************** *** *** *** */ + +/* + * create the ignorelist_t with known ignore state + * return pointer to ignorelist_t + */ +ignorelist_t *ignorelist_create (int ignore) +{ + ignorelist_t *conflist; + + if ((conflist = smalloc (sizeof (ignorelist_t))) == NULL) + { + syslog(LOG_ERR, "not enough memory to allocate ignorelist"); + return (NULL); + } + DBG("ignorelist created 0x%p, ignore %i", (void *) conflist, ignore); + memset (conflist, '\0', sizeof (ignorelist_t)); + + if (ignore) + conflist->ignore = ignore; + + return (conflist); +} /* ignorelist_t *ignorelist_create (int ignore) */ + +/* + * create ignorelist_t and initialize the ignore state to 0 + * return pointer to ignorelist_t + */ +ignorelist_t *ignorelist_init (void) +{ + return (ignorelist_create (0)); +} /* ignorelist_t *ignorelist_init (void) */ + + +/* + * free memory used by ignorelist_t + */ +void ignorelist_free (ignorelist_t *conflist) +{ + ignorelist_item_t *this; + ignorelist_item_t *next; + + DBG ("(conflist = 0x%p)", (void *) conflist); + + if (conflist == NULL) + return; + + for (this = conflist->next; this != NULL; this = next) + { + DBG ("free - confentry = 0x%p, numlist %i", (void *) this, conflist->num); + next = this->next; + conflist->num--; +#if HAVE_REGEX_H + if (this->rmatch != NULL) + { + regfree (this->rmatch); + this->rmatch = NULL; + } +#endif + if (this->smatch != NULL) + { + sfree (this->smatch); + this->smatch = NULL; + } + sfree (this); + } +#if COLLECTD_DEBUG + if (conflist->num != 0) + DBG ("after free numlist: %i", conflist->num); +#endif + conflist->num = 0; + sfree (conflist); + conflist = NULL; +} /* void ignorelist_destroy (ignorelist_t *conflist) */ + +/* + * set ignore state of the ignorelist_t + */ +void ignorelist_ignore (ignorelist_t *conflist, int ignore) +{ + if (conflist == NULL) + { + DBG("ignore call with ignorelist_t == NULL"); + return; + } + + conflist->ignore = ignore; +} /* void ignorelist_ignore (ignorelist_t *conflist, int ignore) */ + +/* + * get number of entries in the ignorelist_t + * return int number + */ +int ignorelist_num (ignorelist_t *conflist) +{ + if (conflist == NULL) + { + DBG("get num called with ignorelist_t == NULL"); + return (0); + } + + return (conflist->num); +} /* int ignorelist_num (ignorelist_t *conflist) */ + +/* + * append entry into ignorelist_t + * return 1 for success + */ +int ignorelist_add (ignorelist_t *conflist, const char *entry) +{ +#if HAVE_REGEX_H + char *entrytemp; +#endif + int restemp; + + if (conflist == NULL) + { + DBG("add called with ignorelist_t == NULL"); + return (0); + } + + /* append nothing, report success */ + if (strlen(entry) == 0) + { + DBG("not appending: empty entry"); + return (1); + } + +#if HAVE_REGEX_H + /* regex string is enclosed in "/.../" */ + if (entry[0] == '/' && strlen(entry) > 2 && entry[strlen(entry) - 1] == '/') + { + entrytemp = smalloc(strlen(entry) - 2); + sstrncpy(entrytemp, &entry[1], strlen(entry) - 1); + DBG("to add regex entry: %s", entrytemp); + restemp = ignorelist_regappend(conflist, entrytemp); + sfree (entrytemp); + } + else +#endif + { + DBG("to add entry: %s", entry); + restemp = ignorelist_strappend(conflist, entry); + } + return (restemp); +} /* int ignorelist_add (ignorelist_t *conflist, const char *entry) */ + +/* + * check list for entry + * return 1 for ignored entry + */ +int ignorelist_ignored (ignorelist_t *conflist, const char *entry) +{ + ignorelist_item_t *traverse; + + /* if no entries, collect all */ + if (ignorelist_num(conflist) == 0) + return (0); + + /* traverse list and check entries */ + traverse = conflist->next; + while (traverse != NULL) + { +#if HAVE_REGEX_H + if (traverse->rmatch != NULL) + { + if (ignorelist_item_rmatch (traverse, entry)) + return (conflist->ignore); + } + else +#endif + { + if (ignorelist_item_smatch (traverse, entry)) + return (conflist->ignore); + } + traverse = traverse->next; + } + + return (1 - conflist->ignore); +} /* int ignorelist_ignored (ignorelist_t *conflist, const char *entry) */ + diff --git a/src/utils_ignorelist.h b/src/utils_ignorelist.h new file mode 100644 index 00000000..30d508b0 --- /dev/null +++ b/src/utils_ignorelist.h @@ -0,0 +1,81 @@ +/** + * collectd - src/config_list.h + * Copyright (C) 2006 Lubos Stanek + * + * This program is free software; you can redistribute it and/ + * or modify it under the terms of the GNU General Public Li- + * cence as published by the Free Software Foundation; either + * version 2 of the Licence, or any later version. + * + * This program is distributed in the hope that it will be use- + * ful, but WITHOUT ANY WARRANTY; without even the implied war- + * ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public Licence for more details. + * + * You should have received a copy of the GNU General Public + * Licence along with this program; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, + * USA. + * + * Authors: + * Lubos Stanek + **/ +/** + * ignorelist handles plugin's list of configured collectable + * entries with global ignore action + **/ + +#ifndef UTILS_IGNORELIST_H +#define UTILS_IGNORELIST_H 1 + +#include "common.h" + +#if HAVE_REGEX_H +# include +#endif + +/* public prototypes */ + +struct ignorelist_s; +typedef struct ignorelist_s ignorelist_t; + +/* + * create the ignorelist_t with known ignore state + * return pointer to ignorelist_t + */ +ignorelist_t *ignorelist_create (int ignore); + +/* + * create ignorelist_t and initialize the ignore state to 0 + * return pointer to ignorelist_t + */ +ignorelist_t *ignorelist_init (void); + +/* + * free memory used by ignorelist_t + */ +void ignorelist_free (ignorelist_t *conflist); + +/* + * set ignore state of the ignorelist_t + */ +void ignorelist_ignore (ignorelist_t *conflist, int ignore); +/* + * get number of entries in the ignorelist_t + * return int number + */ +int ignorelist_num (ignorelist_t *conflist); + +/* + * append entry to ignorelist_t + * return 1 for success + */ +int ignorelist_add (ignorelist_t *conflist, const char *entry); + +/* + * check list for entry + * return 1 for ignored entry + */ +int ignorelist_ignored (ignorelist_t *conflist, const char *entry); + +#endif /* UTILS_IGNORELIST_H */