diff options
-rw-r--r-- | plugin_proc_stat.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/plugin_proc_stat.c b/plugin_proc_stat.c index 73619d1..4300a31 100644 --- a/plugin_proc_stat.c +++ b/plugin_proc_stat.c @@ -99,7 +99,7 @@ static int parse_proc_stat(void) break; if (strncmp(buffer, "cpu", 3) == 0) { - char *key[] = { "user", "nice", "system", "idle" }; + char *key[] = { "user", "nice", "system", "idle", "iow", "irq", "sirq" }; char delim[] = " \t\n"; char *cpu, *beg, *end; int i; @@ -111,7 +111,7 @@ static int parse_proc_stat(void) *end = '\0'; beg = end ? end + 1 : NULL; - for (i = 0; i < 4 && beg != NULL; i++) { + for (i = 0; i < 7 && beg != NULL; i++) { while (strchr(delim, *beg)) beg++; if ((end = strpbrk(beg, delim))) @@ -252,6 +252,7 @@ static void my_cpu(RESULT * result, RESULT * arg1, RESULT * arg2) int delay; double value; double cpu_user, cpu_nice, cpu_system, cpu_idle, cpu_total; + double cpu_iow, cpu_irq, cpu_sirq; if (parse_proc_stat() < 0) { SetResult(&result, R_STRING, ""); @@ -266,7 +267,14 @@ static void my_cpu(RESULT * result, RESULT * arg1, RESULT * arg2) cpu_system = hash_get_delta(&Stat, "cpu.system", NULL, delay); cpu_idle = hash_get_delta(&Stat, "cpu.idle", NULL, delay); - cpu_total = cpu_user + cpu_nice + cpu_system + cpu_idle; + /* new fields for kernel 2.6 */ + /* even if we dont have this param (ie kernel 2.4) */ + /* the return is 0.0 and not change the results */ + cpu_iow = hash_get_delta(&Stat, "cpu.iow", NULL, delay); + cpu_irq = hash_get_delta(&Stat, "cpu.irq", NULL, delay); + cpu_sirq = hash_get_delta(&Stat, "cpu.sirq", NULL, delay); + + cpu_total = cpu_user + cpu_nice + cpu_system + cpu_idle + cpu_iow + cpu_irq + cpu_sirq; if (strcasecmp(key, "user") == 0) value = cpu_user; @@ -276,6 +284,12 @@ static void my_cpu(RESULT * result, RESULT * arg1, RESULT * arg2) value = cpu_system; else if (strcasecmp(key, "idle") == 0) value = cpu_idle; + else if (strcasecmp(key, "iowait") == 0) + value = cpu_iow; + else if (strcasecmp(key, "irq") == 0) + value = cpu_irq; + else if (strcasecmp(key, "softirq") == 0) + value = cpu_sirq; else if (strcasecmp(key, "busy") == 0) value = cpu_total - cpu_idle; |