diff options
| author | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2007-08-16 16:02:50 +0000 |
|---|---|---|
| committer | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2007-08-16 16:02:50 +0000 |
| commit | 1309c75f431fc2e9b92a935d5480eda51ddb1620 (patch) | |
| tree | e8b732e988992a1b9752fe571f3aed3c4d6f5880 /src/libs/zbxsysinfo/linux | |
| parent | 0e3568b830a63003acba9b1f442b3fd4fbc7b1e1 (diff) | |
| download | zabbix-1309c75f431fc2e9b92a935d5480eda51ddb1620.tar.gz zabbix-1309c75f431fc2e9b92a935d5480eda51ddb1620.tar.xz zabbix-1309c75f431fc2e9b92a935d5480eda51ddb1620.zip | |
- improved per cpu 'system.cpu.util[]' for linux/solaris (Eugene)
- added support of 'system.cpu.num' (Eugene)
git-svn-id: svn://svn.zabbix.com/trunk@4600 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxsysinfo/linux')
| -rw-r--r-- | src/libs/zbxsysinfo/linux/cpu.c | 245 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/linux/linux.c | 1 |
2 files changed, 72 insertions, 174 deletions
diff --git a/src/libs/zbxsysinfo/linux/cpu.c b/src/libs/zbxsysinfo/linux/cpu.c index 3e05d401..4761369d 100644 --- a/src/libs/zbxsysinfo/linux/cpu.c +++ b/src/libs/zbxsysinfo/linux/cpu.c @@ -22,12 +22,56 @@ #include "sysinfo.h" #include "stats.h" +int SYSTEM_CPU_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + char mode[128]; + int sysinfo_name = -1; + long ncpu = 0; + + assert(result); + + init_result(result); + + if(num_param(param) > 1) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, mode, sizeof(mode)) != 0) + { + mode[0] = '\0'; + } + if(mode[0] == '\0') + { + /* default parameter */ + zbx_snprintf(mode, sizeof(mode), "online"); + } + + if(0 == strncmp(mode, "online", sizeof(mode))) + { + sysinfo_name = _SC_NPROCESSORS_ONLN; + } + else if(0 == strncmp(mode, "max", sizeof(mode))) + { + sysinfo_name = _SC_NPROCESSORS_CONF; + } + + if ( -1 == sysinfo_name || (-1 == (ncpu = sysconf(sysinfo_name)) && EINVAL == errno) ) + return SYSINFO_RET_FAIL; + + SET_UI64_RESULT(result, ncpu); + + return SYSINFO_RET_OK; +} + int SYSTEM_CPU_UTIL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { char cpuname[MAX_STRING_LEN]; char type[MAX_STRING_LEN]; char mode[MAX_STRING_LEN]; + int cpu_num = 0; + assert(result); init_result(result); @@ -39,18 +83,15 @@ int SYSTEM_CPU_UTIL(const char *cmd, const char *param, unsigned flags, AGENT_RE if(get_param(param, 1, cpuname, sizeof(cpuname)) != 0) { - return SYSINFO_RET_FAIL; + cpuname[0] = '\0'; } + if(cpuname[0] == '\0') { /* default parameter */ zbx_snprintf(cpuname, sizeof(cpuname), "all"); } - if(strncmp(cpuname, "all", sizeof(cpuname))) - { - return SYSINFO_RET_FAIL; - } - + if(get_param(param, 2, type, sizeof(type)) != 0) { type[0] = '\0'; @@ -78,34 +119,46 @@ int SYSTEM_CPU_UTIL(const char *cmd, const char *param, unsigned flags, AGENT_RE return SYSINFO_RET_OK; } + if(strcmp(cpuname,"all") == 0) + { + cpu_num = 0; + } + else + { + cpu_num = atoi(cpuname)+1; + if ((cpu_num < 1) || (cpu_num > collector->cpus.count)) + return SYSINFO_RET_FAIL; + } + + if( 0 == strcmp(type,"idle")) { - if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.idle1) - else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.idle5) - else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.idle15) + 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,"nice")) { - if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.nice1) - else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.nice5) - else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.nice15) + if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].nice1) + else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].nice5) + else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].nice15) else return SYSINFO_RET_FAIL; } else if( 0 == strcmp(type,"user")) { - if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.user1) - else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.user5) - else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.user15) + 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.system1) - else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.system5) - else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.system15) + if( 0 == strcmp(mode,"avg1")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].system1) + else if( 0 == strcmp(mode,"avg5")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].system5) + else if( 0 == strcmp(mode,"avg15")) SET_DBL_RESULT(result, collector->cpus.cpu[cpu_num].system15) else return SYSINFO_RET_FAIL; } else @@ -118,7 +171,6 @@ int SYSTEM_CPU_UTIL(const char *cmd, const char *param, unsigned flags, AGENT_RE int SYSTEM_CPU_LOAD1(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { -#ifdef HAVE_GETLOADAVG double load[3]; assert(result); @@ -134,62 +186,10 @@ int SYSTEM_CPU_LOAD1(const char *cmd, const char *param, unsigned flags, AGENT_R { return SYSINFO_RET_FAIL; } -#else -#ifdef HAVE_SYS_PSTAT_H - struct pst_dynamic dyn; - - assert(result); - - init_result(result); - - if (pstat_getdynamic(&dyn, sizeof(dyn), 1, 0) == -1) - { - return SYSINFO_RET_FAIL; - } - else - { - SET_DBL_RESULT(result, dyn.psd_avg_1_min); - return SYSINFO_RET_OK; - } -#else -#ifdef HAVE_PROC_LOADAVG - return getPROC("/proc/loadavg",1,1, flags, result); -#else -#ifdef HAVE_KSTAT_H - static kstat_ctl_t *kc = NULL; - kstat_t *ks; - kstat_named_t *kn; - - assert(result); - - init_result(result); - - if (!kc && !(kc = kstat_open())) - { - return SYSINFO_RET_FAIL; - } - if (!(ks = kstat_lookup(kc, "unix", 0, "system_misc")) || - kstat_read(kc, ks, 0) == -1 || - !(kn = kstat_data_lookup(ks,"avenrun_1min"))) - { - return SYSINFO_RET_FAIL; - } - SET_DBL_RESULT(result, ((double)kn->value.ul)/256.0); - return SYSINFO_RET_OK; -#else - assert(result); - - init_result(result); - return SYSINFO_RET_FAIL; -#endif -#endif -#endif -#endif } int SYSTEM_CPU_LOAD5(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { -#ifdef HAVE_GETLOADAVG double load[3]; assert(result); @@ -205,62 +205,10 @@ int SYSTEM_CPU_LOAD5(const char *cmd, const char *param, unsigned flags, AGENT_R { return SYSINFO_RET_FAIL; } -#else -#ifdef HAVE_SYS_PSTAT_H - struct pst_dynamic dyn; - - assert(result); - - init_result(result); - - if (pstat_getdynamic(&dyn, sizeof(dyn), 1, 0) == -1) - { - return SYSINFO_RET_FAIL; - } - else - { - SET_DBL_RESULT(result, dyn.psd_avg_5_min); - return SYSINFO_RET_OK; - } -#else -#ifdef HAVE_PROC_LOADAVG - return getPROC("/proc/loadavg",1,2, flags, result); -#else -#ifdef HAVE_KSTAT_H - static kstat_ctl_t *kc = NULL; - kstat_t *ks; - kstat_named_t *kn; - - assert(result); - - init_result(result); - - if (!kc && !(kc = kstat_open())) - { - return SYSINFO_RET_FAIL; - } - if (!(ks = kstat_lookup(kc, "unix", 0, "system_misc")) || - kstat_read(kc, ks, 0) == -1 || - !(kn = kstat_data_lookup(ks,"avenrun_5min"))) - { - return SYSINFO_RET_FAIL; - } - SET_DBL_RESULT(result, ((double)kn->value.ul)/256.0); - return SYSINFO_RET_OK; -#else - assert(result); - - init_result(result); - return SYSINFO_RET_FAIL; -#endif -#endif -#endif -#endif } int SYSTEM_CPU_LOAD15(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { -#ifdef HAVE_GETLOADAVG double load[3]; assert(result); @@ -276,57 +224,6 @@ int SYSTEM_CPU_LOAD15(const char *cmd, const char *param, unsigned flags, AGENT_ { return SYSINFO_RET_FAIL; } -#else -#ifdef HAVE_SYS_PSTAT_H - struct pst_dynamic dyn; - - assert(result); - - init_result(result); - - if (pstat_getdynamic(&dyn, sizeof(dyn), 1, 0) == -1) - { - return SYSINFO_RET_FAIL; - } - else - { - SET_DBL_RESULT(result, dyn.psd_avg_15_min); - return SYSINFO_RET_OK; - } -#else -#ifdef HAVE_PROC_LOADAVG - return getPROC("/proc/loadavg",1,3, flags, result); -#else -#ifdef HAVE_KSTAT_H - static kstat_ctl_t *kc = NULL; - kstat_t *ks; - kstat_named_t *kn; - - assert(result); - - init_result(result); - - if (!kc && !(kc = kstat_open())) - { - return SYSINFO_RET_FAIL; - } - if (!(ks = kstat_lookup(kc, "unix", 0, "system_misc")) || - kstat_read(kc, ks, 0) == -1 || - !(kn = kstat_data_lookup(ks,"avenrun_15min"))) - { - return SYSINFO_RET_FAIL; - } - SET_DBL_RESULT(result, ((double)kn->value.ul)/256.0); - return SYSINFO_RET_OK; -#else - assert(result); - - init_result(result); - return SYSINFO_RET_FAIL; -#endif -#endif -#endif -#endif } int SYSTEM_CPU_LOAD(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) diff --git a/src/libs/zbxsysinfo/linux/linux.c b/src/libs/zbxsysinfo/linux/linux.c index 52de4c91..49d064e1 100644 --- a/src/libs/zbxsysinfo/linux/linux.c +++ b/src/libs/zbxsysinfo/linux/linux.c @@ -49,6 +49,7 @@ ZBX_METRIC parameters_specific[]= {"system.cpu.intr", 0, SYSTEM_CPU_INTR, 0, 0}, {"system.cpu.util", CF_USEUPARAM, SYSTEM_CPU_UTIL, 0, "all,user,avg1"}, {"system.cpu.load", CF_USEUPARAM, SYSTEM_CPU_LOAD, 0, "all,avg1"}, + {"system.cpu.num", CF_USEUPARAM, SYSTEM_CPU_NUM, 0, "online"}, {"system.swap.size", CF_USEUPARAM, SYSTEM_SWAP_SIZE, 0, "all,free"}, {"system.swap.in", CF_USEUPARAM, SYSTEM_SWAP_IN, 0, "all"}, |
