From a79a29c826b99d9dd2b0214e3bccf7491509d8f5 Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Wed, 27 Feb 2008 21:57:37 +0100 Subject: [PATCH] unixsock plugin, utils_cmd_flush: Implemented the "flush" command. This command flushes all cached data using plugin_flush_all(). An optional timeout may be specified as an argument. A new module "utils_cmd_flush" has been added for this purpose. Signed-off-by: Sebastian Harl Signed-off-by: Florian Forster --- src/Makefile.am | 1 + src/collectd-unixsock.pod | 9 ++++++++ src/unixsock.c | 5 +++++ src/utils_cmd_flush.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ src/utils_cmd_flush.h | 30 +++++++++++++++++++++++++++ 5 files changed, 97 insertions(+) create mode 100644 src/utils_cmd_flush.c create mode 100644 src/utils_cmd_flush.h diff --git a/src/Makefile.am b/src/Makefile.am index 48a20136..194e118a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -595,6 +595,7 @@ endif if BUILD_PLUGIN_UNIXSOCK pkglib_LTLIBRARIES += unixsock.la unixsock_la_SOURCES = unixsock.c \ + utils_cmd_flush.h utils_cmd_flush.c \ utils_cmd_getval.h utils_cmd_getval.c \ utils_cmd_putval.h utils_cmd_putval.c \ utils_cmd_putnotif.h utils_cmd_putnotif.c diff --git a/src/collectd-unixsock.pod b/src/collectd-unixsock.pod index d17852a7..a08a75da 100644 --- a/src/collectd-unixsock.pod +++ b/src/collectd-unixsock.pod @@ -174,6 +174,15 @@ Example: -> | PUTNOTIF type=temperature severity=warning time=1201094702 message=The roof is on fire! <- | 0 Success +=item B [I] + +Flushes all cached data older than I seconds. If no timeout has been +specified, it defaults to -1 which causes all data to be flushed. + +Example: + -> | FLUSH + <- | 0 Done + =back =head2 Identifiers diff --git a/src/unixsock.c b/src/unixsock.c index 5f859b3f..a7618c0f 100644 --- a/src/unixsock.c +++ b/src/unixsock.c @@ -24,6 +24,7 @@ #include "plugin.h" #include "configfile.h" +#include "utils_cmd_flush.h" #include "utils_cmd_getval.h" #include "utils_cmd_putval.h" #include "utils_cmd_putnotif.h" @@ -534,6 +535,10 @@ static void *us_handle_client (void *arg) { handle_putnotif (fh, fields, fields_num); } + else if (strcasecmp (fields[0], "flush") == 0) + { + handle_flush (fh, fields, fields_num); + } else { fprintf (fh, "-1 Unknown command: %s\n", fields[0]); diff --git a/src/utils_cmd_flush.c b/src/utils_cmd_flush.c new file mode 100644 index 00000000..e7737a0c --- /dev/null +++ b/src/utils_cmd_flush.c @@ -0,0 +1,52 @@ +/** + * collectd - src/utils_cmd_flush.c + * Copyright (C) 2008 Sebastian Harl + * + * 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 + * Free Software Foundation; only version 2 of the License is applicable. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: + * Sebastian "tokkee" Harl + **/ + +#include "collectd.h" +#include "plugin.h" + +int handle_flush (FILE *fh, char **fields, int fields_num) +{ + int timeout = -1; + + if ((fields_num != 1) && (fields_num != 2)) + { + DEBUG ("unixsock plugin: us_handle_flush: " + "Wrong number of fields: %i", fields_num); + fprintf (fh, "-1 Wrong number of fields: Got %i, expected 1 or 2.\n", + fields_num); + fflush (fh); + return (-1); + } + + if (fields_num == 2) + timeout = atoi (fields[1]); + + INFO ("unixsock plugin: flushing all data"); + plugin_flush_all (timeout); + INFO ("unixsock plugin: finished flushing all data"); + + fprintf (fh, "0 Done\n"); + fflush (fh); + return (0); +} /* int handle_flush */ + +/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ + diff --git a/src/utils_cmd_flush.h b/src/utils_cmd_flush.h new file mode 100644 index 00000000..334f0862 --- /dev/null +++ b/src/utils_cmd_flush.h @@ -0,0 +1,30 @@ +/** + * collectd - src/utils_cmd_flush.h + * Copyright (C) 2008 Sebastian Harl + * + * 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 + * Free Software Foundation; only version 2 of the License is applicable. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: + * Sebastian "tokkee" Harl + **/ + +#ifndef UTILS_CMD_FLUSH_H +#define UTILS_CMD_FLUSH_H 1 + +int handle_flush (FILE *fh, char **fields, int fields_num); + +#endif /* UTILS_CMD_FLUSH_H */ + +/* vim: set sw=4 ts=4 tw=78 noexpandtab : */ + -- 2.11.0