diff options
-rw-r--r-- | i3status.c | 5 | ||||
-rw-r--r-- | include/i3status.h | 2 | ||||
-rw-r--r-- | man/i3status.man | 15 | ||||
-rw-r--r-- | src/print_cpu_usage.c | 14 |
4 files changed, 32 insertions, 4 deletions
@@ -412,7 +412,10 @@ int main(int argc, char *argv[]) { cfg_opt_t usage_opts[] = { CFG_STR("format", "%usage", CFGF_NONE), + CFG_FLOAT("max_threshold", 95, CFGF_NONE), + CFG_FLOAT("degraded_threshold", 90, CFGF_NONE), CFG_CUSTOM_ALIGN_OPT, + CFG_CUSTOM_COLOR_OPTS, CFG_CUSTOM_MIN_WIDTH_OPT, CFG_CUSTOM_SEPARATOR_OPT, CFG_CUSTOM_SEP_BLOCK_WIDTH_OPT, @@ -725,7 +728,7 @@ int main(int argc, char *argv[]) { CASE_SEC("cpu_usage") { SEC_OPEN_MAP("cpu_usage"); - print_cpu_usage(json_gen, buffer, cfg_getstr(sec, "format")); + print_cpu_usage(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getfloat(sec, "max_threshold"), cfg_getfloat(sec, "degraded_threshold")); SEC_CLOSE_MAP; } } diff --git a/include/i3status.h b/include/i3status.h index 7e756e2..b4cf83f 100644 --- a/include/i3status.h +++ b/include/i3status.h @@ -216,7 +216,7 @@ void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, void print_run_watch(yajl_gen json_gen, char *buffer, const char *title, const char *pidfile, const char *format, const char *format_down); void print_path_exists(yajl_gen json_gen, char *buffer, const char *title, const char *path, const char *format, const char *format_down); void print_cpu_temperature_info(yajl_gen json_gen, char *buffer, int zone, const char *path, const char *format, int); -void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format); +void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format, const float max_threshold, const float degraded_threshold); void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down); void print_load(yajl_gen json_gen, char *buffer, const char *format, const float max_threshold); void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *fmt_muted, const char *device, const char *mixer, int mixer_idx); diff --git a/man/i3status.man b/man/i3status.man index 26ea831..32bc6e6 100644 --- a/man/i3status.man +++ b/man/i3status.man @@ -381,12 +381,25 @@ specified thermal zone is getting too hot. Defaults to 75 degrees C. === CPU Usage -Gets the percentual CPU usage from +/proc/stat+ (Linux) or +sysctl(3)+ (FreeBSD/OpenBSD). +Gets the percentual CPU usage from +/proc/stat+ (Linux) or +sysctl(3)+ +(FreeBSD/OpenBSD). + +It is possible to define a max_threshold that will color the load +value red in case the CPU average over the last interval is getting +higher than the configured threshold. Defaults to 95. + +It is possible to define a degraded_threshold that will color the load +value yellow in case the CPU average over the last interval is getting +higher than the configured threshold. Defaults to 90. *Example order*: +cpu_usage+ *Example format*: +%usage+ +*Example max_threshold*: +75+ + +*Example degraded_threshold*: +25+ + === Load Gets the system load (number of processes waiting for CPU time in the last diff --git a/src/print_cpu_usage.c b/src/print_cpu_usage.c index adf2d04..1753cf5 100644 --- a/src/print_cpu_usage.c +++ b/src/print_cpu_usage.c @@ -41,11 +41,12 @@ static int prev_idle = 0; * percentage. * */ -void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format) { +void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format, const float max_threshold, const float degraded_threshold) { const char *walk; char *outwalk = buffer; int curr_user = 0, curr_nice = 0, curr_system = 0, curr_idle = 0, curr_total; int diff_idle, diff_total, diff_usage; + bool colorful_output = false; #if defined(LINUX) static char statpath[512]; @@ -101,10 +102,21 @@ void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format) { continue; } + if (diff_usage >= max_threshold) { + START_COLOR("color_bad"); + colorful_output = true; + } else if (diff_usage >= degraded_threshold) { + START_COLOR("color_degraded"); + colorful_output = true; + } + if (BEGINS_WITH(walk + 1, "usage")) { outwalk += sprintf(outwalk, "%02d%s", diff_usage, pct_mark); walk += strlen("usage"); } + + if (colorful_output) + END_COLOR; } OUTPUT_FULL_TEXT(buffer); |