diff options
author | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-11-04 12:20:41 +0000 |
---|---|---|
committer | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-11-04 12:20:41 +0000 |
commit | ede3aacf530535f7663b5b8daa691f08aea176c5 (patch) | |
tree | 911a8ad30fa2126b114d3fd988b30e0a65fef63b /src/libs | |
parent | fe983de869b773807b40060e7a08e4a7259765c1 (diff) | |
download | zabbix-ede3aacf530535f7663b5b8daa691f08aea176c5.tar.gz zabbix-ede3aacf530535f7663b5b8daa691f08aea176c5.tar.xz zabbix-ede3aacf530535f7663b5b8daa691f08aea176c5.zip |
- added support proc.num for openbsd (Eugene)
git-svn-id: svn://svn.zabbix.com/trunk@2270 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/zbxsysinfo/openbsd/openbsd.c | 2 | ||||
-rw-r--r-- | src/libs/zbxsysinfo/openbsd/proc.c | 203 | ||||
-rw-r--r-- | src/libs/zbxsysinfo/openbsd/swap.c | 8 |
3 files changed, 73 insertions, 140 deletions
diff --git a/src/libs/zbxsysinfo/openbsd/openbsd.c b/src/libs/zbxsysinfo/openbsd/openbsd.c index ebfb28e7..6f39793e 100644 --- a/src/libs/zbxsysinfo/openbsd/openbsd.c +++ b/src/libs/zbxsysinfo/openbsd/openbsd.c @@ -55,7 +55,7 @@ ZBX_METRIC parameters_specific[]= {"kern[maxfiles]", 0, 0, 0, 0}, {"kern[maxproc]", 0, 0, 0, 0}, */ - {"memory", CF_USEUPARAM, OLD_MEMORY, 0, "buffers"}, + {"memory", CF_USEUPARAM, OLD_MEMORY, 0, "total"}, /* {"memory[buffers]", 0, 0, 0, 0}, {"memory[cached]", 0, 0, 0, 0}, diff --git a/src/libs/zbxsysinfo/openbsd/proc.c b/src/libs/zbxsysinfo/openbsd/proc.c index 5153605c..f5e9fce6 100644 --- a/src/libs/zbxsysinfo/openbsd/proc.c +++ b/src/libs/zbxsysinfo/openbsd/proc.c @@ -286,29 +286,21 @@ 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]; + 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; + char p_stat = 0;; + + int proc_ok = 0; + int usr_ok = 0; + int stat_ok = 0; - struct passwd *usrinfo = NULL; - long int lvalue = 0; + struct passwd *usrinfo = NULL; - FILE *f; + kvm_t *kp; + int proccount = 0; assert(result); @@ -355,15 +347,15 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL if(strcmp(procstat,"run") == 0) { - strscpy(procstat,"R"); + p_stat = SRUN; } else if(strcmp(procstat,"sleep") == 0) { - strscpy(procstat,"S"); + p_stat = SSLEEP; } else if(strcmp(procstat,"zomb") == 0) { - strscpy(procstat,"Z"); + p_stat = SZOMB; } else if(strcmp(procstat,"all") == 0) { @@ -380,124 +372,65 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL 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; - } + kp = kvm_open(NULL,NULL,NULL,O_RDONLY,NULL); + if(kp) + { + proc = kvm_getproc2(kp,KERN_PROC_ALL,0,sizeof(struct kinfo_proc2),&count); + if (proc) + { + for (i = 0; i < count; i++) + { + proc_ok = 0; + stat_ok = 0; + usr_ok = 0; - 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(procname[0] != 0) + { + if(strcmp(procname, kp_proc[i].proc.p_comm)==0) + { + proc_ok = 1; + } + } + else + { + proc_ok = 1; + } + + if(procstat[0] != 0) + { + if(p_stat == kp_proc[i].proc.p_stat + || (kp_proc[i].proc.p_stat == SDEAD && p_stat == SZOMB)) + { + stat_ok = 1; + } + } + else + { + stat_ok = 1; + } - if(proc_ok && stat_ok && usr_ok) - { - proccount++; - } + if(usrinfo != NULL) + { + if(usrinfo->pw_uid == kp_proc[i].proc.p_cred->p_ruid) + { + usr_ok = 1; + } + } + else + { + usr_ok = 1; + } - fclose(f); - } - } - closedir(dir); + if(proc_ok && stat_ok && usr_ok) + { + proccount++; + } + } + } + } result->type |= AR_DOUBLE; result->dbl = (double) proccount; return SYSINFO_RET_OK; -#else - return SYSINFO_RET_FAIL; -#endif } + diff --git a/src/libs/zbxsysinfo/openbsd/swap.c b/src/libs/zbxsysinfo/openbsd/swap.c index eccdcd39..d2c68cde 100644 --- a/src/libs/zbxsysinfo/openbsd/swap.c +++ b/src/libs/zbxsysinfo/openbsd/swap.c @@ -218,22 +218,22 @@ int get_swap_io(double *swapin, double *pgswapin, double *swapout, double *pgswa if(swapin) { /* int swapins; swapins */ - (*swapin) += (double) vm.swapins; + (*swapin) = (double) vm.swapins; } if(pgswapin) { /* int pgswapin; pages swapped in */ - (*pgswapin) += (double) vm.pgswapin; + (*pgswapin) = (double) vm.pgswapin; } if(swapout) { /* int swapouts; swapouts */ - (*swapout) += (double) vm.swapouts; + (*swapout) = (double) vm.swapouts; } if(pgswapout) { /* int pgswapout; pages swapped out */ - (*pgswapout) += (double) vm.pgswapout; + (*pgswapout) = (double) vm.pgswapout; } return SYSINFO_RET_OK; |