X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fcpufreq.c;h=0139947e57527d76bba5353fd132c86a6c5d9f65;hp=80f586db640e55937d4de7bedf889d888c6a0e4c;hb=7111bb6df7628edce3a8e538b386fbe27633a191;hpb=79963d13c1884d1d92667cc502ad20758b084a12 diff --git a/src/cpufreq.c b/src/cpufreq.c index 80f586db..0139947e 100644 --- a/src/cpufreq.c +++ b/src/cpufreq.c @@ -25,8 +25,6 @@ #include "common.h" #include "plugin.h" -#define MODULE_NAME "cpufreq" - static int num_cpu = 0; static int cpufreq_init(void) { @@ -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) {