diff options
| author | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-12-12 14:01:21 +0000 |
|---|---|---|
| committer | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-12-12 14:01:21 +0000 |
| commit | 2b0a2c57ce5d2aae2e87fb0578618a4178f8b4f3 (patch) | |
| tree | 07507efe6879f575541a802c05dd65d16c20d792 /src/libs | |
| parent | c13bcf05aac85ee5762a2a9008c1898a16e56d90 (diff) | |
| download | zabbix-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')
| -rw-r--r-- | src/libs/zbxsysinfo/osf/cpu.c | 349 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/osf/memory.c | 214 | ||||
| -rw-r--r-- | src/libs/zbxsysinfo/osf/proc.c | 189 |
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 } |
