From 1cc2a8257dfebcdd899928145d9cd6997086ed19 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 22 Jan 2007 09:59:47 +0100 Subject: [PATCH] entropy plugin: Added a plugin to collect available entropy. Only works on Linux systems right now.. --- configure.in | 2 ++ src/Makefile.am | 8 +++++ src/entropy.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 src/entropy.c diff --git a/configure.in b/configure.in index ac6e5c99..0b0aa890 100644 --- a/configure.in +++ b/configure.in @@ -988,6 +988,7 @@ AC_COLLECTD([csv], [disable], [module], [csv output plugin]) AC_COLLECTD([df], [disable], [module], [df statistics]) AC_COLLECTD([dns], [disable], [module], [dns statistics]) AC_COLLECTD([email], [disable], [module], [email statistics]) +AC_COLLECTD([entropy], [disable], [module], [entropy statistics]) AC_COLLECTD([hddtemp], [disable], [module], [hdd temperature statistics]) AC_COLLECTD([load], [disable], [module], [system load statistics]) AC_COLLECTD([mbmon], [disable], [module], [motherboard monitor statistics]) @@ -1043,6 +1044,7 @@ Configuration: disk . . . . . . . $enable_disk dns . . . . . . . . $enable_dns email . . . . . . . $enable_email + entropy . . . . . . $enable_entropy hddtemp . . . . . . $enable_hddtemp load . . . . . . . $enable_load mbmon . . . . . . . $enable_mbmon diff --git a/src/Makefile.am b/src/Makefile.am index 55584191..87dcec07 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -186,6 +186,14 @@ collectd_LDADD += "-dlopen" email.la collectd_DEPENDENCIES += email.la endif +if BUILD_MODULE_ENTROPY +pkglib_LTLIBRARIES += entropy.la +entropy_la_SOURCES = entropy.c +entropy_la_LDFLAGS = -module -avoid-version +collectd_LDADD += "-dlopen" entropy.la +collectd_DEPENDENCIES += entropy.la +endif + #if BUILD_MODULE_QUOTA #pkglib_LTLIBRARIES += quota.la #quota_la_SOURCES = quota_plugin.c quota_plugin.h diff --git a/src/entropy.c b/src/entropy.c new file mode 100644 index 00000000..7e0a8174 --- /dev/null +++ b/src/entropy.c @@ -0,0 +1,97 @@ +/** + * collectd - src/entropy.c + * Copyright (C) 2005,2006 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 + * 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 + * + * Authors: + * Florian octo Forster + **/ + +#include "collectd.h" +#include "common.h" +#include "plugin.h" + +#if KERNEL_LINUX +# define ENTROPY_HAVE_READ 1 +#else +# define ENTROPY_HAVE_READ 0 +#endif + +#define ENTROPY_FILE "/proc/sys/kernel/random/entropy_avail" + +static data_source_t dsrc[1] = +{ + {"entropy", DS_TYPE_GAUGE, 0.0, 4294967295.0} +}; + +static data_set_t ds = +{ + "entropy", 1, dsrc +}; + +#if ENTROPY_HAVE_READ +static void entropy_submit (double entropy) +{ + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; + + values[0].gauge = entropy; + + vl.values = values; + vl.values_len = 1; + vl.time = time (NULL); + strcpy (vl.host, hostname); + strcpy (vl.plugin, "entropy"); + strcpy (vl.plugin_instance, ""); + strcpy (vl.type_instance, ""); + + plugin_dispatch_values ("entropy", &vl); +} + +static int entropy_read (void) +{ +#if KERNEL_LINUX + double entropy; + FILE *fh; + char buffer[64]; + + fh = fopen (ENTROPY_FILE, "r"); + if (fh == NULL) + return (-1); + + if (fgets (buffer, sizeof (buffer), fh) == NULL) + { + fclose (fh); + return (-1); + } + fclose (fh); + + entropy = atof (buffer); + + if (entropy > 0.0) + entropy_submit (entropy); +#endif /* KERNEL_LINUX */ + + return (0); +} +#endif /* ENTROPY_HAVE_READ */ + +void module_register (void) +{ + plugin_register_data_set (&ds); +#if ENTROPY_HAVE_READ + plugin_register_read ("entropy", entropy_read); +#endif +} -- 2.11.0