diff -Nru zabbix-1.4.6-orig/src/libs/zbxsysinfo/linux/cpu.c zabbix-1.4.6/src/libs/zbxsysinfo/linux/cpu.c --- zabbix-1.4.6-orig/src/libs/zbxsysinfo/linux/cpu.c 2008-08-20 16:59:42.977365403 +0300 +++ zabbix-1.4.6/src/libs/zbxsysinfo/linux/cpu.c 2008-08-20 17:01:57.529362814 +0300 @@ -131,13 +131,12 @@ } - if( 0 == strcmp(type,"idle")) + if( 0 == strcmp(type,"user")) { - if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].idle1) - else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].idle5) - else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].idle15) + if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].user1) + else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].user5) + else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].user15) else return SYSINFO_RET_FAIL; - } else if( 0 == strcmp(type,"nice")) { @@ -147,13 +146,6 @@ else return SYSINFO_RET_FAIL; } - else if( 0 == strcmp(type,"user")) - { - if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].user1) - else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].user5) - else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].user15) - else return SYSINFO_RET_FAIL; - } else if( 0 == strcmp(type,"system")) { if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].system1) @@ -161,6 +153,42 @@ else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].system15) else return SYSINFO_RET_FAIL; } + else if( 0 == strcmp(type,"idle")) + { + if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].idle1) + else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].idle5) + else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].idle15) + else return SYSINFO_RET_FAIL; + + } + else if( 0 == strcmp(type,"iowait")) + { + if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].iowait1) + else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].iowait5) + else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].iowait15) + else return SYSINFO_RET_FAIL; + } + else if( 0 == strcmp(type,"irq")) + { + if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].irq1) + else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].irq5) + else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].irq15) + else return SYSINFO_RET_FAIL; + } + else if( 0 == strcmp(type,"softirq")) + { + if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].softirq1) + else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].softirq5) + else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].softirq15) + else return SYSINFO_RET_FAIL; + } + else if( 0 == strcmp(type,"steal")) + { + if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].steal1) + else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].steal5) + else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].steal15) + else return SYSINFO_RET_FAIL; + } else { return SYSINFO_RET_FAIL; diff -Nru zabbix-1.4.6-orig/src/zabbix_agent/cpustat.c zabbix-1.4.6/src/zabbix_agent/cpustat.c --- zabbix-1.4.6-orig/src/zabbix_agent/cpustat.c 2008-08-20 16:59:42.969366586 +0300 +++ zabbix-1.4.6/src/zabbix_agent/cpustat.c 2008-08-20 17:00:59.393365475 +0300 @@ -258,9 +258,13 @@ int cpuid, int *now, zbx_uint64_t *cpu_user, - zbx_uint64_t *cpu_system, zbx_uint64_t *cpu_nice, - zbx_uint64_t *cpu_idle + zbx_uint64_t *cpu_system, + zbx_uint64_t *cpu_idle, + zbx_uint64_t *cpu_iowait, + zbx_uint64_t *cpu_irq, + zbx_uint64_t *cpu_softirq, + zbx_uint64_t *cpu_steal ) { @@ -296,7 +300,7 @@ return 1; } - *cpu_user = *cpu_nice = *cpu_system = *cpu_idle = -1; + *cpu_user = *cpu_nice = *cpu_system = *cpu_idle = *cpu_iowait = *cpu_irq = *cpu_softirq = *cpu_steal = 0; zbx_snprintf(cpu_name, sizeof(cpu_name), "cpu%c ", cpuid > 0 ? '0' + (cpuid - 1) : ' '); @@ -304,7 +308,8 @@ { if(strstr(line, cpu_name) == NULL) continue; - sscanf(line, "%*s " ZBX_FS_UI64 " " ZBX_FS_UI64 " " ZBX_FS_UI64 " " ZBX_FS_UI64, cpu_user, cpu_nice, cpu_system, cpu_idle); + sscanf(line, "%*s " ZBX_FS_UI64 " " ZBX_FS_UI64 " " ZBX_FS_UI64 " " ZBX_FS_UI64 " " ZBX_FS_UI64 " " ZBX_FS_UI64 " " ZBX_FS_UI64 " " ZBX_FS_UI64, + cpu_user, cpu_nice, cpu_system, cpu_idle, cpu_iowait, cpu_irq, cpu_softirq, cpu_steal); break; } zbx_fclose(file); @@ -363,9 +368,13 @@ int cpuid, int now, zbx_uint64_t cpu_user, - zbx_uint64_t cpu_system, zbx_uint64_t cpu_nice, - zbx_uint64_t cpu_idle + zbx_uint64_t cpu_system, + zbx_uint64_t cpu_idle, + zbx_uint64_t cpu_iowait, + zbx_uint64_t cpu_irq, + zbx_uint64_t cpu_softirq, + zbx_uint64_t cpu_steal ) { register int i = 0; @@ -376,22 +385,38 @@ time15 = 0; zbx_uint64_t - idle = 0, - idle1 = 0, - idle5 = 0, - idle15 = 0, user = 0, user1 = 0, user5 = 0, user15 = 0, - system = 0, - system1 = 0, - system5 = 0, - system15= 0, nice = 0, nice1 = 0, nice5 = 0, nice15 = 0, + system = 0, + system1 = 0, + system5 = 0, + system15= 0, + idle = 0, + idle1 = 0, + idle5 = 0, + idle15 = 0, + iowait = 0, + iowait1 = 0, + iowait5 = 0, + iowait15= 0, + irq = 0, + irq1 = 0, + irq5 = 0, + irq15 = 0, + softirq = 0, + softirq1 = 0, + softirq5 = 0, + softirq15 = 0, + steal = 0, + steal1 = 0, + steal5 = 0, + steal15 = 0, all = 0, all1 = 0, all5 = 0, @@ -408,11 +433,15 @@ curr_cpu->clock[i] = now; user = curr_cpu->h_user[i] = cpu_user; - system = curr_cpu->h_system[i] = cpu_system; nice = curr_cpu->h_nice[i] = cpu_nice; + system = curr_cpu->h_system[i] = cpu_system; idle = curr_cpu->h_idle[i] = cpu_idle; + iowait = curr_cpu->h_iowait[i] = cpu_iowait; + irq = curr_cpu->h_irq[i] = cpu_irq; + softirq = curr_cpu->h_softirq[i]= cpu_softirq; + steal = curr_cpu->h_steal[i] = cpu_steal; - all = cpu_idle + cpu_user + cpu_nice + cpu_system; + all = cpu_user + cpu_nice + cpu_system + cpu_idle + cpu_iowait + cpu_irq + cpu_softirq + cpu_steal; break; } } @@ -425,22 +454,30 @@ if(curr_cpu->clock[i] == now) { - idle = curr_cpu->h_idle[i]; user = curr_cpu->h_user[i]; nice = curr_cpu->h_nice[i]; system = curr_cpu->h_system[i]; - all = idle + user + nice + system; + idle = curr_cpu->h_idle[i]; + iowait = curr_cpu->h_iowait[i]; + irq = curr_cpu->h_irq[i]; + softirq = curr_cpu->h_softirq[i]; + steal = curr_cpu->h_steal[i]; + all = user + nice + system + idle + iowait + irq + softirq + steal; } #define SAVE_CPU_CLOCK_FOR(t) \ if((curr_cpu->clock[i] >= (now - (t * 60))) && (time ## t > curr_cpu->clock[i])) \ { \ time ## t = curr_cpu->clock[i]; \ - idle ## t = curr_cpu->h_idle[i]; \ user ## t = curr_cpu->h_user[i]; \ nice ## t = curr_cpu->h_nice[i]; \ system ## t = curr_cpu->h_system[i]; \ - all ## t = idle ## t + user ## t + nice ## t + system ## t; \ + idle ## t = curr_cpu->h_idle[i]; \ + iowait ## t = curr_cpu->h_iowait[i]; \ + irq ## t = curr_cpu->h_irq[i]; \ + softirq ## t = curr_cpu->h_softirq[i]; \ + steal ## t = curr_cpu->h_steal[i]; \ + all ## t = user ## t + nice ## t + system ## t + idle ## t + iowait ## t + irq ## t + softirq ## t + steal ##t; \ } SAVE_CPU_CLOCK_FOR(1); @@ -459,10 +496,6 @@ curr_cpu->type ## time = 0.; \ } - CALC_CPU_LOAD(idle, 1); - CALC_CPU_LOAD(idle, 5); - CALC_CPU_LOAD(idle, 15); - CALC_CPU_LOAD(user, 1); CALC_CPU_LOAD(user, 5); CALC_CPU_LOAD(user, 15); @@ -474,6 +507,26 @@ CALC_CPU_LOAD(system, 1); CALC_CPU_LOAD(system, 5); CALC_CPU_LOAD(system, 15); + + CALC_CPU_LOAD(idle, 1); + CALC_CPU_LOAD(idle, 5); + CALC_CPU_LOAD(idle, 15); + + CALC_CPU_LOAD(iowait, 1); + CALC_CPU_LOAD(iowait, 5); + CALC_CPU_LOAD(iowait, 15); + + CALC_CPU_LOAD(irq, 1); + CALC_CPU_LOAD(irq, 5); + CALC_CPU_LOAD(irq, 15); + + CALC_CPU_LOAD(softirq, 1); + CALC_CPU_LOAD(softirq, 5); + CALC_CPU_LOAD(softirq, 15); + + CALC_CPU_LOAD(irq, 1); + CALC_CPU_LOAD(irq, 5); + CALC_CPU_LOAD(irq, 15); } #endif /* not _WINDOWS */ @@ -593,14 +646,14 @@ register int i = 0; int now = 0; - zbx_uint64_t cpu_user, cpu_nice, cpu_system, cpu_idle; + zbx_uint64_t cpu_user, cpu_nice, cpu_system, cpu_idle, cpu_iowait, cpu_irq, cpu_softirq, cpu_steal; for ( i = 0; i <= pcpus->count; i++ ) { - if(0 != get_cpustat(i, &now, &cpu_user, &cpu_system, &cpu_nice, &cpu_idle)) + if(0 != get_cpustat(i, &now, &cpu_user, &cpu_nice, &cpu_system, &cpu_idle, &cpu_iowait, &cpu_irq, &cpu_softirq, &cpu_steal)) continue; - apply_cpustat(pcpus, i, now, cpu_user, cpu_system, cpu_nice, cpu_idle); + apply_cpustat(pcpus, i, now, cpu_user, cpu_nice, cpu_system, cpu_idle, cpu_iowait, cpu_irq, cpu_softirq, cpu_steal); } #endif /* _WINDOWS */ diff -Nru zabbix-1.4.6-orig/src/zabbix_agent/cpustat.h zabbix-1.4.6/src/zabbix_agent/cpustat.h --- zabbix-1.4.6-orig/src/zabbix_agent/cpustat.h 2008-08-20 16:59:42.969366586 +0300 +++ zabbix-1.4.6/src/zabbix_agent/cpustat.h 2008-08-20 17:00:59.393365475 +0300 @@ -69,23 +69,39 @@ /* private */ int clock[MAX_CPU_HISTORY]; zbx_uint64_t h_user[MAX_CPU_HISTORY]; - zbx_uint64_t h_system[MAX_CPU_HISTORY]; zbx_uint64_t h_nice[MAX_CPU_HISTORY]; + zbx_uint64_t h_system[MAX_CPU_HISTORY]; zbx_uint64_t h_idle[MAX_CPU_HISTORY]; + zbx_uint64_t h_iowait[MAX_CPU_HISTORY]; + zbx_uint64_t h_irq[MAX_CPU_HISTORY]; + zbx_uint64_t h_softirq[MAX_CPU_HISTORY]; + zbx_uint64_t h_steal[MAX_CPU_HISTORY]; /* public */ - double idle1; - double idle5; - double idle15; double user1; double user5; double user15; - double system1; - double system5; - double system15; double nice1; double nice5; double nice15; + double system1; + double system5; + double system15; + double idle1; + double idle5; + double idle15; + double iowait1; + double iowait5; + double iowait15; + double irq1; + double irq5; + double irq15; + double softirq1; + double softirq5; + double softirq15; + double steal1; + double steal5; + double steal15; } ZBX_SINGLE_CPU_STAT_DATA;