X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fprint_load.c;h=7ba4ae1a9534428cf3181f592b776130fe0b788f;hb=d74e904bf4bdd7f1d767a8db09987b90de809579;hp=52814729b020985a4fd771aa30c4e6f970f1f5cd;hpb=0eeded8bc013857a5e8a2efbc20002a22502897e;p=i3%2Fi3status diff --git a/src/print_load.c b/src/print_load.c index 5281472..7ba4ae1 100644 --- a/src/print_load.c +++ b/src/print_load.c @@ -1,4 +1,4 @@ -// vim:ts=8:expandtab +// vim:ts=4:sw=4:expandtab #include "i3status.h" #include #include @@ -6,45 +6,52 @@ #include #include -void print_load(yajl_gen json_gen, char *buffer, const char *format) { - char *outwalk = buffer; - /* Get load */ +void print_load(yajl_gen json_gen, char *buffer, const char *format, const float max_threshold) { + char *outwalk = buffer; +/* Get load */ #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(linux) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__) || defined(sun) || defined(__DragonFly__) - double loadavg[3]; - const char *walk; - - if (getloadavg(loadavg, 3) == -1) - goto error; - - for (walk = format; *walk != '\0'; walk++) { - if (*walk != '%') { - *(outwalk++) = *walk; - continue; - } - - if (BEGINS_WITH(walk+1, "1min")) { - outwalk += sprintf(outwalk, "%1.2f", loadavg[0]); - walk += strlen("1min"); - } - - if (BEGINS_WITH(walk+1, "5min")) { - outwalk += sprintf(outwalk, "%1.2f", loadavg[1]); - walk += strlen("5min"); - } - - if (BEGINS_WITH(walk+1, "15min")) { - outwalk += sprintf(outwalk, "%1.2f", loadavg[2]); - walk += strlen("15min"); - } + double loadavg[3]; + const char *walk; + bool colorful_output = false; + + if (getloadavg(loadavg, 3) == -1) + goto error; + + for (walk = format; *walk != '\0'; walk++) { + if (*walk != '%') { + *(outwalk++) = *walk; + continue; + } + if (loadavg[0] >= max_threshold) { + START_COLOR("color_bad"); + colorful_output = true; + } + + if (BEGINS_WITH(walk + 1, "1min")) { + outwalk += sprintf(outwalk, "%1.2f", loadavg[0]); + walk += strlen("1min"); + } + + if (BEGINS_WITH(walk + 1, "5min")) { + outwalk += sprintf(outwalk, "%1.2f", loadavg[1]); + walk += strlen("5min"); + } + + if (BEGINS_WITH(walk + 1, "15min")) { + outwalk += sprintf(outwalk, "%1.2f", loadavg[2]); + walk += strlen("15min"); } + if (colorful_output) + END_COLOR; + } - *outwalk = '\0'; - OUTPUT_FULL_TEXT(buffer); + *outwalk = '\0'; + OUTPUT_FULL_TEXT(buffer); - return; + return; error: #endif - OUTPUT_FULL_TEXT("cant read load"); - (void)fputs("i3status: Cannot read system load using getloadavg()\n", stderr); + OUTPUT_FULL_TEXT("cant read load"); + (void)fputs("i3status: Cannot read system load using getloadavg()\n", stderr); }