Merge branch 'collectd-5.8'
[collectd.git] / src / cpufreq.c
index 80f586d..851aad4 100644 (file)
@@ -25,9 +25,7 @@
 #include "common.h"
 #include "plugin.h"
 
-#define MODULE_NAME "cpufreq"
-
-static int num_cpu = 0;
+static int num_cpu;
 
 static int cpufreq_init(void) {
   int status;
@@ -36,10 +34,10 @@ static int cpufreq_init(void) {
   num_cpu = 0;
 
   while (1) {
-    status = ssnprintf(filename, sizeof(filename),
-                       "/sys/devices/system/cpu/cpu%d/cpufreq/"
-                       "scaling_cur_freq",
-                       num_cpu);
+    status = snprintf(filename, sizeof(filename),
+                      "/sys/devices/system/cpu/cpu%d/cpufreq/"
+                      "scaling_cur_freq",
+                      num_cpu);
     if ((status < 1) || ((unsigned int)status >= sizeof(filename)))
       break;
 
@@ -54,66 +52,40 @@ static int cpufreq_init(void) {
   if (num_cpu == 0)
     plugin_unregister_read("cpufreq");
 
-  return (0);
+  return 0;
 } /* int cpufreq_init */
 
-static void cpufreq_submit(int cpu_num, double value) {
-  value_t values[1];
+static void cpufreq_submit(int cpu_num, value_t value) {
   value_list_t vl = VALUE_LIST_INIT;
 
-  values[0].gauge = value;
-
-  vl.values = values;
+  vl.values = &value;
   vl.values_len = 1;
-  sstrncpy(vl.host, hostname_g, sizeof(vl.host));
   sstrncpy(vl.plugin, "cpufreq", sizeof(vl.plugin));
   sstrncpy(vl.type, "cpufreq", sizeof(vl.type));
-  ssnprintf(vl.type_instance, sizeof(vl.type_instance), "%i", cpu_num);
+  snprintf(vl.type_instance, sizeof(vl.type_instance), "%i", cpu_num);
 
   plugin_dispatch_values(&vl);
 }
 
 static int cpufreq_read(void) {
-  int status;
-  unsigned long long val;
-  FILE *fp;
-  char filename[256];
-  char buffer[16];
-
   for (int i = 0; i < num_cpu; i++) {
-    status = ssnprintf(filename, sizeof(filename),
-                       "/sys/devices/system/cpu/cpu%d/cpufreq/"
-                       "scaling_cur_freq",
-                       i);
-    if ((status < 1) || ((unsigned int)status >= sizeof(filename)))
-      return (-1);
-
-    if ((fp = fopen(filename, "r")) == NULL) {
-      char errbuf[1024];
-      WARNING("cpufreq: fopen (%s): %s", filename,
-              sstrerror(errno, errbuf, sizeof(errbuf)));
-      return (-1);
-    }
-
-    if (fgets(buffer, 16, fp) == NULL) {
-      char errbuf[1024];
-      WARNING("cpufreq: fgets: %s", sstrerror(errno, errbuf, sizeof(errbuf)));
-      fclose(fp);
-      return (-1);
-    }
-
-    if (fclose(fp)) {
-      char errbuf[1024];
-      WARNING("cpufreq: fclose: %s", sstrerror(errno, errbuf, sizeof(errbuf)));
+    char filename[PATH_MAX];
+    snprintf(filename, sizeof(filename),
+             "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_cur_freq", i);
+
+    value_t v;
+    if (parse_value_file(filename, &v, DS_TYPE_GAUGE) != 0) {
+      WARNING("cpufreq plugin: Reading \"%s\" failed.", filename);
+      continue;
     }
 
-    /* You're seeing correctly: The file is reporting kHz values.. */
-    val = atoll(buffer) * 1000;
+    /* convert kHz to Hz */
+    v.gauge *= 1000.0;
 
-    cpufreq_submit(i, val);
+    cpufreq_submit(i, v);
   }
 
-  return (0);
+  return 0;
 } /* int cpufreq_read */
 
 void module_register(void) {