X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcpu.c;h=975757c80785542e18727929c06e634a2f66cc4e;hb=8964908214de4ce88462b4ff687413220a576b30;hp=0fe66df10a08b8b799c9f3d504e82c132276204f;hpb=cc35e177d57bc4ee2cc57ae25f130dfc168aa61d;p=psensor.git diff --git a/src/lib/cpu.c b/src/lib/cpu.c index 0fe66df..975757c 100644 --- a/src/lib/cpu.c +++ b/src/lib/cpu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2013 jeanfi@gmail.com + * Copyright (C) 2010-2014 jeanfi@gmail.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -26,82 +26,83 @@ #include "cpu.h" -static glibtop_cpu *cpu; static float last_used; static float last_total; +static const char *PROVIDER_NAME = "gtop2"; + struct psensor *create_cpu_usage_sensor(int measures_len) { - char *label; + char *label, *id; int type; - char *id; struct psensor *psensor; - id = strdup("cpu usage"); - label = strdup("cpu usage"); - type = SENSOR_TYPE_CPU_USAGE; + id = g_strdup_printf("%s cpu usage", PROVIDER_NAME); + label = strdup(_("CPU usage")); + type = SENSOR_TYPE_GTOP | SENSOR_TYPE_CPU_USAGE; - psensor = psensor_create(id, label, strdup("CPU"), type, measures_len); + psensor = psensor_create(id, + label, + strdup(_("CPU")), + type, + measures_len); return psensor; } -struct psensor * * -cpu_psensor_list_add(struct psensor **sensors, int measures_len) +void cpu_psensor_list_append(struct psensor ***sensors, int measures_len) { struct psensor *s; s = create_cpu_usage_sensor(measures_len); - return psensor_list_add(sensors, s); + psensor_list_append(sensors, s); } static double get_usage() { - unsigned long int used = 0; - unsigned long int dt; - double cpu_rate = UNKNOWN_DBL_VALUE; - - if (!cpu) - cpu = malloc(sizeof(glibtop_cpu)); + glibtop_cpu cpu; + unsigned long int used, dt; + double cpu_rate; - glibtop_get_cpu(cpu); + glibtop_get_cpu(&cpu); - used = cpu->user + cpu->nice + cpu->sys; + used = cpu.user + cpu.nice + cpu.sys; - dt = cpu->total - last_total; + dt = cpu.total - last_total; if (dt) - cpu_rate = 100 * (used - last_used) / dt; + cpu_rate = 100.0 * (used - last_used) / dt; + else + cpu_rate = UNKNOWN_DBL_VALUE; last_used = used; - last_total = cpu->total; + last_total = cpu.total; return cpu_rate; } void cpu_usage_sensor_update(struct psensor *s) { - psensor_set_current_value(s, get_usage()); + double v; + + v = get_usage(); + + if (v != UNKNOWN_DBL_VALUE) + psensor_set_current_value(s, v); } void cpu_psensor_list_update(struct psensor **sensors) { - struct psensor **ss, *s; + struct psensor *s; - ss = sensors; - while (*ss) { - s = *ss; + while (*sensors) { + s = *sensors; - if (s->type == SENSOR_TYPE_CPU_USAGE) + if (s->type & SENSOR_TYPE_GTOP + && s->type & SENSOR_TYPE_CPU_USAGE) cpu_usage_sensor_update(s); - ss++; + sensors++; } } - -void cpu_cleanup() -{ - if (cpu) - free(cpu); -}