X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Ffilter_chain.c;h=4b164dc3a1a0e0cdd56c0007ee591a70900e466b;hb=f1b5b8611d87a7904c31ae4b28ea47f11f3c38b9;hp=4c324a80a54a3a76a2706f604fe95bccaacbb1bc;hpb=6597f3a6584704f92f824f3cf7bac3369102e8a0;p=collectd.git diff --git a/src/filter_chain.c b/src/filter_chain.c index 4c324a80..4b164dc3 100644 --- a/src/filter_chain.c +++ b/src/filter_chain.c @@ -1,6 +1,6 @@ /** * collectd - src/filter_chain.h - * Copyright (C) 2008,2009 Florian octo Forster + * Copyright (C) 2008-2010 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -19,44 +19,6 @@ * Florian octo Forster **/ -/* - * First tell the compiler to stick to the C99 and POSIX standards as close as - * possible. - */ -#ifndef __STRICT_ANSI__ /* {{{ */ -# define __STRICT_ANSI__ -#endif - -#ifndef _ISOC99_SOURCE -# define _ISOC99_SOURCE -#endif - -#ifdef _POSIX_C_SOURCE -# undef _POSIX_C_SOURCE -#endif -#define _POSIX_C_SOURCE 200112L - -#if 0 -/* Single UNIX needed for strdup. */ -#ifdef _XOPEN_SOURCE -# undef _XOPEN_SOURCE -#endif -#define _XOPEN_SOURCE 500 -#endif - -#ifndef _REENTRANT -# define _REENTRANT -#endif - -#ifndef _THREAD_SAFE -# define _THREAD_SAFE -#endif - -#ifdef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* }}} */ - #include "collectd.h" #include "configfile.h" #include "plugin.h" @@ -211,7 +173,7 @@ static char *fc_strdup (const char *orig) /* {{{ */ * * The configuration looks somewhat like this: * - * + * * * * Plugin "^mysql$" @@ -268,19 +230,21 @@ static int fc_config_add_match (fc_match_t **matches_head, /* {{{ */ sstrncpy (m->name, ptr->name, sizeof (m->name)); memcpy (&m->proc, &ptr->proc, sizeof (m->proc)); - assert (m->proc.create != NULL); m->user_data = NULL; m->next = NULL; - status = (*m->proc.create) (ci, &m->user_data); - if (status != 0) + if (m->proc.create != NULL) { - WARNING ("Filter subsystem: Failed to create a %s match.", - m->name); - fc_free_matches (m); - return (-1); + status = (*m->proc.create) (ci, &m->user_data); + if (status != 0) + { + WARNING ("Filter subsystem: Failed to create a %s match.", + m->name); + fc_free_matches (m); + return (-1); + } } - + if (*matches_head != NULL) { ptr = *matches_head; @@ -331,7 +295,7 @@ static int fc_config_add_target (fc_target_t **targets_head, /* {{{ */ t = (fc_target_t *) malloc (sizeof (*t)); if (t == NULL) { - ERROR ("fc_config_add_match: malloc failed."); + ERROR ("fc_config_add_target: malloc failed."); return (-1); } memset (t, 0, sizeof (*t)); @@ -346,7 +310,7 @@ static int fc_config_add_target (fc_target_t **targets_head, /* {{{ */ status = (*t->proc.create) (ci, &t->user_data); if (status != 0) { - WARNING ("Filter subsystem: Failed to create a %s match.", + WARNING ("Filter subsystem: Failed to create a %s target.", t->name); fc_free_targets (t); return (-1); @@ -514,21 +478,6 @@ static int fc_config_add_chain (const oconfig_item_t *ci) /* {{{ */ break; } /* for (ci->children) */ - /* Additional sanity checking. */ - while (status == 0) - { - if (chain->targets == NULL) - { - WARNING ("Filter subsystem: Chain %s: No default target has been " - "specified. Please make sure that there is a block within " - "the block!", chain->name); - status = -1; - break; - } - - break; - } /* while (status == 0) */ - if (status != 0) { fc_free_chains (chain); @@ -744,7 +693,14 @@ static int fc_bit_write_invoke (const data_set_t *ds, /* {{{ */ if ((plugin_list == NULL) || (plugin_list[0] == NULL)) { status = plugin_write (/* plugin = */ NULL, ds, vl); - if (status != 0) + if (status == ENOENT) + { + INFO ("Filter subsystem: Built-in target `write': Dispatching value to " + "all write plugins failed with status %i (ENOENT). " + "Most likely this means you didn't load any write plugins.", + status); + } + else if (status != 0) { INFO ("Filter subsystem: Built-in target `write': Dispatching value to " "all write plugins failed with status %i.", status); @@ -915,6 +871,7 @@ int fc_process_chain (const data_set_t *ds, value_list_t *vl, /* {{{ */ /* N. B.: rule->matches may be NULL. */ for (match = rule->matches; match != NULL; match = match->next) { + /* FIXME: Pass the meta-data to match targets here (when implemented). */ status = (*match->proc.match) (ds, vl, /* meta = */ NULL, &match->user_data); if (status < 0) @@ -943,6 +900,7 @@ int fc_process_chain (const data_set_t *ds, value_list_t *vl, /* {{{ */ { /* If we get here, all matches have matched the value. Execute the * target. */ + /* FIXME: Pass the meta-data to match targets here (when implemented). */ status = (*target->proc.invoke) (ds, vl, /* meta = */ NULL, &target->user_data); if (status < 0) @@ -999,6 +957,7 @@ int fc_process_chain (const data_set_t *ds, value_list_t *vl, /* {{{ */ { /* If we get here, all matches have matched the value. Execute the * target. */ + /* FIXME: Pass the meta-data to match targets here (when implemented). */ status = (*target->proc.invoke) (ds, vl, /* meta = */ NULL, &target->user_data); if (status < 0) @@ -1044,6 +1003,7 @@ int fc_process_chain (const data_set_t *ds, value_list_t *vl, /* {{{ */ * matches match. */ int fc_default_action (const data_set_t *ds, value_list_t *vl) /* {{{ */ { + /* FIXME: Pass the meta-data to match targets here (when implemented). */ return (fc_bit_write_invoke (ds, vl, /* meta = */ NULL, /* user_data = */ NULL)); } /* }}} int fc_default_action */