[hackers] [slstatus] slstatus: add cpu_iowait || Kurt Van Dijck

From: <git_AT_suckless.org>
Date: Sat, 16 Sep 2017 14:06:47 +0200 (CEST)

commit 72a5e52a35d0a133cafa1a7b5b86f4549589965d
Author: Kurt Van Dijck <dev.kurt_AT_vandijck-laurijssen.be>
AuthorDate: Thu Sep 14 23:58:38 2017 +0200
Commit: Aaron Marcher <me_AT_drkhsh.at>
CommitDate: Sat Sep 16 13:46:40 2017 +0200

    slstatus: add cpu_iowait
    
    This commit introduces the cpu_iowait item, this is the percentage
    of cpu time spent waiting on disks. High numbers typically indicate
    that your system is not responsive due to disk IO.
    This commit also avoid sleeping inside the cpu_perc and cpu_iowait
    functions: waiting in either one implies lost info for the other.
    
    Signed-off-by: Kurt Van Dijck <dev.kurt_AT_vandijck-laurijssen.be>

diff --git a/config.def.h b/config.def.h
index 0e28d1e..6370008 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -16,6 +16,7 @@ static const char unknown_str[] = "n/a";
  * battery_power battery power usage battery name
  * battery_state battery charging state battery name
  * cpu_perc cpu usage in percent NULL
+ * cpu_iowait cpu iowait in percent NULL
  * cpu_freq cpu frequency in MHz NULL
  * datetime date and time format string
  * disk_free free disk space in GB mountpoint path
diff --git a/slstatus.c b/slstatus.c
index e69423b..cbc35a4 100644
--- a/slstatus.c
+++ b/slstatus.c
_AT_@ -40,6 +40,7 @@ static const char *battery_power(const char *bat);
 static const char *battery_state(const char *bat);
 static const char *cpu_freq(void);
 static const char *cpu_perc(void);
+static const char *cpu_iowait(void);
 static const char *datetime(const char *fmt);
 static const char *disk_free(const char *mnt);
 static const char *disk_perc(const char *mnt);
_AT_@ -177,26 +178,47 @@ cpu_freq(void)
 static const char *
 cpu_perc(void)
 {
- struct timespec delay;
         int perc;
- long double a[4], b[4];
+ static long double a[7];
+ static int valid;
+ long double b[7];
 
- if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2],
- &a[3]) != 4) {
+ 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 unknown_str;
         }
+ if (!valid) {
+ valid = 1;
+ return unknown_str;
+ }
+
+ 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]));
 
- delay.tv_sec = (interval / 2) / 1000;
- delay.tv_nsec = ((interval / 2) % 1000) * 1000000;
- nanosleep(&delay, NULL);
+ return bprintf("%d", perc);
+}
 
- if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf", &b[0], &b[1], &b[2],
- &b[3]) != 4) {
+static 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 unknown_str;
+ }
+ if (!valid) {
+ valid = 1;
                 return unknown_str;
         }
 
- perc = 100 * ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) /
- ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
+ 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);
 }
Received on Sat Sep 16 2017 - 14:06:47 CEST

This archive was generated by hypermail 2.3.0 : Sat Sep 16 2017 - 14:12:37 CEST