Merge branch 'collectd-5.7' into collectd-5.8
[collectd.git] / src / swap.c
index f64a9b3..78f05c5 100644 (file)
@@ -111,6 +111,7 @@ static int pagesize;
 
 static _Bool values_absolute = 1;
 static _Bool values_percentage = 0;
+static _Bool report_io = 1;
 
 static int swap_config(oconfig_item_t *ci) /* {{{ */
 {
@@ -136,11 +137,13 @@ static int swap_config(oconfig_item_t *ci) /* {{{ */
       cf_util_get_boolean(child, &values_absolute);
     else if (strcasecmp("ValuesPercentage", child->key) == 0)
       cf_util_get_boolean(child, &values_percentage);
+    else if (strcasecmp("ReportIO", child->key) == 0)
+      cf_util_get_boolean(child, &report_io);
     else
       WARNING("swap plugin: Unknown config option: \"%s\"", child->key);
   }
 
-  return (0);
+  return 0;
 } /* }}} int swap_config */
 
 static int swap_init(void) /* {{{ */
@@ -172,7 +175,7 @@ static int swap_init(void) /* {{{ */
 
   if (kvm_obj == NULL) {
     ERROR("swap plugin: kvm_openfiles failed, %s", errbuf);
-    return (-1);
+    return -1;
   }
 /* #endif HAVE_LIBKVM_GETSWAPINFO */
 
@@ -184,18 +187,16 @@ static int swap_init(void) /* {{{ */
   pagesize = getpagesize();
 #endif /* HAVE_PERFSTAT */
 
-  return (0);
+  return 0;
 } /* }}} int swap_init */
 
 static void swap_submit_usage(char const *plugin_instance, /* {{{ */
                               gauge_t used, gauge_t free,
                               char const *other_name, gauge_t other_value) {
-  value_t v[1];
   value_list_t vl = VALUE_LIST_INIT;
 
-  vl.values = v;
-  vl.values_len = STATIC_ARRAY_SIZE(v);
-  sstrncpy(vl.host, hostname_g, sizeof(vl.host));
+  vl.values = &(value_t){.gauge = NAN};
+  vl.values_len = 1;
   sstrncpy(vl.plugin, "swap", sizeof(vl.plugin));
   if (plugin_instance != NULL)
     sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance));
@@ -214,13 +215,9 @@ __attribute__((nonnull(1))) static void
 swap_submit_derive(char const *type_instance, /* {{{ */
                    derive_t value) {
   value_list_t vl = VALUE_LIST_INIT;
-  value_t v[1];
 
-  v[0].derive = value;
-
-  vl.values = v;
-  vl.values_len = STATIC_ARRAY_SIZE(v);
-  sstrncpy(vl.host, hostname_g, sizeof(vl.host));
+  vl.values = &(value_t){.derive = value};
+  vl.values_len = 1;
   sstrncpy(vl.plugin, "swap", sizeof(vl.plugin));
   sstrncpy(vl.type, "swap_io", sizeof(vl.type));
   sstrncpy(vl.type_instance, type_instance, sizeof(vl.type_instance));
@@ -240,7 +237,7 @@ static int swap_read_separate(void) /* {{{ */
     char errbuf[1024];
     WARNING("swap plugin: fopen (/proc/swaps) failed: %s",
             sstrerror(errno, errbuf, sizeof(errbuf)));
-    return (-1);
+    return -1;
   }
 
   while (fgets(buffer, sizeof(buffer), fh) != NULL) {
@@ -279,7 +276,7 @@ static int swap_read_separate(void) /* {{{ */
 
   fclose(fh);
 
-  return (0);
+  return 0;
 } /* }}} int swap_read_separate */
 
 static int swap_read_combined(void) /* {{{ */
@@ -297,7 +294,7 @@ static int swap_read_combined(void) /* {{{ */
     char errbuf[1024];
     WARNING("swap plugin: fopen (/proc/meminfo) failed: %s",
             sstrerror(errno, errbuf, sizeof(errbuf)));
-    return (-1);
+    return -1;
   }
 
   while (fgets(buffer, sizeof(buffer), fh) != NULL) {
@@ -319,7 +316,7 @@ static int swap_read_combined(void) /* {{{ */
   fclose(fh);
 
   if (isnan(swap_total) || isnan(swap_free))
-    return (ENOENT);
+    return ENOENT;
 
   /* Some systems, OpenVZ for example, don't provide SwapCached. */
   if (isnan(swap_cached))
@@ -329,12 +326,12 @@ static int swap_read_combined(void) /* {{{ */
   assert(!isnan(swap_used));
 
   if (swap_used < 0.0)
-    return (EINVAL);
+    return EINVAL;
 
   swap_submit_usage(NULL, swap_used * 1024.0, swap_free * 1024.0,
                     isnan(swap_cached) ? NULL : "cached",
                     isnan(swap_cached) ? NAN : swap_cached * 1024.0);
-  return (0);
+  return 0;
 } /* }}} int swap_read_combined */
 
 static int swap_read_io(void) /* {{{ */
@@ -355,7 +352,7 @@ static int swap_read_io(void) /* {{{ */
     if (fh == NULL) {
       char errbuf[1024];
       WARNING("swap: fopen: %s", sstrerror(errno, errbuf, sizeof(errbuf)));
-      return (-1);
+      return -1;
     } else
       old_kernel = 1;
   }
@@ -392,7 +389,7 @@ static int swap_read_io(void) /* {{{ */
   fclose(fh);
 
   if (have_data != 0x03)
-    return (ENOENT);
+    return ENOENT;
 
   if (report_bytes) {
     swap_in = swap_in * pagesize;
@@ -402,7 +399,7 @@ static int swap_read_io(void) /* {{{ */
   swap_submit_derive("in", swap_in);
   swap_submit_derive("out", swap_out);
 
-  return (0);
+  return 0;
 } /* }}} int swap_read_io */
 
 static int swap_read(void) /* {{{ */
@@ -412,11 +409,12 @@ static int swap_read(void) /* {{{ */
   else
     swap_read_combined();
 
-  swap_read_io();
+  if (report_io)
+    swap_read_io();
 
-  return (0);
+  return 0;
 } /* }}} int swap_read */
-  /* #endif KERNEL_LINUX */
+/* #endif KERNEL_LINUX */
 
 /*
  * Under Solaris, two mechanisms can be used to read swap statistics, swapctl
@@ -441,7 +439,7 @@ static int swap_read_kstat(void) /* {{{ */
     char errbuf[1024];
     ERROR("swap plugin: swapctl failed: %s",
           sstrerror(errno, errbuf, sizeof(errbuf)));
-    return (-1);
+    return -1;
   }
 
   /*
@@ -470,7 +468,7 @@ static int swap_read_kstat(void) /* {{{ */
   swap_avail = (gauge_t)((ai.ani_max - ai.ani_resv) * pagesize);
 
   swap_submit_usage(NULL, swap_alloc, swap_avail, "reserved", swap_resv);
-  return (0);
+  return 0;
 } /* }}} int swap_read_kstat */
   /* #endif 0 && HAVE_LIBKSTAT */
 
@@ -489,15 +487,15 @@ static int swap_read(void) /* {{{ */
   swap_num = swapctl(SC_GETNSWP, NULL);
   if (swap_num < 0) {
     ERROR("swap plugin: swapctl (SC_GETNSWP) failed with status %i.", swap_num);
-    return (-1);
+    return -1;
   } else if (swap_num == 0)
-    return (0);
+    return 0;
 
   /* Allocate and initialize the swaptbl_t structure */
   s = malloc(swap_num * sizeof(swapent_t) + sizeof(struct swaptable));
   if (s == NULL) {
     ERROR("swap plugin: malloc failed.");
-    return (-1);
+    return -1;
   }
 
   /* Memory to store the path names. We only use these paths when the
@@ -507,7 +505,7 @@ static int swap_read(void) /* {{{ */
   if (s_paths == NULL) {
     ERROR("swap plugin: calloc failed.");
     sfree(s);
-    return (-1);
+    return -1;
   }
   for (int i = 0; i < swap_num; i++)
     s->swt_ent[i].ste_path = s_paths + (i * PATH_MAX);
@@ -520,7 +518,7 @@ static int swap_read(void) /* {{{ */
           sstrerror(errno, errbuf, sizeof(errbuf)));
     sfree(s_paths);
     sfree(s);
-    return (-1);
+    return -1;
   } else if (swap_num < status) {
     /* more elements returned than requested */
     ERROR("swap plugin: I allocated memory for %i structure%s, "
@@ -529,7 +527,7 @@ static int swap_read(void) /* {{{ */
           swap_num, (swap_num == 1) ? "" : "s", status);
     sfree(s_paths);
     sfree(s);
-    return (-1);
+    return -1;
   } else if (swap_num > status)
     /* less elements returned than requested */
     swap_num = status;
@@ -564,7 +562,7 @@ static int swap_read(void) /* {{{ */
         total, avail);
     sfree(s_paths);
     sfree(s);
-    return (-1);
+    return -1;
   }
 
   /* If the "separate" option was specified (report_by_device == 1), all
@@ -574,7 +572,7 @@ static int swap_read(void) /* {{{ */
 
   sfree(s_paths);
   sfree(s);
-  return (0);
+  return 0;
 } /* }}} int swap_read */
   /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS */
 
@@ -591,21 +589,21 @@ static int swap_read(void) /* {{{ */
   swap_num = swapctl(SWAP_NSWAP, NULL, 0);
   if (swap_num < 0) {
     ERROR("swap plugin: swapctl (SWAP_NSWAP) failed with status %i.", swap_num);
-    return (-1);
+    return -1;
   } else if (swap_num == 0)
-    return (0);
+    return 0;
 
   swap_entries = calloc(swap_num, sizeof(*swap_entries));
   if (swap_entries == NULL) {
     ERROR("swap plugin: calloc failed.");
-    return (-1);
+    return -1;
   }
 
   status = swapctl(SWAP_STATS, swap_entries, swap_num);
   if (status != swap_num) {
     ERROR("swap plugin: swapctl (SWAP_STATS) failed with status %i.", status);
     sfree(swap_entries);
-    return (-1);
+    return -1;
   }
 
 #if defined(DEV_BSIZE) && (DEV_BSIZE > 0)
@@ -629,13 +627,13 @@ static int swap_read(void) /* {{{ */
         "swap plugin: Total swap space (%g) is less than used swap space (%g).",
         total, used);
     sfree(swap_entries);
-    return (-1);
+    return -1;
   }
 
   swap_submit_usage(NULL, used, total - used, NULL, NAN);
 
   sfree(swap_entries);
-  return (0);
+  return 0;
 } /* }}} int swap_read */
   /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_THREE_ARGS */
 
@@ -654,13 +652,13 @@ static int swap_read(void) /* {{{ */
   sw_usage_len = sizeof(struct xsw_usage);
 
   if (sysctl(mib, mib_len, &sw_usage, &sw_usage_len, NULL, 0) != 0)
-    return (-1);
+    return -1;
 
   /* The returned values are bytes. */
   swap_submit_usage(NULL, (gauge_t)sw_usage.xsu_used,
                     (gauge_t)sw_usage.xsu_avail, NULL, NAN);
 
-  return (0);
+  return 0;
 } /* }}} int swap_read */
   /* #endif VM_SWAPUSAGE */
 
@@ -674,12 +672,12 @@ static int swap_read(void) /* {{{ */
   gauge_t total;
 
   if (kvm_obj == NULL)
-    return (-1);
+    return -1;
 
   /* only one structure => only get the grand total, no details */
   status = kvm_getswapinfo(kvm_obj, &data_s, 1, 0);
   if (status == -1)
-    return (-1);
+    return -1;
 
   total = (gauge_t)data_s.ksw_total;
   used = (gauge_t)data_s.ksw_used;
@@ -689,7 +687,7 @@ static int swap_read(void) /* {{{ */
 
   swap_submit_usage(NULL, used, total - used, NULL, NAN);
 
-  return (0);
+  return 0;
 } /* }}} int swap_read */
   /* #endif HAVE_LIBKVM_GETSWAPINFO */
 
@@ -700,11 +698,11 @@ static int swap_read(void) /* {{{ */
 
   swap = sg_get_swap_stats();
   if (swap == NULL)
-    return (-1);
+    return -1;
 
   swap_submit_usage(NULL, (gauge_t)swap->used, (gauge_t)swap->free, NULL, NAN);
 
-  return (0);
+  return 0;
 } /* }}} int swap_read */
   /* #endif  HAVE_LIBSTATGRAB */
 
@@ -724,7 +722,7 @@ static int swap_read(void) /* {{{ */
     char errbuf[1024];
     WARNING("swap plugin: perfstat_memory_total failed: %s",
             sstrerror(errno, errbuf, sizeof(errbuf)));
-    return (-1);
+    return -1;
   }
 
   total = (gauge_t)(pmemory.pgsp_total * pagesize);
@@ -732,10 +730,13 @@ static int swap_read(void) /* {{{ */
   reserved = (gauge_t)(pmemory.pgsp_rsvd * pagesize);
 
   swap_submit_usage(NULL, total - free, free, "reserved", reserved);
-  swap_submit_derive("in", (derive_t)pmemory.pgspins * pagesize);
-  swap_submit_derive("out", (derive_t)pmemory.pgspouts * pagesize);
 
-  return (0);
+  if (report_io) {
+    swap_submit_derive("in", (derive_t)pmemory.pgspins * pagesize);
+    swap_submit_derive("out", (derive_t)pmemory.pgspouts * pagesize);
+  }
+
+  return 0;
 } /* }}} int swap_read */
 #endif /* HAVE_PERFSTAT */
 
@@ -744,5 +745,3 @@ void module_register(void) {
   plugin_register_init("swap", swap_init);
   plugin_register_read("swap", swap_read);
 } /* void module_register */
-
-/* vim: set fdm=marker : */