[collectd] [PATCH] unixsock plugin, utils_cmd_flush: Implemented the "flush" command.

Sebastian Harl sh at tokkee.org
Wed Feb 27 21:57:37 CET 2008


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 <sh at tokkee.org>
---
 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(+), 0 deletions(-)
 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 da9ca9b..273c314 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -593,6 +593,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 d17852a..a08a75d 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<FLUSH> [I<Timeout>]
+
+Flushes all cached data older than I<Timeout> 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 5f859b3..a7618c0 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 0000000..e7737a0
--- /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 <sh at tokkee.org>
+ **/
+
+#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 0000000..334f086
--- /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 <sh at tokkee.org>
+ **/
+
+#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 : */
+
-- 
1.5.4.2.184.gb23b

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mailman.verplant.org/pipermail/collectd/attachments/20080227/c26cf77d/attachment.pgp 


More information about the collectd mailing list