Code

Merge branch 'v393-fix' into b39-fix
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Sun, 25 Jun 2006 08:56:59 +0000 (10:56 +0200)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Sun, 25 Jun 2006 08:56:59 +0000 (10:56 +0200)
ChangeLog
collectd.spec
debian/changelog
src/collectd.c
src/configfile.c
src/swap.c

index 871acf09cc2e2fbe7d331dabe714ae254cb89619..8780e2bee5fa936f1b4cc9964830d9899e1a6cdd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+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
index bcc1cd14b4b9f1d3a73352ffe500e02ec0ca48eb..7fc859901ec63740460f7c71402e8ccaebabcb89 100644 (file)
@@ -1,6 +1,6 @@
 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
@@ -101,6 +101,9 @@ rm -rf $RPM_BUILD_ROOT
 %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
 
index eb2e4bdd4d421c67c64514d2a969118a7be48e53..22618dd6d9fdb99219dfceedd8bf2c5b3cf4a91b 100644 (file)
@@ -1,3 +1,9 @@
+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 
index b4ee50460d947bfb04359119ef3c6bdd5504bae5..e9bc0d5dcc89ccd032976af8beb7d6a08be1b00f 100644 (file)
@@ -291,6 +291,8 @@ int main (int argc, char **argv)
 
 #if HAVE_LIBRRD
        operating_mode = MODE_LOCAL;
+#else
+       operating_mode = MODE_CLIENT;
 #endif
 
        /* open syslog */
index 477d8816e84b8e32267bedfa71569d6d1304940b..39265868eac9dfb3eee7e2c79221c5be2c92c4d2 100644 (file)
 #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)
        {
@@ -195,7 +207,7 @@ void cf_register (char *type,
                }
                else
                {
-                       DBG ("Key was truncated: `%s'", keys[i]);
+                       DBG ("Key was truncated: `%s'", ESCAPE_NULL(keys[i]));
                }
        }
 }
@@ -237,8 +249,7 @@ static int cf_callback_mode (const char *shortvar, const char *var,
                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;
@@ -271,8 +282,7 @@ static int cf_callback_mode_plugindir (const char *shortvar, const char *var,
                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);
 
@@ -285,8 +295,7 @@ static int cf_callback_mode_option (const char *shortvar, const char *var,
 {
        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)
        {
@@ -335,8 +344,7 @@ static int cf_callback_mode_loadmodule (const char *shortvar, const char *var,
                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);
@@ -358,8 +366,7 @@ static int cf_callback_socket (const char *shortvar, const char *var,
        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)
@@ -401,8 +408,7 @@ static int cf_callback_plugin (const char *shortvar, const char *var,
                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)
        {
@@ -462,8 +468,7 @@ static int cf_callback_plugin_dispatch (const char *shortvar, const char *var,
                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))
        {
index 089150329bc3e59704e21e33b5344375b92cddb3..f8ce93f328fd697d7e1979ac5f25031a6c74c54c 100644 (file)
@@ -53,7 +53,7 @@ static char *ds_def[] =
 static int ds_num = 4;
 
 #ifdef KERNEL_SOLARIS
-static int pagesize;
+static unsigned long long pagesize;
 static kstat_t *ksp;
 #endif /* KERNEL_SOLARIS */
 
@@ -61,7 +61,7 @@ static void swap_init (void)
 {
 #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 */
@@ -145,43 +145,45 @@ static void swap_read (void)
        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)