2 * collectd - src/utils_cmd_flush.c
3 * Copyright (C) 2008 Sebastian Harl
4 * Copyright (C) 2008 Florian Forster
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; only version 2 of the License is applicable.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 * Sebastian "tokkee" Harl <sh at tokkee.org>
21 * Florian "octo" Forster <octo at verplant.org>
34 typedef struct flush_info_s flush_info_t;
36 static int parse_option_plugin (flush_info_t *fi, const char *option)
40 temp = (char **) realloc (fi->plugins,
41 (fi->plugins_num + 1) * sizeof (char *));
44 ERROR ("utils_cmd_flush: parse_option_plugin: realloc failed.");
49 fi->plugins[fi->plugins_num] = strdup (option + strlen ("plugin="));
50 if (fi->plugins[fi->plugins_num] == NULL)
52 /* fi->plugins is freed in handle_flush in this case */
53 ERROR ("utils_cmd_flush: parse_option_plugin: strdup failed.");
59 } /* int parse_option_plugin */
61 static int parse_option_timeout (flush_info_t *fi, const char *option)
63 const char *value_ptr = option + strlen ("timeout=");
67 timeout = strtol (value_ptr, &endptr, 0);
68 if (value_ptr == endptr)
71 fi->timeout = (timeout <= 0) ? (-1) : timeout;
74 } /* int parse_option_timeout */
76 static int parse_option (flush_info_t *fi, const char *option)
78 if (strncasecmp ("plugin=", option, strlen ("plugin=")) == 0)
79 return (parse_option_plugin (fi, option));
80 else if (strncasecmp ("timeout=", option, strlen ("timeout=")) == 0)
81 return (parse_option_timeout (fi, option));
84 } /* int parse_option */
86 int handle_flush (FILE *fh, char **fields, int fields_num)
92 memset (&fi, '\0', sizeof (fi));
95 for (i = 1; i < fields_num; i++)
97 status = parse_option (&fi, fields[i]);
100 fprintf (fh, "-1 Cannot parse option %s\n", fields[i]);
106 if (fi.plugins_num > 0)
109 for (i = 0; i < fi.plugins_num; i++)
111 status = plugin_flush_one (fi.timeout, fi.plugins[i]);
115 fprintf (fh, "0 Done: %i successful, %i errors\n",
116 success, fi.plugins_num - success);
120 plugin_flush_all (fi.timeout);
121 fprintf (fh, "0 Done\n");
125 for (i = 0; i < fi.plugins_num; i++)
127 sfree (fi.plugins[i]);
132 } /* int handle_flush */
134 /* vim: set sw=4 ts=4 tw=78 noexpandtab : */