summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxsysinfo/osf
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-12-12 14:01:21 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-12-12 14:01:21 +0000
commit2b0a2c57ce5d2aae2e87fb0578618a4178f8b4f3 (patch)
tree07507efe6879f575541a802c05dd65d16c20d792 /src/libs/zbxsysinfo/osf
parentc13bcf05aac85ee5762a2a9008c1898a16e56d90 (diff)
downloadzabbix-2b0a2c57ce5d2aae2e87fb0578618a4178f8b4f3.tar.gz
zabbix-2b0a2c57ce5d2aae2e87fb0578618a4178f8b4f3.tar.xz
zabbix-2b0a2c57ce5d2aae2e87fb0578618a4178f8b4f3.zip
- added support of system.cpu.load for Tru64 (Eugene)
- added support of system.cpu.util for Tru64 (Eugene) - added support of vm.memory.size for Tru64 (Eugene) - added support of proc.num for Tru64 (Eugene) git-svn-id: svn://svn.zabbix.com/trunk@2413 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxsysinfo/osf')
-rw-r--r--src/libs/zbxsysinfo/osf/cpu.c349
-rw-r--r--src/libs/zbxsysinfo/osf/memory.c214
-rw-r--r--src/libs/zbxsysinfo/osf/proc.c189
3 files changed, 41 insertions, 711 deletions
diff --git a/src/libs/zbxsysinfo/osf/cpu.c b/src/libs/zbxsysinfo/osf/cpu.c
index 75a8db56..7084446b 100644
--- a/src/libs/zbxsysinfo/osf/cpu.c
+++ b/src/libs/zbxsysinfo/osf/cpu.c
@@ -22,68 +22,29 @@
#include "common.h"
#include "sysinfo.h"
-static int SYSTEM_CPU_IDLE1(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
+int OLD_CPU(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
- return get_stat("cpu[idle1]", flags, result);
+ return get_stat(cmd, flags, result);
}
-static int SYSTEM_CPU_IDLE5(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
+static int SYSTEM_CPU_IDLE1(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
- return get_stat("cpu[idle5]", flags, result);
+ return EXECUTE(cmd, "iostat | tail -n 1 | awk '{printf(\"%s\",$(NF))}'", flags, result);
}
-static int SYSTEM_CPU_IDLE15(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
+static int SYSTEM_CPU_SYS1(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
- return get_stat("cpu[idle15]", flags, result);
+ return EXECUTE(cmd, "iostat | tail -n 1 | awk '{printf(\"%s\",$(NF-1))}'", flags, result);
}
static int SYSTEM_CPU_NICE1(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
- return get_stat("cpu[nice1]", flags, result);
-}
-
-static int SYSTEM_CPU_NICE5(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
- return get_stat("cpu[nice5]", flags, result);
-}
-static int SYSTEM_CPU_NICE15(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
- return get_stat("cpu[nice15]", flags, result);
+ return EXECUTE(cmd, "iostat | tail -n 1 | awk '{printf(\"%s\",$(NF-2))}'", flags, result);
}
static int SYSTEM_CPU_USER1(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
- return get_stat("cpu[user1]", flags, result);
-}
-
-static int SYSTEM_CPU_USER5(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
- return get_stat("cpu[user5]", flags, result);
-}
-
-static int SYSTEM_CPU_USER15(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
- return get_stat("cpu[user15]", flags, result);
-}
-
-static int SYSTEM_CPU_SYS1(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
- return get_stat("cpu[system1]", flags, result);
-}
-
-static int SYSTEM_CPU_SYS5(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
- return get_stat("cpu[system5]", flags, result);
-}
-
-static int SYSTEM_CPU_SYS15(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
- return get_stat("cpu[system15]", flags, result);
-}
-
-int OLD_CPU(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
- return get_stat(cmd, flags, result);
+ return EXECUTE(cmd, "iostat | tail -n 1 | awk '{printf(\"%s\",$(NF-3))}'", flags, result);
}
int SYSTEM_CPU_UTIL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
@@ -100,17 +61,9 @@ CPU_FNCLIST
CPU_FNCLIST fl[] =
{
{"idle", "avg1" , SYSTEM_CPU_IDLE1},
- {"idle", "avg5" , SYSTEM_CPU_IDLE5},
- {"idle", "avg15", SYSTEM_CPU_IDLE15},
{"nice", "avg1" , SYSTEM_CPU_NICE1},
- {"nice", "avg5" , SYSTEM_CPU_NICE5},
- {"nice", "avg15", SYSTEM_CPU_NICE15},
{"user", "avg1" , SYSTEM_CPU_USER1},
- {"user", "avg5" , SYSTEM_CPU_USER5},
- {"user", "avg15", SYSTEM_CPU_USER15},
{"system", "avg1" , SYSTEM_CPU_SYS1},
- {"system", "avg5" , SYSTEM_CPU_SYS5},
- {"system", "avg15", SYSTEM_CPU_SYS15},
{0, 0, 0}
};
@@ -176,299 +129,19 @@ CPU_FNCLIST
return SYSINFO_RET_FAIL;
}
-/* AIX CPU info */
-#ifdef HAVE_KNLIST_H
-static int getloadavg_kmem(double loadavg[], int nelem)
-{
- struct nlist nl;
- int kmem, i;
- long avenrun[3];
-
- nl.n_name = "avenrun";
- nl.n_value = 0;
-
- if(knlist(&nl, 1, sizeof(nl)))
- {
- return FAIL;
- }
- if((kmem = open("/dev/kmem", 0, 0)) <= 0)
- {
- return FAIL;
- }
-
- if(pread(kmem, avenrun, sizeof(avenrun), nl.n_value) <
- sizeof(avenrun))
- {
- return FAIL;
- }
-
- for(i=0;i<nelem;i++)
- {
- loadavg[i] = (double) avenrun[i] / 65535;
- }
- return SUCCEED;
-}
-#endif
-
int SYSTEM_CPU_LOAD1(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
-#ifdef HAVE_GETLOADAVG
- double load[3];
-
- assert(result);
-
- init_result(result);
-
- if(getloadavg(load, 3))
- {
- SET_DBL_RESULT(result, load[0]);
- return SYSINFO_RET_OK;
- }
- else
- {
- 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
-#ifdef HAVE_KNLIST_H
- double loadavg[3];
-
- assert(result);
-
- init_result(result);
-
- if(getloadavg_kmem(loadavg,3) == FAIL)
- {
- return SYSINFO_RET_FAIL;
- }
-
- SET_DBL_RESULT(result, loadavg[0]);
- return SYSINFO_RET_OK;
-#else
- assert(result);
-
- init_result(result);
- return SYSINFO_RET_FAIL;
-#endif
-#endif
-#endif
-#endif
-#endif
+ return EXECUTE(cmd, "uptime | awk '{printf(\"%s\", $(NF))}' | sed 's/[ ,]//g'", flags, result);
}
int SYSTEM_CPU_LOAD5(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
-#ifdef HAVE_GETLOADAVG
- double load[3];
-
- assert(result);
-
- init_result(result);
-
- if(getloadavg(load, 3))
- {
- SET_DBL_RESULT(result, load[1]);
- return SYSINFO_RET_OK;
- }
- else
- {
- 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
-#ifdef HAVE_KNLIST_H
- double loadavg[3];
-
- assert(result);
-
- init_result(result);
-
- if(getloadavg_kmem(loadavg,3) == FAIL)
- {
- return STSINFO_RET_FAIL;
- }
-
- SET_DBL_RESULT(result, loadavg[1]);
- return SYSINFO_RET_OK;
-#else
- assert(result);
-
- init_result(result);
- return SYSINFO_RET_FAIL;
-#endif
-#endif
-#endif
-#endif
-#endif
+ return EXECUTE(cmd, "uptime | awk '{printf(\"%s\", $(NF-1))}' | sed 's/[ ,]//g'", flags, result);
}
int SYSTEM_CPU_LOAD15(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
-#ifdef HAVE_GETLOADAVG
- double load[3];
-
- assert(result);
-
- init_result(result);
-
- if(getloadavg(load, 3))
- {
- SET_DBL_RESULT(result, load[2]);
- return SYSINFO_RET_OK;
- }
- else
- {
- 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
-#ifdef HAVE_KNLIST_H
- double loadavg[3];
-
- assert(result);
-
- init_result(result);
-
- if(getloadavg_kmem(loadavg,3) == FAIL)
- {
- return STSINFO_RET_FAIL;
- }
-
- SET_DBL_RESULT(result, loadavg[2]);
- return SYSINFO_RET_OK;
-#else
- assert(result);
-
- init_result(result);
- return SYSINFO_RET_FAIL;
-#endif
-#endif
-#endif
-#endif
-#endif
+ return EXECUTE(cmd, "uptime | awk '{printf(\"%s\", $(NF-2))}' | sed 's/[ ,]//g'", flags, result);
}
int SYSTEM_CPU_LOAD(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
diff --git a/src/libs/zbxsysinfo/osf/memory.c b/src/libs/zbxsysinfo/osf/memory.c
index 31bef3e0..d2cff851 100644
--- a/src/libs/zbxsysinfo/osf/memory.c
+++ b/src/libs/zbxsysinfo/osf/memory.c
@@ -22,219 +22,13 @@
#include "common.h"
#include "sysinfo.h"
-static int VM_MEMORY_CACHED(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
-#ifdef HAVE_PROC
-/* Get CACHED memory in bytes */
-/* return getPROC("/proc/meminfo",8,2,msg,mlen_max);*/
-/* It does not work for both 2.4 and 2.6 */
-/* return getPROC("/proc/meminfo",2,7,msg,mlen_max);*/
- FILE *f;
- char *t;
- char c[MAX_STRING_LEN];
- double res = 0;
-
- assert(result);
-
- init_result(result);
-
- f=fopen("/proc/meminfo","r");
- if(NULL == f)
- {
- return SYSINFO_RET_FAIL;
- }
- while(NULL!=fgets(c,MAX_STRING_LEN,f))
- {
- if(strncmp(c,"Cached:",7) == 0)
- {
- t=(char *)strtok(c," ");
- t=(char *)strtok(NULL," ");
- sscanf(t, "%lf", &res );
- break;
- }
- }
- fclose(f);
-
- SET_UI64_RESULT(result, res);
- return SYSINFO_RET_OK;
-#else
- assert(result);
-
- init_result(result);
-
- return SYSINFO_RET_FAIL;
-#endif
-}
-
-static int VM_MEMORY_BUFFERS(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
-#ifdef HAVE_SYSINFO_BUFFERRAM
- struct sysinfo info;
-
- assert(result);
-
- init_result(result);
-
- if( 0 == sysinfo(&info))
- {
-#ifdef HAVE_SYSINFO_MEM_UNIT
- SET_UI64_RESULT(result, info.bufferram * info.mem_unit);
-#else
- SET_UI64_RESULT(result, info.bufferram);
-#endif
- return SYSINFO_RET_OK;
- }
- else
- {
- return SYSINFO_RET_FAIL;
- }
-#else
- assert(result);
-
- init_result(result);
-
- return SYSINFO_RET_FAIL;
-#endif
-}
-
-static int VM_MEMORY_SHARED(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
-{
-#ifdef HAVE_SYSINFO_SHAREDRAM
- struct sysinfo info;
-
- assert(result);
-
- init_result(result);
-
- if( 0 == sysinfo(&info))
- {
-#ifdef HAVE_SYSINFO_MEM_UNIT
- SET_UI64_RESULT(result, info.sharedram * info.mem_unit);
-#else
- SET_UI64_RESULT(result, info.sharedram);
-#endif
- return SYSINFO_RET_OK;
- }
- else
- {
- return SYSINFO_RET_FAIL;
- }
-#elif defined(HAVE_SYS_VMMETER_VMTOTAL)
- int mib[2],len;
- struct vmtotal v;
-
- assert(result);
-
- init_result(result);
-
- len=sizeof(struct vmtotal);
- mib[0]=CTL_VM;
- mib[1]=VM_METER;
-
- sysctl(mib,2,&v,&len,NULL,0);
-
- SET_UI64_RESULT(result, v.t_armshr<<2);
- return SYSINFO_RET_OK;
-#else
- return SYSINFO_RET_FAIL;
-#endif
-}
-
static int VM_MEMORY_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
-/* Solaris */
-#ifdef HAVE_UNISTD_SYSCONF
- assert(result);
-
- init_result(result);
-
- SET_UI64_RESULT(result, sysconf(_SC_PHYS_PAGES)*sysconf(_SC_PAGESIZE));
- return SYSINFO_RET_OK;
-#elif defined(HAVE_SYS_PSTAT_H)
- struct pst_static pst;
- long page;
-
- assert(result);
-
- init_result(result);
-
- if(pstat_getstatic(&pst, sizeof(pst), (size_t)1, 0) == -1)
- {
- return SYSINFO_RET_FAIL;
- }
- else
- {
- /* Get page size */
- page = pst.page_size;
- /* Total physical memory in bytes */
- SET_UI64_RESULT(result, page*pst.physical_memory);
- return SYSINFO_RET_OK;
- }
-#elif defined(HAVE_SYSINFO_TOTALRAM)
- struct sysinfo info;
-
assert(result);
init_result(result);
-
- if( 0 == sysinfo(&info))
- {
-#ifdef HAVE_SYSINFO_MEM_UNIT
- SET_UI64_RESULT(result, info.totalram * info.mem_unit);
-#else
- SET_UI64_RESULT(result, info.totalram);
-#endif
- return SYSINFO_RET_OK;
- }
- else
- {
- return SYSINFO_RET_FAIL;
- }
-#elif defined(HAVE_SYS_VMMETER_VMTOTAL)
- int mib[2],len;
- struct vmtotal v;
-
- assert(result);
-
- init_result(result);
-
- len=sizeof(struct vmtotal);
- mib[0]=CTL_VM;
- mib[1]=VM_METER;
-
- sysctl(mib,2,&v,&len,NULL,0);
-
- SET_UI64_RESULT(result, v.t_rm<<2);
- return SYSINFO_RET_OK;
-#elif defined(HAVE_SYS_SYSCTL_H)
- static int mib[] = { CTL_HW, HW_PHYSMEM };
- size_t len;
- unsigned int memory;
- int ret;
- assert(result);
-
- init_result(result);
-
- len=sizeof(memory);
-
- if(0==sysctl(mib,2,&memory,&len,NULL,0))
- {
- SET_UI64_RESULT(result, memory);
- ret=SYSINFO_RET_OK;
- }
- else
- {
- ret=SYSINFO_RET_FAIL;
- }
- return ret;
-#else
- assert(result);
-
- init_result(result);
-
- return SYSINFO_RET_FAIL;
-#endif
+ return EXECUTE(cmd,"vmstat -s | awk 'BEGIN{pages=0}{gsub(\"[()]\",\"\");if($4==\"pagesize\")pgsize=($6);if(($2==\"inactive\"||$2==\"active\"||$2==\"wired\")&&$3==\"pages\")pages+=$1}END{printf (pages*pgsize)}'", flags, result);
}
static int VM_MEMORY_FREE(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
@@ -279,9 +73,8 @@ static int VM_MEMORY_FREE(const char *cmd, const char *param, unsigned flags, AG
assert(result);
init_result(result);
-
- return SYSINFO_RET_FAIL;
+ return EXECUTE(cmd, "vmstat -s | awk '{gsub(\"[()]\",\"\");if($4==\"pagesize\")pgsize=($6);if($2==\"free\"&&$3==\"pages\")pages=($1)}END{printf (pages*pgsize)}'", flags, result);
}
int VM_MEMORY_SIZE(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
@@ -296,10 +89,7 @@ MEM_FNCLIST
MEM_FNCLIST fl[] =
{
{"free", VM_MEMORY_FREE},
- {"shared", VM_MEMORY_SHARED},
{"total", VM_MEMORY_TOTAL},
- {"buffers", VM_MEMORY_BUFFERS},
- {"cached", VM_MEMORY_CACHED},
{0, 0}
};
char mode[MAX_STRING_LEN];
diff --git a/src/libs/zbxsysinfo/osf/proc.c b/src/libs/zbxsysinfo/osf/proc.c
index f9ec223c..da787770 100644
--- a/src/libs/zbxsysinfo/osf/proc.c
+++ b/src/libs/zbxsysinfo/osf/proc.c
@@ -287,31 +287,13 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE
int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
-#if defined(HAVE_PROC_1_STATUS)
- DIR *dir;
- struct dirent *entries;
- struct stat buf;
- char filename[MAX_STRING_LEN];
char line[MAX_STRING_LEN];
- char name1[MAX_STRING_LEN];
- char name2[MAX_STRING_LEN];
-
char procname[MAX_STRING_LEN];
char usrname[MAX_STRING_LEN];
char procstat[MAX_STRING_LEN];
- int proc_ok = 0;
- int usr_ok = 0;
- int stat_ok = 0;
-
- struct passwd *usrinfo = NULL;
- long int lvalue = 0;
-
- FILE *f;
- int proccount = 0;
-
assert(result);
init_result(result);
@@ -322,27 +304,31 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL
return SYSINFO_RET_FAIL;
}
- if(get_param(param, 1, procname, MAX_STRING_LEN) != 0)
+ if(get_param(param, 1, line, MAX_STRING_LEN) != 0)
{
- return SYSINFO_RET_FAIL;
+ line[0] = '\0';
}
+ if(line[0] == '\0')
+ {
+ procname[0] = '\0';
+ }
+ else
+ {
+ snprintf(procname,MAX_STRING_LEN-1,"if($(NF)!=\"%s\")continue;",line);
+ }
- if(get_param(param, 2, usrname, MAX_STRING_LEN) != 0)
+ if(get_param(param, 2, line, MAX_STRING_LEN) != 0)
{
- usrname[0] = 0;
- }
- else
- {
- if(usrname[0] != 0)
- {
- usrinfo = getpwnam(usrname);
- if(usrinfo == NULL)
- {
- /* incorrect user name */
- return SYSINFO_RET_FAIL;
- }
- }
+ line[0] = '\0';
}
+ if(line[0] == '\0')
+ {
+ usrname[0] = '\0';
+ }
+ else
+ {
+ snprintf(usrname,MAX_STRING_LEN-1,"if($(NF-1)!=\"%s\")continue;",line);
+ }
if(get_param(param, 3, procstat, MAX_STRING_LEN) != 0)
{
@@ -356,148 +342,29 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL
if(strcmp(procstat,"run") == 0)
{
- strscpy(procstat,"R");
+ strscpy(procstat,"if(substr($1,1,1)!=\"R\")continue;");
}
else if(strcmp(procstat,"sleep") == 0)
{
- strscpy(procstat,"S");
+ strscpy(procstat,"st=substr($1,1,1);if(st!=\"U\"&&st!=\"I\"&&st!=\"S\")continue;");
}
else if(strcmp(procstat,"zomb") == 0)
{
- strscpy(procstat,"Z");
+ strscpy(procstat,"if(substr($1,1,1)!=\"T\")continue;");
}
else if(strcmp(procstat,"all") == 0)
{
- procstat[0] = 0;
+ procstat[0] = '\0';
}
else
{
return SYSINFO_RET_FAIL;
}
-
- dir=opendir("/proc");
- if(NULL == dir)
- {
- return SYSINFO_RET_FAIL;
- }
- while((entries=readdir(dir))!=NULL)
- {
- proc_ok = 0;
- stat_ok = 0;
- usr_ok = 0;
-
-/* Self is a symbolic link. It leads to incorrect results for proc_cnt[zabbix_agentd] */
-/* Better approach: check if /proc/x/ is symbolic link */
- if(strncmp(entries->d_name,"self",MAX_STRING_LEN) == 0)
- {
- continue;
- }
-
- strscpy(filename,"/proc/");
- strncat(filename,entries->d_name,MAX_STRING_LEN);
- strncat(filename,"/status",MAX_STRING_LEN);
-
- if(stat(filename,&buf)==0)
- {
- f=fopen(filename,"r");
- if(f==NULL)
- {
- continue;
- }
-
- if(procname[0] != 0)
- {
- fgets(line,MAX_STRING_LEN,f);
- if(sscanf(line,"%s\t%s\n",name1,name2)==2)
- {
- if(strcmp(name1,"Name:") == 0)
- {
- if(strcmp(procname,name2)==0)
- {
- proc_ok = 1;
- }
- }
- }
-
- if(proc_ok == 0)
- {
- fclose(f);
- continue;
- }
- }
- else
- {
- proc_ok = 1;
- }
-
- if(procstat[0] != 0)
- {
- while(fgets(line, MAX_STRING_LEN, f) != NULL)
- {
-
- if(sscanf(line, "%s\t%s\n", name1, name2) != 2)
- {
- continue;
- }
-
- if(strcmp(name1,"State:") != 0)
- {
- continue;
- }
-
- if(strcmp(name2, procstat))
- {
- stat_ok = 1;
- break;
- }
- }
- }
- else
- {
- stat_ok = 1;
- }
-
- if(usrinfo != NULL)
- {
- while(fgets(line, MAX_STRING_LEN, f) != NULL)
- {
-
- if(sscanf(line, "%s\t%li\n", name1, &lvalue) != 2)
- {
- continue;
- }
-
- if(strcmp(name1,"Uid:") != 0)
- {
- continue;
- }
-
- if(usrinfo->pw_uid == (uid_t)(lvalue))
- {
- usr_ok = 1;
- break;
- }
- }
- }
- else
- {
- usr_ok = 1;
- }
-
- if(proc_ok && stat_ok && usr_ok)
- {
- proccount++;
- }
-
- fclose(f);
- }
- }
- closedir(dir);
+ snprintf(line, MAX_STRING_LEN-1,"ps -eo state,user,ucomm | tail -n +3 | awk 'BEGIN{count=0}{%s%s%scount++;}END{printf count}'",procstat,usrname,procname);
+
+ return EXECUTE(cmd, line, flags, result);
+
- SET_UI64_RESULT(result, proccount);
return SYSINFO_RET_OK;
-#else
- return SYSINFO_RET_FAIL;
-#endif
}