diff options
author | Laslo Hunhold <dev@frign.de> | 2017-09-24 15:33:01 +0200 |
---|---|---|
committer | Aaron Marcher <me@drkhsh.at> | 2017-09-24 17:20:27 +0200 |
commit | 7246dc4381c6c95454672a5c1aff65a02d6d3747 (patch) | |
tree | 2264b09abf2e57daee396b632573f4b81e47aa59 /components/cpu.c | |
parent | 61e44e894890c1521a01148fbf969cbd4dbb4cae (diff) |
Move components into dedicated subdirectory
This brings us a lot more tidiness.
Diffstat (limited to 'components/cpu.c')
-rw-r--r-- | components/cpu.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/components/cpu.c b/components/cpu.c new file mode 100644 index 0000000..4a4a80b --- /dev/null +++ b/components/cpu.c @@ -0,0 +1,63 @@ +/* See LICENSE file for copyright and license details. */ +#include <stdio.h> +#include <string.h> + +#include "../util.h" + +const char * +cpu_freq(void) +{ + int freq; + + return (pscanf("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", + "%i", &freq) == 1) ? + bprintf("%d", (freq + 500) / 1000) : NULL; +} + +const char * +cpu_perc(void) +{ + int perc; + static long double a[7]; + static int valid; + long double b[7]; + + memcpy(b, a, sizeof(b)); + if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2], + &a[3], &a[4], &a[5], &a[6]) != 7) { + return NULL; + } + if (!valid) { + valid = 1; + return NULL; + } + + perc = 100 * ((b[0]+b[1]+b[2]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[5]+a[6])) / + ((b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6])); + + return bprintf("%d", perc); +} + +const char * +cpu_iowait(void) +{ + int perc; + static int valid; + static long double a[7]; + long double b[7]; + + memcpy(b, a, sizeof(b)); + if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2], + &a[3], &a[4], &a[5], &a[6]) != 7) { + return NULL; + } + if (!valid) { + valid = 1; + return NULL; + } + + perc = 100 * ((b[4]) - (a[4])) / + ((b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6])); + + return bprintf("%d", perc); +} |