author | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Sun, 25 Jun 2006 08:56:59 +0000 (10:56 +0200) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Sun, 25 Jun 2006 08:56:59 +0000 (10:56 +0200) |
ChangeLog | patch | blob | history | |
collectd.spec | patch | blob | history | |
debian/changelog | patch | blob | history | |
src/collectd.c | patch | blob | history | |
src/configfile.c | patch | blob | history | |
src/swap.c | patch | blob | history |
diff --git a/ChangeLog b/ChangeLog
index 871acf09cc2e2fbe7d331dabe714ae254cb89619..8780e2bee5fa936f1b4cc9964830d9899e1a6cdd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2006-06-18, Version 3.9.4
+ * The Solaris code in the `swap' plugin has been changed to reflect
+ the numbers returned by `swap -s'. Thanks to Christophe Kalt for
+ working this out.
+ * The debugging system has been fixed to work with the Sun libc.
+
2006-06-01, Version 3.9.3
* Fixed the ping-plugin under FreeBSD and Mac OS X. Potentially other
operating systems also profit from the changes, but I wasn't able to
diff --git a/collectd.spec b/collectd.spec
index bcc1cd14b4b9f1d3a73352ffe500e02ec0ca48eb..7fc859901ec63740460f7c71402e8ccaebabcb89 100644 (file)
--- a/collectd.spec
+++ b/collectd.spec
Summary: Statistics collection daemon for filling RRD files.
Name: collectd
-Version: 3.9.3
+Version: 3.9.4
Release: 1
Source: http://collectd.org/files/%{name}-%{version}.tar.gz
License: GPL
%attr(0444,root,root) %{_libdir}/%{name}/sensors.so*
%changelog
+* Tue Jun 18 2006 Florian octo Forster <octo@verplant.org> 3.9.4-1
+- New upstream version
+
* Tue Jun 01 2006 Florian octo Forster <octo@verplant.org> 3.9.3-1
- New upstream version
diff --git a/debian/changelog b/debian/changelog
index eb2e4bdd4d421c67c64514d2a969118a7be48e53..22618dd6d9fdb99219dfceedd8bf2c5b3cf4a91b 100644 (file)
--- a/debian/changelog
+++ b/debian/changelog
+collectd (3.9.4) unstable; urgency=low
+
+ * New upstream version
+
+ -- Florian Forster <octo@leeloo.home.verplant.org> Sun, 18 Jun 2006 19:50:44 +0200
+
collectd (3.9.3) unstable; urgency=low
* New upstream version
diff --git a/src/collectd.c b/src/collectd.c
index b4ee50460d947bfb04359119ef3c6bdd5504bae5..e9bc0d5dcc89ccd032976af8beb7d6a08be1b00f 100644 (file)
--- a/src/collectd.c
+++ b/src/collectd.c
#if HAVE_LIBRRD
operating_mode = MODE_LOCAL;
+#else
+ operating_mode = MODE_CLIENT;
#endif
/* open syslog */
diff --git a/src/configfile.c b/src/configfile.c
index 477d8816e84b8e32267bedfa71569d6d1304940b..39265868eac9dfb3eee7e2c79221c5be2c92c4d2 100644 (file)
--- a/src/configfile.c
+++ b/src/configfile.c
#define ERR_NEEDS_ARG "Section `%s' needs an argument.\n"
#define ERR_NEEDS_SECTION "`%s' can only be used within a section.\n"
+#define ESCAPE_NULL(str) ((str) == NULL ? "(null)" : (str))
+
+#define DEBUG_CALLBACK(shortvar, var, arguments, value) \
+ DBG("shortvar = %s, var = %s, arguments = %s, value = %s, ...", \
+ ESCAPE_NULL(shortvar), \
+ ESCAPE_NULL(var), \
+ ESCAPE_NULL(arguments), \
+ ESCAPE_NULL(value))
+
extern int operating_mode;
typedef struct cf_callback
@@ -102,7 +111,10 @@ static int cf_dispatch (char *type, const char *orig_key, const char *orig_value
int ret;
int i;
- DBG ("type = %s, key = %s, value = %s", type, orig_key, orig_value);
+ DBG ("type = %s, key = %s, value = %s",
+ ESCAPE_NULL(type),
+ ESCAPE_NULL(orig_key),
+ ESCAPE_NULL(orig_value));
if ((cf_cb = cf_search (type)) == NULL)
{
}
else
{
- DBG ("Key was truncated: `%s'", keys[i]);
+ DBG ("Key was truncated: `%s'", ESCAPE_NULL(keys[i]));
}
}
}
const char *arguments, const char *value, lc_flags_t flags,
void *extra)
{
- DBG ("shortvar = %s, var = %s, arguments = %s, value = %s, ...",
- shortvar, var, arguments, value);
+ DEBUG_CALLBACK (shortvar, var, arguments, value);
if (strcasecmp (value, "Client") == 0)
operating_mode = MODE_CLIENT;
const char *arguments, const char *value, lc_flags_t flags,
void *extra)
{
- DBG ("shortvar = %s, var = %s, arguments = %s, value = %s, ...",
- shortvar, var, arguments, value);
+ DEBUG_CALLBACK (shortvar, var, arguments, value);
plugin_set_dir (value);
{
cf_mode_item_t *item;
- DBG ("shortvar = %s, var = %s, arguments = %s, value = %s, ...",
- shortvar, var, arguments, value);
+ DEBUG_CALLBACK (shortvar, var, arguments, value);
if (extra == NULL)
{
const char *arguments, const char *value, lc_flags_t flags,
void *extra)
{
- DBG ("shortvar = %s, var = %s, arguments = %s, value = %s, ...",
- shortvar, var, arguments, value);
+ DEBUG_CALLBACK (shortvar, var, arguments, value);
if (plugin_load (value))
syslog (LOG_ERR, "plugin_load (%s): failed to load plugin", value);
char *node;
char *service = NET_DEFAULT_PORT;
- DBG ("shortvar = %s, var = %s, arguments = %s, value = %s, ...",
- shortvar, var, arguments, value);
+ DEBUG_CALLBACK (shortvar, var, arguments, value);
buffer = strdup (value);
if (buffer == NULL)
const char *arguments, const char *value, lc_flags_t flags,
void *extra)
{
- DBG ("shortvar = %s, var = %s, arguments = %s, value = %s, ...",
- shortvar, var, arguments, value);
+ DEBUG_CALLBACK (shortvar, var, arguments, value);
if (flags == LC_FLAGS_SECTIONSTART)
{
const char *arguments, const char *value, lc_flags_t flags,
void *extra)
{
- DBG ("shortvar = %s, var = %s, arguments = %s, value = %s, ...",
- shortvar, var, arguments, value);
+ DEBUG_CALLBACK (shortvar, var, arguments, value);
if ((nesting_depth == 0) || (current_module == NULL))
{
diff --git a/src/swap.c b/src/swap.c
index 089150329bc3e59704e21e33b5344375b92cddb3..f8ce93f328fd697d7e1979ac5f25031a6c74c54c 100644 (file)
--- a/src/swap.c
+++ b/src/swap.c
static int ds_num = 4;
#ifdef KERNEL_SOLARIS
-static int pagesize;
+static unsigned long long pagesize;
static kstat_t *ksp;
#endif /* KERNEL_SOLARIS */
{
#ifdef KERNEL_SOLARIS
/* getpagesize(3C) tells me this does not fail.. */
- pagesize = getpagesize ();
+ pagesize = (unsigned long long) getpagesize ();
if (get_kstat (&ksp, "unix", 0, "system_pages"))
ksp = NULL;
#endif /* KERNEL_SOLARIS */
unsigned long long swap_alloc;
unsigned long long swap_resv;
unsigned long long swap_avail;
- /* unsigned long long swap_free; */
-
- long long availrmem;
- long long swapfs_minfree;
struct anoninfo ai;
if (swapctl (SC_AINFO, &ai) == -1)
+ {
+ syslog (LOG_ERR, "swap plugin: swapctl failed: %s",
+ strerror (errno));
return;
+ }
- availrmem = get_kstat_value (ksp, "availrmem");
- swapfs_minfree = get_kstat_value (ksp, "minfree");
-
- if ((availrmem < 0LL) || (swapfs_minfree < 0LL))
- return;
-
- /*
- * Calculations learned by reading
- * http://www.itworld.com/Comp/2377/UIR980701perf/
+ /*
+ * Calculations from:
+ * http://cvs.opensolaris.org/source/xref/on/usr/src/cmd/swap/swap.c
+ * Also see:
+ * http://www.itworld.com/Comp/2377/UIR980701perf/ (outdated?)
+ * /usr/include/vm/anon.h
+ *
+ * In short, swap -s shows: allocated + reserved = used, available
*
- * swap_resv += ani_resv
- * swap_alloc += MAX(ani_resv, ani_max) - ani_free
- * swap_avail += MAX(ani_max - ani_resv, 0) + (availrmem - swapfs_minfree)
- * swap_free += ani_free + (availrmem - swapfs_minfree)
+ * However, Solaris does not allow to allocated/reserved more than the
+ * available swap (physical memory + disk swap), so the pedant may
+ * prefer: allocated + unallocated = reserved, available
+ *
+ * We map the above to: used + resv = n/a, free
*
- * To clear up the terminology a bit:
- * resv = reserved (but not neccessarily used)
- * alloc = used (neccessarily reserved)
- * avail = not reserved (neccessarily free)
- * free = not allocates (possibly reserved)
+ * Does your brain hurt yet? - Christophe Kalt
+ *
+ * Oh, and in case you wonder,
+ * swap_alloc = pagesize * ( ai.ani_max - ai.ani_free );
+ * can suffer from a 32bit overflow.
*/
- swap_resv = pagesize * ai.ani_resv;
- swap_alloc = pagesize * (MAX(ai.ani_resv, ai.ani_max) - ai.ani_free);
- swap_avail = pagesize * (MAX(ai.ani_max - ai.ani_resv, 0) + (availrmem - swapfs_minfree));
- /* swap_free = pagesize * (ai.ani_free + (availrmem - swapfs_minfree)); */
-
- swap_submit (swap_alloc, swap_avail, -1LL, swap_resv - swap_alloc);
+ swap_alloc = ai.ani_max - ai.ani_free;
+ swap_alloc *= pagesize;
+ swap_resv = ai.ani_resv + ai.ani_free - ai.ani_max;
+ swap_resv *= pagesize;
+ swap_avail = ai.ani_max - ai.ani_resv;
+ swap_avail *= pagesize;
+
+ swap_submit (swap_alloc, swap_avail, -1LL, swap_resv);
/* #endif defined(KERNEL_SOLARIS) */
#elif defined(HAVE_LIBSTATGRAB)