int SYSTEM_CPU_LOAD(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { #if defined(HAVE_GETLOADAVG) double load[3]; #elif defined(HAVE_KSTAT_H) char *key; int value; #endif char tmp[MAX_STRING_LEN]; if (num_param(param) > 2) return SYSINFO_RET_FAIL; if (0 != get_param(param, 1, tmp, sizeof(tmp))) return SYSINFO_RET_FAIL; if ('\0' != *tmp && 0 != strcmp(tmp, "all")) /* default parameter */ return SYSINFO_RET_FAIL; if (0 != get_param(param, 2, tmp, sizeof(tmp))) *tmp = '\0'; #if defined(HAVE_GETLOADAVG) if (-1 == getloadavg(load, 3)) return SYSINFO_RET_FAIL; if ('\0' == *tmp || 0 == strcmp(tmp, "avg1")) /* default parameter */ { SET_DBL_RESULT(result, load[0]); } else if ('\0' == *tmp || 0 == strcmp(tmp, "avg5")) { SET_DBL_RESULT(result, load[1]); } else if ('\0' == *tmp || 0 == strcmp(tmp, "avg15")) { SET_DBL_RESULT(result, load[2]); } else return SYSINFO_RET_FAIL; #elif defined(HAVE_KSTAT_H) if ('\0' == *tmp || 0 == strcmp(tmp, "avg1")) /* default parameter */ key = "avenrun_1min"; else if ('\0' == *tmp || 0 == strcmp(tmp, "avg5")) key = "avenrun_5min"; else if ('\0' == *tmp || 0 == strcmp(tmp, "avg15")) key = "avenrun_15min"; else return SYSINFO_RET_FAIL; if (FAIL == get_kstat_system_misc(key, &value)) return SYSINFO_RET_FAIL; SET_DBL_RESULT(result, (double)value/FSCALE); #else return SYSINFO_RET_FAIL; #endif return SYSINFO_RET_OK; }
int SYSTEM_CPU_LOAD(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { char tmp[16]; double value; int per_cpu = 1, cpu_num; #if defined(HAVE_GETLOADAVG) int mode; double load[ZBX_AVG_COUNT]; #elif defined(HAVE_KSTAT_H) char *key; int load; #endif if (2 < num_param(param)) return SYSINFO_RET_FAIL; if (0 != get_param(param, 1, tmp, sizeof(tmp)) || '\0' == *tmp || 0 == strcmp(tmp, "all")) per_cpu = 0; else if (0 != strcmp(tmp, "percpu")) return SYSINFO_RET_FAIL; #if defined(HAVE_GETLOADAVG) if (0 != get_param(param, 2, tmp, sizeof(tmp)) || '\0' == *tmp || 0 == strcmp(tmp, "avg1")) mode = ZBX_AVG1; else if (0 == strcmp(tmp, "avg5")) mode = ZBX_AVG5; else if (0 == strcmp(tmp, "avg15")) mode = ZBX_AVG15; else return SYSINFO_RET_FAIL; if (mode >= getloadavg(load, 3)) return SYSINFO_RET_FAIL; value = load[mode]; #elif defined(HAVE_KSTAT_H) if (0 != get_param(param, 2, tmp, sizeof(tmp)) || '\0' == *tmp || 0 == strcmp(tmp, "avg1")) key = "avenrun_1min"; else if (0 == strcmp(tmp, "avg5")) key = "avenrun_5min"; else if (0 == strcmp(tmp, "avg15")) key = "avenrun_15min"; else return SYSINFO_RET_FAIL; if (FAIL == get_kstat_system_misc(key, &load)) return SYSINFO_RET_FAIL; value = (double)load / FSCALE; #else return SYSINFO_RET_FAIL; #endif if (1 == per_cpu) { if (0 >= (cpu_num = sysconf(_SC_NPROCESSORS_ONLN))) return SYSINFO_RET_FAIL; value /= cpu_num; } SET_DBL_RESULT(result, value); return SYSINFO_RET_OK; }
int SYSTEM_CPU_LOAD(AGENT_REQUEST *request, AGENT_RESULT *result) { char *tmp; double value; int per_cpu = 1, cpu_num; #if defined(HAVE_GETLOADAVG) int mode; double load[ZBX_AVG_COUNT]; #elif defined(HAVE_KSTAT_H) char *key, *error; int load; #endif if (2 < request->nparam) { SET_MSG_RESULT(result, zbx_strdup(NULL, "Too many parameters.")); return SYSINFO_RET_FAIL; } tmp = get_rparam(request, 0); if (NULL == tmp || '\0' == *tmp || 0 == strcmp(tmp, "all")) per_cpu = 0; else if (0 != strcmp(tmp, "percpu")) { SET_MSG_RESULT(result, zbx_strdup(NULL, "Invalid first parameter.")); return SYSINFO_RET_FAIL; } #if defined(HAVE_GETLOADAVG) tmp = get_rparam(request, 1); if (NULL == tmp || '\0' == *tmp || 0 == strcmp(tmp, "avg1")) mode = ZBX_AVG1; else if (0 == strcmp(tmp, "avg5")) mode = ZBX_AVG5; else if (0 == strcmp(tmp, "avg15")) mode = ZBX_AVG15; else { SET_MSG_RESULT(result, zbx_strdup(NULL, "Invalid second parameter.")); return SYSINFO_RET_FAIL; } if (mode >= getloadavg(load, 3)) { SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot obtain load average: %s", zbx_strerror(errno))); return SYSINFO_RET_FAIL; } value = load[mode]; #elif defined(HAVE_KSTAT_H) tmp = get_rparam(request, 1); if (NULL == tmp || '\0' == *tmp || 0 == strcmp(tmp, "avg1")) key = "avenrun_1min"; else if (0 == strcmp(tmp, "avg5")) key = "avenrun_5min"; else if (0 == strcmp(tmp, "avg15")) key = "avenrun_15min"; else { SET_MSG_RESULT(result, zbx_strdup(NULL, "Invalid second parameter.")); return SYSINFO_RET_FAIL; } if (FAIL == get_kstat_system_misc(key, &load, &error)) { SET_MSG_RESULT(result, error); return SYSINFO_RET_FAIL; } value = (double)load / FSCALE; #else SET_MSG_RESULT(result, zbx_strdup(NULL, "Agent was compiled without support for CPU load information.")); return SYSINFO_RET_FAIL; #endif if (1 == per_cpu) { if (0 >= (cpu_num = sysconf(_SC_NPROCESSORS_ONLN))) { SET_MSG_RESULT(result, zbx_strdup(NULL, "Cannot obtain number of CPUs.")); return SYSINFO_RET_FAIL; } value /= cpu_num; } SET_DBL_RESULT(result, value); return SYSINFO_RET_OK; }