Various plugins: Use the IS_TRUE and IS_FALSE macros everywhere.
[collectd.git] / src / vmem.c
index 3235cb6..d32f1db 100644 (file)
 #include "plugin.h"
 
 #if KERNEL_LINUX
-/* No global variables */
+static const char *config_keys[] =
+{
+  "Verbose"
+};
+static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
+
+static int verbose_output = 0;
 /* #endif KERNEL_LINUX */
 
 #else
@@ -39,15 +45,15 @@ static void submit (const char *plugin_instance, const char *type,
   vl.values = values;
   vl.values_len = values_len;
 
-  vl.time = time (NULL);
-  strcpy (vl.host, hostname_g);
-  strcpy (vl.plugin, "vmem");
+  sstrncpy (vl.host, hostname_g, sizeof (vl.host));
+  sstrncpy (vl.plugin, "vmem", sizeof (vl.plugin));
   if (plugin_instance != NULL)
     sstrncpy (vl.plugin_instance, plugin_instance, sizeof (vl.plugin_instance));
+  sstrncpy (vl.type, type, sizeof (vl.type));
   if (type_instance != NULL)
     sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance));
 
-  plugin_dispatch_values (type, &vl);
+  plugin_dispatch_values (&vl);
 } /* void vmem_submit */
 
 static void submit_two (const char *plugin_instance, const char *type,
@@ -67,6 +73,23 @@ static void submit_one (const char *plugin_instance, const char *type,
   submit (plugin_instance, type, type_instance, &value, 1);
 } /* void submit_one */
 
+static int vmem_config (const char *key, const char *value)
+{
+  if (strcasecmp ("Verbose", key) == 0)
+  {
+    if (IS_TRUE (value))
+      verbose_output = 1;
+    else
+      verbose_output = 0;
+  }
+  else
+  {
+    return (-1);
+  }
+
+  return (0);
+} /* int vmem_config */
+
 static int vmem_read (void)
 {
 #if KERNEL_LINUX
@@ -131,41 +154,6 @@ static int vmem_read (void)
       submit_one (NULL, "vmpage_number", inst, value);
     }
 
-    /*
-     * Number of page allocations, refills, steals and scans. This is collected
-     * ``per zone'', i. e. for DMA, DMA32, normal and possibly highmem.
-     */
-    else if (strncmp ("pgalloc_", key, strlen ("pgalloc_")) == 0)
-    {
-      char *inst = key + strlen ("pgalloc_");
-      value_t value  = { .counter = counter };
-      submit_one (inst, "vmpage_action", "alloc", value);
-    }
-    else if (strncmp ("pgrefill_", key, strlen ("pgrefill_")) == 0)
-    {
-      char *inst = key + strlen ("pgrefill_");
-      value_t value  = { .counter = counter };
-      submit_one (inst, "vmpage_action", "refill", value);
-    }
-    else if (strncmp ("pgsteal_", key, strlen ("pgsteal_")) == 0)
-    {
-      char *inst = key + strlen ("pgsteal_");
-      value_t value  = { .counter = counter };
-      submit_one (inst, "vmpage_action", "steal", value);
-    }
-    else if (strncmp ("pgscan_kswapd_", key, strlen ("pgscan_kswapd_")) == 0)
-    {
-      char *inst = key + strlen ("pgscan_kswapd_");
-      value_t value  = { .counter = counter };
-      submit_one (inst, "vmpage_action", "scan_kswapd", value);
-    }
-    else if (strncmp ("pgscan_direct_", key, strlen ("pgscan_direct_")) == 0)
-    {
-      char *inst = key + strlen ("pgscan_direct_");
-      value_t value  = { .counter = counter };
-      submit_one (inst, "vmpage_action", "scan_direct", value);
-    }
-
     /* 
      * Page in and page outs. For memory and swap.
      */
@@ -205,6 +193,47 @@ static int vmem_read (void)
     }
 
     /*
+     * Skip the other statistics if verbose output is disabled.
+     */
+    else if (verbose_output == 0)
+      continue;
+
+    /*
+     * Number of page allocations, refills, steals and scans. This is collected
+     * ``per zone'', i. e. for DMA, DMA32, normal and possibly highmem.
+     */
+    else if (strncmp ("pgalloc_", key, strlen ("pgalloc_")) == 0)
+    {
+      char *inst = key + strlen ("pgalloc_");
+      value_t value  = { .counter = counter };
+      submit_one (inst, "vmpage_action", "alloc", value);
+    }
+    else if (strncmp ("pgrefill_", key, strlen ("pgrefill_")) == 0)
+    {
+      char *inst = key + strlen ("pgrefill_");
+      value_t value  = { .counter = counter };
+      submit_one (inst, "vmpage_action", "refill", value);
+    }
+    else if (strncmp ("pgsteal_", key, strlen ("pgsteal_")) == 0)
+    {
+      char *inst = key + strlen ("pgsteal_");
+      value_t value  = { .counter = counter };
+      submit_one (inst, "vmpage_action", "steal", value);
+    }
+    else if (strncmp ("pgscan_kswapd_", key, strlen ("pgscan_kswapd_")) == 0)
+    {
+      char *inst = key + strlen ("pgscan_kswapd_");
+      value_t value  = { .counter = counter };
+      submit_one (inst, "vmpage_action", "scan_kswapd", value);
+    }
+    else if (strncmp ("pgscan_direct_", key, strlen ("pgscan_direct_")) == 0)
+    {
+      char *inst = key + strlen ("pgscan_direct_");
+      value_t value  = { .counter = counter };
+      submit_one (inst, "vmpage_action", "scan_direct", value);
+    }
+
+    /*
      * Page action
      *
      * number of pages moved to the active or inactive lists and freed, i. e.
@@ -245,7 +274,9 @@ static int vmem_read (void)
 
 void module_register (void)
 {
-       plugin_register_read ("vmem", vmem_read);
+  plugin_register_config ("vmem", vmem_config,
+      config_keys, config_keys_num);
+  plugin_register_read ("vmem", vmem_read);
 } /* void module_register */
 
 /* vim: set sw=2 sts=2 ts=8 : */