Merge branch 'svn-trunk'
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Sun, 25 Jun 2006 09:25:52 +0000 (11:25 +0200)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Sun, 25 Jun 2006 09:25:52 +0000 (11:25 +0200)
src/configfile.c
src/processes.c
src/swap.c

index 477d881..3926586 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 fae1c2d..dba29ef 100644 (file)
@@ -161,6 +161,9 @@ static void ps_submit (int running,
                                blocked) >= BUFSIZE)
                return;
 
+       DBG ("running = %i; sleeping = %i; zombies = %i; stopped = %i; paging = %i; blocked = %i;",
+                       running, sleeping, zombies, stopped, paging, blocked);
+
        plugin_submit (MODULE_NAME, "-", buf);
 }
 
@@ -369,12 +372,15 @@ static void ps_read (void)
 
                if ((fh = fopen (filename, "r")) == NULL)
                {
-                       syslog (LOG_ERR, "Cannot open `%s': %s", filename, strerror (errno));
+                       syslog (LOG_NOTICE, "Cannot open `%s': %s", filename,
+                                       strerror (errno));
                        continue;
                }
 
                if (fgets (buf, BUFSIZE, fh) == NULL)
                {
+                       syslog (LOG_NOTICE, "Unable to read from `%s': %s",
+                                       filename, strerror (errno));
                        fclose (fh);
                        continue;
                }
@@ -382,7 +388,10 @@ static void ps_read (void)
                fclose (fh);
 
                if (strsplit (buf, fields, BUFSIZE) < 3)
+               {
+                       DBG ("Line has less than three fields.");
                        continue;
+               }
 
                switch (fields[2][0])
                {
@@ -395,7 +404,7 @@ static void ps_read (void)
                }
        }
 
-       closedir(proc);
+       closedir (proc);
 
        ps_submit (running, sleeping, zombies, stopped, paging, blocked);
 #endif /* KERNEL_LINUX */
index 7cc668d..f906c99 100644 (file)
@@ -66,7 +66,7 @@ static int ds_num = 4;
 /* #endif KERNEL_LINUX */
 
 #elif HAVE_LIBKSTAT
-static int pagesize;
+static unsigned long long pagesize;
 static kstat_t *ksp;
 /* #endif HAVE_LIBKSTAT */
 
@@ -91,7 +91,7 @@ static void swap_init (void)
 
 #elif HAVE_LIBKSTAT
        /* 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 HAVE_LIBKSTAT */
@@ -204,41 +204,43 @@ 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
+        *
+        * 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
         *
-        * 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)
+        * Does your brain hurt yet?  - Christophe Kalt
         *
-        * 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)
+        * 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_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 - swap_alloc);
 /* #endif HAVE_LIBKSTAT */