diff options
-rw-r--r-- | src/libs/zbxsysinfo/Makefile.am | 2 | ||||
-rw-r--r-- | src/libs/zbxsysinfo/diskio.c | 2030 | ||||
-rw-r--r-- | src/libs/zbxsysinfo/memory.c | 430 | ||||
-rw-r--r-- | src/libs/zbxsysinfo/sysinfo.c | 153 |
4 files changed, 431 insertions, 2184 deletions
diff --git a/src/libs/zbxsysinfo/Makefile.am b/src/libs/zbxsysinfo/Makefile.am index e38edf99..67a64e14 100644 --- a/src/libs/zbxsysinfo/Makefile.am +++ b/src/libs/zbxsysinfo/Makefile.am @@ -1,4 +1,4 @@ SUBDIRS=. lib_LIBRARIES=libzbxsysinfo.a -libzbxsysinfo_a_SOURCES=cpu.c diskio.c diskspace.c file.c inodes.c sensors.c swap.c uptime.c sysinfo.c +libzbxsysinfo_a_SOURCES=cpu.c diskio.c diskspace.c file.c inodes.c memory.c sensors.c swap.c uptime.c sysinfo.c libzbxsysinfo_a_LIBADD = ../zbxcrypto/libzbxcrypto.a diff --git a/src/libs/zbxsysinfo/diskio.c b/src/libs/zbxsysinfo/diskio.c index e2b929e1..a030d6f9 100644 --- a/src/libs/zbxsysinfo/diskio.c +++ b/src/libs/zbxsysinfo/diskio.c @@ -135,760 +135,6 @@ #include "common.h" #include "sysinfo.h" -#include "md5.h" - -void forward_request(char *proxy,char *command,int port,char *value); - -/*COMMAND commands[AGENT_MAX_USER_COMMANDS]=*/ -COMMAND *commands=NULL; - -COMMAND agent_commands[]= -/* KEY FUNCTION (if double) FUNCTION (if string) PARAM*/ - { - {"kern[maxfiles]" ,KERNEL_MAXFILES, 0, 0}, - {"kern[maxproc]" ,KERNEL_MAXPROC, 0, 0}, - - {"proc_cnt[*]" ,PROCCNT, 0, "inetd"}, - - {"memory[total]" ,TOTALMEM, 0, 0}, - {"memory[shared]" ,SHAREDMEM, 0, 0}, - {"memory[buffers]" ,BUFFERSMEM, 0, 0}, - {"memory[cached]" ,CACHEDMEM, 0, 0}, - {"memory[free]" ,FREEMEM, 0, 0}, - - {"version[zabbix_agent]",0, STRVERSION, 0}, - - {"diskfree[*]" ,DISKFREE, 0, "/"}, - {"disktotal[*]" ,DISKTOTAL, 0, "/"}, - {"diskused[*]" ,DISKUSED, 0, "/"}, - - {"diskfree_perc[*]" ,DISKFREE_PERC, 0, "/"}, - {"diskused_perc[*]" ,DISKUSED_PERC, 0, "/"}, - - {"inodefree[*]" ,INODEFREE, 0, "/"}, - - {"inodefree_perc[*]" ,INODEFREE_PERC, 0, "/"}, - - {"inodetotal[*]" ,INODETOTAL, 0, "/"}, - - {"cksum[*]" ,CKSUM, 0, "/etc/services"}, - - {"md5sum[*]" ,0, MD5SUM, "/etc/services"}, - - {"filesize[*]" ,FILESIZE, 0, "/etc/passwd"}, - {"file[*]" ,ISFILE, 0, "/etc/passwd"}, - - {"cpu[idle1]" ,CPUIDLE1, 0, 0}, - {"cpu[idle5]" ,CPUIDLE5, 0, 0}, - {"cpu[idle15]" ,CPUIDLE15, 0, 0}, - - {"cpu[nice1]" ,CPUNICE1, 0, 0}, - {"cpu[nice5]" ,CPUNICE5, 0, 0}, - {"cpu[nice15]" ,CPUNICE15, 0, 0}, - - {"cpu[user1]" ,CPUUSER1, 0, 0}, - {"cpu[user5]" ,CPUUSER5, 0, 0}, - {"cpu[user15]" ,CPUUSER15, 0, 0}, - - {"cpu[system1]" ,CPUSYSTEM1, 0, 0}, - {"cpu[system5]" ,CPUSYSTEM5, 0, 0}, - {"cpu[system15]" ,CPUSYSTEM15, 0, 0}, - - {"netloadin1[*]" ,NETLOADIN1, 0, "lo"}, - {"netloadin5[*]" ,NETLOADIN5, 0, "lo"}, - {"netloadin15[*]" ,NETLOADIN15, 0, "lo"}, - - {"netloadout1[*]" ,NETLOADOUT1, 0, "lo"}, - {"netloadout5[*]" ,NETLOADOUT5, 0, "lo"}, - {"netloadout15[*]" ,NETLOADOUT15, 0, "lo"}, - - {"disk_read_ops1[*]" ,DISKREADOPS1, 0, "hda"}, - {"disk_read_ops5[*]" ,DISKREADOPS5, 0, "hda"}, - {"disk_read_ops15[*]" ,DISKREADOPS15, 0, "hda"}, - - {"disk_read_blks1[*]" ,DISKREADBLKS1, 0, "hda"}, - {"disk_read_blks5[*]" ,DISKREADBLKS5, 0, "hda"}, - {"disk_read_blks15[*]" ,DISKREADBLKS15, 0, "hda"}, - - {"disk_write_ops1[*]" ,DISKWRITEOPS1, 0, "hda"}, - {"disk_write_ops5[*]" ,DISKWRITEOPS5, 0, "hda"}, - {"disk_write_ops15[*]" ,DISKWRITEOPS15, 0, "hda"}, - - {"disk_write_blks1[*]" ,DISKWRITEBLKS1, 0, "hda"}, - {"disk_write_blks5[*]" ,DISKWRITEBLKS5, 0, "hda"}, - {"disk_write_blks15[*]" ,DISKWRITEBLKS15, 0, "hda"}, - - {"sensor[temp1]" ,SENSOR_TEMP1, 0, 0}, - {"sensor[temp2]" ,SENSOR_TEMP2, 0, 0}, - {"sensor[temp3]" ,SENSOR_TEMP3, 0, 0}, - - {"swap[free]" ,SWAPFREE, 0, 0}, - {"swap[total]" ,SWAPTOTAL, 0, 0}, - -/**************************************** - All these perameters require more than 1 second to retrieve. - - {"swap[in]" ,EXECUTE, 0, "vmstat -n 1 2|tail -1|cut -b37-40"}, - {"swap[out]" ,EXECUTE, 0, "vmstat -n 1 2|tail -1|cut -b41-44"}, - - {"system[interrupts]" ,EXECUTE, 0, "vmstat -n 1 2|tail -1|cut -b57-61"}, - {"system[switches]" ,EXECUTE, 0, "vmstat -n 1 2|tail -1|cut -b62-67"}, -***************************************/ - - {"io[disk_io]" ,DISK_IO, 0, 0}, - {"io[disk_rio]" ,DISK_RIO, 0, 0}, - {"io[disk_wio]" ,DISK_WIO, 0, 0}, - {"io[disk_rblk]" ,DISK_RBLK, 0, 0}, - {"io[disk_wblk]" ,DISK_WBLK, 0, 0}, - - {"system[procload]" ,PROCLOAD, 0, 0}, - {"system[procload5]" ,PROCLOAD5, 0, 0}, - {"system[procload15]" ,PROCLOAD15, 0, 0}, - {"system[proccount]" ,PROCCOUNT, 0, 0}, -#ifdef HAVE_PROC_LOADAVG - {"system[procrunning]" ,EXECUTE, 0, "cat /proc/loadavg|cut -f1 -d'/'|cut -f4 -d' '"}, -#endif - {"system[hostname]" ,0, EXECUTE_STR, "hostname"}, - {"system[uname]" ,0, EXECUTE_STR, "uname -a"}, - {"system[uptime]" ,UPTIME, 0, 0}, - {"system[users]" ,EXECUTE, 0,"who|wc -l"}, - - {"ping" ,PING, 0, 0}, -/* {"tcp_count" ,EXECUTE, 0, "netstat -tn|grep EST|wc -l"}, */ - - {"net[listen_23]" ,TCP_LISTEN, 0, "0017"}, - {"net[listen_80]" ,TCP_LISTEN, 0, "0050"}, - - {"check_port[*]" ,CHECK_PORT, 0, "80"}, - - {"check_service[*]" ,CHECK_SERVICE, 0, "ssh,127.0.0.1,22"}, - {"check_service_perf[*]",CHECK_SERVICE_PERF, 0, "ssh,127.0.0.1,22"}, - - {0} - }; - -void add_metric(char *key, int (*function)(),int (*function_str)(),char *parameter ) -{ - - int i; - - for(i=0;;i++) - { - if(commands[i].key == NULL) - { - - commands[i].key=strdup(key); - if(parameter == NULL) - { - commands[i].parameter=NULL; - } - else - { - commands[i].parameter=strdup(parameter); - } - commands[i].function=function; - commands[i].function_str=function_str; - - commands=realloc(commands,(i+2)*sizeof(COMMAND)); - commands[i+1].key=NULL; - break; - } - } -} - -void add_user_parameter(char *key,char *command) -{ - int i; - - for(i=0;;i++) - { - if( commands[i].key == 0) - { - commands[i].key=strdup(key); - commands[i].function=0; - commands[i].function_str=&EXECUTE_STR; - commands[i].parameter=strdup(command); - - commands=realloc(commands,(i+2)*sizeof(COMMAND)); - commands[i+1].key=NULL; - - break; - } - /* Replace existing parameters */ - if(strcmp(commands[i].key, key) == 0) - { - free(commands[i].key); - if(commands[i].parameter!=NULL) free(commands[i].parameter); - - commands[i].key=strdup(key); - commands[i].function=0; - commands[i].function_str=&EXECUTE_STR; - commands[i].parameter=strdup(command); - - break; - } - } -} - -void init_metrics() -{ - int i; - - commands=malloc(sizeof(COMMAND)); - commands[0].key=NULL; - - for(i=0;agent_commands[i].key!=0;i++) - { - add_metric(agent_commands[i].key, agent_commands[i].function, agent_commands[i].function_str, agent_commands[i].parameter); - } -} - -void escape_string(char *from, char *to, int maxlen) -{ - int i,ptr; - char *f; - - ptr=0; - f=(char *)strdup(from); - for(i=0;f[i]!=0;i++) - { - if( (f[i]=='\'') || (f[i]=='\\')) - { - if(ptr>maxlen-1) break; - to[ptr]='\\'; - if(ptr+1>maxlen-1) break; - to[ptr+1]=f[i]; - ptr+=2; - } - else - { - if(ptr>maxlen-1) break; - to[ptr]=f[i]; - ptr++; - } - } - free(f); - - to[ptr]=0; - to[maxlen-1]=0; -} - - -void test_parameters(void) -{ - int i; - - char c[MAX_STRING_LEN]; - - i=0; - while(0 != commands[i].key) - { - process(commands[i].key,c); - printf("Key: [%s]\tResult: [%s]\n",commands[i].key,c); - fflush(stdout); - i++; - } -} - -/* This messy function must be rewritten! - */ -void process(char *command,char *value) -{ - char *p; - double result=0; - int i; - char *n,*l,*r; - int (*function)() = NULL; - int (*function_str)() = NULL; - char *parameter = NULL; - char *cmd_line_param = NULL; - char key[MAX_STRING_LEN]; - char param[1024]; - char cmd[1024]; - char *res2 = NULL; - int ret_str=0; - double value_double; - - for( p=command+strlen(command)-1; p>command && ( *p=='\r' || *p =='\n' || *p == ' ' ); --p ); - - if( (p[1]=='\r') || (p[1]=='\n') ||(p[1]==' ')) - { - p[1]=0; - } - - for(i=0;;i++) - { - /* End of array? */ - if( commands[i].key == 0) - { - function=0; - break; - } - - cmd_line_param = NULL; - strcpy(key, commands[i].key); - - if( (n = strstr(key,"[*]")) != NULL) - { - n[0]=0; - - l=strstr(command,"["); - r=strstr(command,"]"); - - if( (l==NULL)||(r==NULL) ) - { - continue; - } - - strncpy( param,l+1, r-l-1); - param[r-l-1]=0; - - strncpy( cmd, command, l-command); - cmd[l-command]=0; - - if( strcmp(key, cmd) == 0) - { - function=commands[i].function; - if(function==0) - { - function_str=commands[i].function_str; - /* Command returns string, not double */ - ret_str=1; - } -#ifdef TEST_PARAMETERS - parameter=commands[i].parameter; -#else - cmd_line_param = param; - parameter=param; -#endif - break; - } - } - else - { - if( strcmp(key,command) == 0) - { - function=commands[i].function; - if(function==0) - { - function_str=commands[i].function_str; - ret_str=1; - } - parameter=commands[i].parameter; - break; - } - } - } - - if(ret_str == 0) - { - if(function != 0) - { - if(SYSINFO_RET_FAIL == function(command,parameter,&value_double)) - { - result = NOTSUPPORTED; - } - } - else - { - result = NOTSUPPORTED; - } - } - else - { - /* Special processing for EXECUTE_STR, it has more parameters */ - if(function_str == EXECUTE_STR) - { - i=function_str(command,commands[i].parameter,cmd_line_param,&res2); - } - else - { - i=function_str(command,parameter,&res2); - } - - if(i==SYSINFO_RET_FAIL) - { - result = NOTSUPPORTED; - } -/* (int) to avoid compiler's warning */ - else if(i==SYSINFO_RET_TIMEOUT) - { - result = TIMEOUT_ERROR; - } - } - - if(result==NOTSUPPORTED) - { -/* New protocol */ -/* sprintf(value,"%f",result);*/ - snprintf(value,MAX_STRING_LEN-1,"%s","ZBX_NOTSUPPORTED\n"); - } - else if(result==TIMEOUT_ERROR) - { - snprintf(value,MAX_STRING_LEN-1,"%s","ZBX_ERROR\n"); - } - else - { - if(ret_str==0) - { - snprintf(value,MAX_STRING_LEN-1,"%f",value_double); - } - else - { - snprintf(value,MAX_STRING_LEN-1,"%s\n",res2); - free(res2); - } - } - -} - -/* MD5 sum calculation */ - -int MD5SUM(const char *cmd, const char *filename, char **value) -{ - int fd; - int i,nr; - struct stat buf_stat; - - md5_state_t state; - u_char buf[16 * 1024]; - - unsigned char hashText[MD5_DIGEST_SIZE*2+1]; - unsigned char hash[MD5_DIGEST_SIZE]; - - if(stat(filename,&buf_stat) != 0) - { - /* Cannot stat() file */ - return SYSINFO_RET_FAIL; - } - - if(buf_stat.st_size > 64*1024*1024) - { - /* Will not calculate MD5 for files larger than 64M */ - return SYSINFO_RET_FAIL; - } - - fd=open(filename,O_RDONLY); - if(fd == -1) - { - return SYSINFO_RET_FAIL; - } - - md5_init(&state); - while ((nr = read(fd, buf, sizeof(buf))) > 0) - { - md5_append(&state,(const md5_byte_t *)buf,nr); - } - md5_finish(&state,(md5_byte_t *)hash); - - close(fd); - -/* Convert MD5 hash to text form */ - for(i=0;i<MD5_DIGEST_SIZE;i++) - sprintf(&hashText[i<<1],"%02x",hash[i]); - - *value=strdup(hashText); - - return SYSINFO_RET_OK; -} - -/* Code for cksum is based on code from cksum.c */ - -static u_long crctab[] = { - 0x0, - 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, - 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, - 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, - 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, - 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, - 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, - 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, - 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, - 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, - 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, - 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, - 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, - 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, - 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, - 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, - 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, - 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, - 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, - 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, - 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, - 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, - 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, - 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, - 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, - 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, - 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, - 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, - 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, - 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, - 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, - 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, - 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, - 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, - 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, - 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, - 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, - 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, - 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, - 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, - 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, - 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, - 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, - 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, - 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, - 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, - 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, - 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 -}; - -/* - * Compute a POSIX 1003.2 checksum. These routines have been broken out so - * that other programs can use them. The first routine, crc(), takes a file - * descriptor to read from and locations to store the crc and the number of - * bytes read. The second routine, crc_buf(), takes a buffer and a length, - * and a location to store the crc. Both routines return 0 on success and 1 - * on failure. Errno is set on failure. - */ - -int CKSUM(const char *cmd, const char *filename,double *value) -{ - register u_char *p; - register int nr; -/* AV Crashed under 64 platforms. Must be 32 bit! */ -/* register u_long crc, len;*/ - register uint32_t crc, len; - u_char buf[16 * 1024]; - u_long cval, clen; - int fd; - - fd=open(filename,O_RDONLY); - if(fd == -1) - { - return SYSINFO_RET_FAIL; - } - -#define COMPUTE(var, ch) (var) = (var) << 8 ^ crctab[(var) >> 24 ^ (ch)] - - crc = len = 0; - while ((nr = read(fd, buf, sizeof(buf))) > 0) - { - for( len += nr, p = buf; nr--; ++p) - { - COMPUTE(crc, *p); - } - } - close(fd); - - if (nr < 0) - { - return SYSINFO_RET_FAIL; - } - - clen = len; - - /* Include the length of the file. */ - for (; len != 0; len >>= 8) { - COMPUTE(crc, len & 0xff); - } - - cval = ~crc; - - *value=(double)cval; - - return SYSINFO_RET_OK; -} - -int -crc_buf2(p, clen, cval) - register u_char *p; - u_long clen; - u_long *cval; -{ - register u_long crc, len; - - crc = 0; - for (len = clen; len--; ++p) - COMPUTE(crc, *p); - - /* Include the length of the file. */ - for (len = clen; len != 0; len >>= 8) - COMPUTE(crc, len & 0xff); - - *cval = ~crc; - return (0); -} - -int PROCCNT(const char *cmd, const char *procname,double *value) -{ -#ifdef HAVE_PROC_0_PSINFO - DIR *dir; - struct dirent *entries; - struct stat buf; - char filename[MAX_STRING_LEN]; - - int fd; -/* In the correct procfs.h, the structure name is psinfo_t */ - psinfo_t psinfo; - - int proccount=0; - - dir=opendir("/proc"); - if(NULL == dir) - { - return SYSINFO_RET_FAIL; - } - - while((entries=readdir(dir))!=NULL) - { - strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/psinfo",MAX_STRING_LEN); - - if(stat(filename,&buf)==0) - { - fd = open (filename, O_RDONLY); - if (fd != -1) - { - if (read (fd, &psinfo, sizeof(psinfo)) == -1) - { - closedir(dir); - return SYSINFO_RET_FAIL; - } - else - { - if(strcmp(procname,psinfo.pr_fname)==0) - { - proccount++; - } - } - close (fd); - } - else - { - continue; - } - } - } - closedir(dir); - *value=(double)proccount; - return SYSINFO_RET_OK; -#else -#ifdef 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]; - - FILE *f; - - int proccount=0; - - dir=opendir("/proc"); - if(NULL == dir) - { - return SYSINFO_RET_FAIL; - } - - while((entries=readdir(dir))!=NULL) - { - strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); - -/* 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; - } - - if(stat(filename,&buf)==0) - { - f=fopen(filename,"r"); - if(f==NULL) - { - continue; - } - fgets(line,MAX_STRING_LEN,f); - fclose(f); - - if(sscanf(line,"%s\t%s\n",name1,name2)==2) - { - /* For Linux only */ - if(strcmp(name1,"Name:") == 0) - { - if(strcmp(procname,name2)==0) - { - proccount++; - } - } - /* Assuming that this is FreeBSD. First field is process name */ - else if(strcmp(procname,name1)==0) - { - proccount++; - } -/* else - { - closedir(dir); - return SYSINFO_RET_FAIL; - }*/ - } - else - { - closedir(dir); - return SYSINFO_RET_FAIL; - } - } - } - closedir(dir); - *value=(double)proccount; - return SYSINFO_RET_OK; -#else - return SYSINFO_RET_FAIL; -#endif -#endif -} - -int get_stat(const char *key, double *value) -{ - FILE *f; - char line[MAX_STRING_LEN]; - char name1[MAX_STRING_LEN]; - char name2[MAX_STRING_LEN]; - - f=fopen("/tmp/zabbix_agentd.tmp","r"); - if(f==NULL) - { - return SYSINFO_RET_FAIL; - } - while(fgets(line,MAX_STRING_LEN,f)) - { - if(sscanf(line,"%s %s\n",name1,name2)==2) - { - if(strcmp(name1,key) == 0) - { - fclose(f); - *value=atof(name2); - return SYSINFO_RET_OK; - } - } - - } - fclose(f); - return SYSINFO_RET_FAIL; -} - int DISKREADOPS1(const char *cmd, const char *device,double *value) { char key[MAX_STRING_LEN]; @@ -997,587 +243,6 @@ int DISKWRITEBLKS15(const char *cmd, const char *device,double *value) return get_stat(key,value); } -int NETLOADIN1(const char *cmd, const char *parameter,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"netloadin1[%s]",parameter); - - return get_stat(key,value); -} - -int NETLOADIN5(const char *cmd, const char *parameter,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"netloadin5[%s]",parameter); - - return get_stat(key,value); -} - -int NETLOADIN15(const char *cmd, const char *parameter,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"netloadin15[%s]",parameter); - - return get_stat(key,value); -} - -int NETLOADOUT1(const char *cmd, const char *parameter,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"netloadout1[%s]",parameter); - - return get_stat(key,value); -} - -int NETLOADOUT5(const char *cmd, const char *parameter,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"netloadout5[%s]",parameter); - - return get_stat(key,value); -} - -int NETLOADOUT15(const char *cmd, const char *parameter,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"netloadout15[%s]",parameter); - - return get_stat(key,value); -} - -int TCP_LISTEN(const char *cmd, const char *porthex,double *value) -{ -#ifdef HAVE_PROC - FILE *f; - char c[MAX_STRING_LEN]; - - char pattern[MAX_STRING_LEN]="0050 00000000:0000 0A"; - - strscpy(pattern,porthex); - strncat(pattern," 00000000:0000 0A", MAX_STRING_LEN); - - f=fopen("/proc/net/tcp","r"); - if(NULL == f) - { - return SYSINFO_RET_FAIL; - } - - while (NULL!=fgets(c,MAX_STRING_LEN,f)) - { - if(NULL != strstr(c,pattern)) - { - fclose(f); - *value=1; - return SYSINFO_RET_OK; - } - } - fclose(f); - - *value=0; - return SYSINFO_RET_OK; -#else - return SYSINFO_RET_FAIL; -#endif -} - -#ifdef HAVE_PROC -int getPROC(char *file,int lineno,int fieldno, double *value) -{ - FILE *f; - char *t; - char c[MAX_STRING_LEN]; - double result; - int i; - - f=fopen(file,"r"); - if(NULL == f) - { - return SYSINFO_RET_FAIL; - } - for(i=1;i<=lineno;i++) - { - fgets(c,MAX_STRING_LEN,f); - } - t=(char *)strtok(c," "); - for(i=2;i<=fieldno;i++) - { - t=(char *)strtok(NULL," "); - } - fclose(f); - - sscanf(t, "%lf", &result ); - - *value=result; - return SYSINFO_RET_OK; -} -#endif - -int CACHEDMEM(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_PROC -/* Get CACHED memory in bytes */ -/* return getPROC("/proc/meminfo",8,2);*/ -/* It does not work for both 2.4 and 2.6 */ -/* return getPROC("/proc/meminfo",2,7);*/ - FILE *f; - char *t; - char c[MAX_STRING_LEN]; - double result = SYSINFO_RET_FAIL; - - 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", &result ); - break; - } - } - fclose(f); - - *value=result; - return SYSINFO_RET_OK; -#else - return SYSINFO_RET_FAIL; -#endif -} - -int BUFFERSMEM(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_SYSINFO_BUFFERRAM - struct sysinfo info; - - if( 0 == sysinfo(&info)) - { -#ifdef HAVE_SYSINFO_MEM_UNIT - *value=(double)info.bufferram * (double)info.mem_unit; -#else - *value=(double)info.bufferram; -#endif - return SYSINFO_RET_OK; - } - else - { - return SYSINFO_RET_FAIL; - } -#else - return SYSINFO_RET_FAIL; -#endif -} - -int SHAREDMEM(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_SYSINFO_SHAREDRAM - struct sysinfo info; - - if( 0 == sysinfo(&info)) - { -#ifdef HAVE_SYSINFO_MEM_UNIT - *value=(double)info.sharedram * (double)info.mem_unit; -#else - *value=(double)info.sharedram; -#endif - return SYSINFO_RET_OK; - } - else - { - return SYSINFO_RET_FAIL; - } -#else -#ifdef HAVE_SYS_VMMETER_VMTOTAL - int mib[2],len; - struct vmtotal v; - - len=sizeof(struct vmtotal); - mib[0]=CTL_VM; - mib[1]=VM_METER; - - sysctl(mib,2,&v,&len,NULL,0); - - *value=(double)(v.t_armshr<<2); - return SYSINFO_RET_OK; -#else - return SYSINFO_RET_FAIL; -#endif -#endif -} - -int TOTALMEM(const char *cmd, const char *parameter,double *value) -{ -/* Solaris */ -#ifdef HAVE_UNISTD_SYSCONF - *value=(double)sysconf(_SC_PHYS_PAGES)*sysconf(_SC_PAGESIZE); - return SYSINFO_RET_OK; -#else -#ifdef HAVE_SYS_PSTAT_H - struct pst_static pst; - long page; - - 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 */ - *value=(double)page*pst.physical_memory; - return SYSINFO_RET_OK; - } -#else -#ifdef HAVE_SYSINFO_TOTALRAM - struct sysinfo info; - - if( 0 == sysinfo(&info)) - { -#ifdef HAVE_SYSINFO_MEM_UNIT - *value=(double)info.totalram * (double)info.mem_unit; -#else - *value=(double)info.totalram; -#endif - return SYSINFO_RET_OK; - } - else - { - return SYSINFO_RET_FAIL; - } -#else -#ifdef HAVE_SYS_VMMETER_VMTOTAL - int mib[2],len; - struct vmtotal v; - - len=sizeof(struct vmtotal); - mib[0]=CTL_VM; - mib[1]=VM_METER; - - sysctl(mib,2,&v,&len,NULL,0); - - *value=(double)(v.t_rm<<2); - return SYSINFO_RET_OK; -#else -#ifdef HAVE_SYS_SYSCTL_H - static int mib[] = { CTL_HW, HW_PHYSMEM }; - size_t len; - unsigned int memory; - int ret; - - len=sizeof(memory); - - if(0==sysctl(mib,2,&memory,&len,NULL,0)) - { - *value=(double)memory; - ret=SYSINFO_RET_OK; - } - else - { - ret=SYSINFO_RET_FAIL; - } - return ret; -#else - return SYSINFO_RET_FAIL; -#endif -#endif -#endif -#endif -#endif -} - -int FREEMEM(const char *cmd, const char *parameter,double *value) -{ -/* Solaris */ -#ifdef HAVE_UNISTD_SYSCONF - *value=(double)sysconf(_SC_AVPHYS_PAGES)*sysconf(_SC_PAGESIZE); - return SYSINFO_RET_OK; -#else -#ifdef HAVE_SYS_PSTAT_H - struct pst_static pst; - struct pst_dynamic dyn; - long page; - - if(pstat_getstatic(&pst, sizeof(pst), (size_t)1, 0) == -1) - { - return SYSINFO_RET_FAIL; - } - else - { - /* Get page size */ - page = pst.page_size; -/* return pst.physical_memory;*/ - - if (pstat_getdynamic(&dyn, sizeof(dyn), 1, 0) == -1) - { - return SYSINFO_RET_FAIL; - } - else - { -/* cout<<"total virtual memory allocated is " << dyn.psd_vm << " - pages, " << dyn.psd_vm * page << " bytes" << endl; - cout<<"active virtual memory is " << dyn.psd_avm <<" pages, " << - dyn.psd_avm * page << " bytes" << endl; - cout<<"total real memory is " << dyn.psd_rm << " pages, " << - dyn.psd_rm * page << " bytes" << endl; - cout<<"active real memory is " << dyn.psd_arm << " pages, " << - dyn.psd_arm * page << " bytes" << endl; - cout<<"free memory is " << dyn.psd_free << " pages, " << -*/ - /* Free memory in bytes */ - - *value=(double)dyn.psd_free * page; - return SYSINFO_RET_OK; - } - } -#else -#ifdef HAVE_SYSINFO_FREERAM - struct sysinfo info; - - if( 0 == sysinfo(&info)) - { -#ifdef HAVE_SYSINFO_MEM_UNIT - *value=(double)info.freeram * (double)info.mem_unit; -#else - *value=(double)info.freeram; -#endif - return SYSINFO_RET_OK; - } - else - { - return SYSINFO_RET_FAIL; - } -#else -#ifdef HAVE_SYS_VMMETER_VMTOTAL - int mib[2],len; - struct vmtotal v; - - len=sizeof(struct vmtotal); - mib[0]=CTL_VM; - mib[1]=VM_METER; - - sysctl(mib,2,&v,&len,NULL,0); - - *value=(double)(v.t_free<<2); - return SYSINFO_RET_OK; -#else -/* OS/X */ -#ifdef HAVE_MACH_HOST_INFO_H - vm_statistics_data_t page_info; - vm_size_t pagesize; - mach_msg_type_number_t count; - kern_return_t kret; - int ret; - - pagesize = 0; - kret = host_page_size (mach_host_self(), &pagesize); - - count = HOST_VM_INFO_COUNT; - kret = host_statistics (mach_host_self(), HOST_VM_INFO, - (host_info_t)&page_info, &count); - if (kret == KERN_SUCCESS) - { - double pw, pa, pi, pf, pu; - - pw = (double)page_info.wire_count*pagesize; - pa = (double)page_info.active_count*pagesize; - pi = (double)page_info.inactive_count*pagesize; - pf = (double)page_info.free_count*pagesize; - - pu = pw+pa+pi; - - *value=(double)pf; - ret = SYSINFO_RET_OK; - } - else - { - ret = SYSINFO_RET_FAIL; - } - return ret; -#else - return SYSINFO_RET_FAIL; -#endif -#endif -#endif -#endif -#endif -} - -int KERNEL_MAXFILES(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_FUNCTION_SYSCTL_KERN_MAXFILES - int mib[2],len; - int maxfiles; - - mib[0]=CTL_KERN; - mib[1]=KERN_MAXFILES; - - len=sizeof(maxfiles); - - if(sysctl(mib,2,&maxfiles,(size_t *)&len,NULL,0) != 0) - { - return SYSINFO_RET_FAIL; - } - - *value=(double)(maxfiles); - return SYSINFO_RET_OK; -#else - return SYSINFO_RET_FAIL; -#endif -} - -int KERNEL_MAXPROC(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_FUNCTION_SYSCTL_KERN_MAXPROC - int mib[2],len; - int maxproc; - - mib[0]=CTL_KERN; - mib[1]=KERN_MAXPROC; - - len=sizeof(maxproc); - - if(sysctl(mib,2,&maxproc,(size_t *)&len,NULL,0) != 0) - { - return SYSINFO_RET_FAIL; -/* printf("Errno [%m]");*/ - } - - *value=(double)(maxproc); - return SYSINFO_RET_OK; -#else - return SYSINFO_RET_FAIL; -#endif -} - -int PING(const char *cmd, const char *parameter,double *value) -{ - *value=1; - return SYSINFO_RET_OK; -} - -int PROCCOUNT(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_SYSINFO_PROCS - struct sysinfo info; - - if( 0 == sysinfo(&info)) - { - *value=(double)info.procs; - return SYSINFO_RET_OK; - } - else - { - return SYSINFO_RET_FAIL; - } -#else -#ifdef HAVE_PROC_0_PSINFO - DIR *dir; - struct dirent *entries; - struct stat buf; - char filename[MAX_STRING_LEN]; - - int fd; -/* In the correct procfs.h, the structure name is psinfo_t */ - psinfo_t psinfo; - - int proccount=0; - - dir=opendir("/proc"); - if(NULL == dir) - { - return SYSINFO_RET_FAIL; - } - - while((entries=readdir(dir))!=NULL) - { - strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/psinfo",MAX_STRING_LEN); - - if(stat(filename,&buf)==0) - { - fd = open (filename, O_RDONLY); - if (fd != -1) - { - if (read (fd, &psinfo, sizeof(psinfo)) == -1) - { - closedir(dir); - return SYSINFO_RET_FAIL; - } - else - { - proccount++; - } - close (fd); - } - else - { - continue; - } - } - } - closedir(dir); - *value=(double)proccount; - return SYSINFO_RET_OK; -#else -#ifdef HAVE_PROC_1_STATUS - DIR *dir; - struct dirent *entries; - struct stat buf; - char filename[MAX_STRING_LEN]; - char line[MAX_STRING_LEN]; - - FILE *f; - - int proccount=0; - - dir=opendir("/proc"); - if(NULL == dir) - { - return SYSINFO_RET_FAIL; - } - - while((entries=readdir(dir))!=NULL) - { - 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; - } - /* This check can be skipped. No need to read anything from this file. */ - if(NULL != fgets(line,MAX_STRING_LEN,f)) - { - proccount++; - } - fclose(f); - } - } - closedir(dir); - *value=(double)proccount; - return SYSINFO_RET_OK; -#else - return SYSINFO_RET_FAIL; -#endif -#endif -#endif -} - int DISK_IO(const char *cmd, const char *parameter,double *value) { #ifdef HAVE_PROC @@ -1622,698 +287,3 @@ int DISK_WBLK(const char *cmd, const char *parameter,double *value) return SYSINFO_RET_FAIL; #endif } - -int STRVERSION(const char *cmd, const char *parameter,char **value) -{ - static char version[]=ZABBIX_VERSION; - - *value=strdup(version); - return SYSINFO_RET_OK; -} - -int EXECUTE_STR(const char *cmd, const char *command, const char *parameter, char **value) -{ - FILE *f; - static char c[MAX_STRING_LEN]; - static char full_cmd[MAX_STRING_LEN]; - - strscpy(full_cmd,command); - if(parameter != NULL) - { - strncat(full_cmd," \"",MAX_STRING_LEN); - strncat(full_cmd,parameter,MAX_STRING_LEN); - strncat(full_cmd,"\"",MAX_STRING_LEN); - } - - f=popen(full_cmd,"r"); - if(f==0) - { - switch (errno) - { - case EINTR: -/* (char *) to avoid compiler warning */ - return SYSINFO_RET_TIMEOUT; - default: - return SYSINFO_RET_FAIL; - } - } - - if(NULL == fgets(c,MAX_STRING_LEN,f)) - { - switch (errno) - { - case EINTR: - pclose(f); -/* (char *) to avoid compiler warning */ - return SYSINFO_RET_TIMEOUT; - default: - pclose(f); - return SYSINFO_RET_FAIL; - } - } - - if(pclose(f) != 0) - { - switch (errno) - { - case EINTR: -/* (char *) to avoid compiler warning */ - return SYSINFO_RET_TIMEOUT; - default: - return SYSINFO_RET_FAIL; - } - } - - /* We got EOL only */ - if(c[0] == '\n') - { - return SYSINFO_RET_FAIL; - } - - *value=strdup(c); - return SYSINFO_RET_OK; -} - -int EXECUTE(const char *cmd, const char *command,double *value) -{ - FILE *f; - double result; - char c[MAX_STRING_LEN]; - - f=popen( command,"r"); - if(f==0) - { - switch (errno) - { - case EINTR: - return SYSINFO_RET_TIMEOUT; - default: - return SYSINFO_RET_FAIL; - } - } - - if(NULL == fgets(c,MAX_STRING_LEN,f)) - { - pclose(f); - switch (errno) - { - case EINTR: - return SYSINFO_RET_TIMEOUT; - default: - return SYSINFO_RET_FAIL; - } - } - - if(pclose(f) != 0) - { - switch (errno) - { - case EINTR: - return SYSINFO_RET_TIMEOUT; - default: - return SYSINFO_RET_FAIL; - } - } - - /* We got EOL only */ - if(c[0] == '\n') - { - return SYSINFO_RET_FAIL; - } - - sscanf(c, "%lf", &result ); - - *value=result; - return SYSINFO_RET_OK; -} - -void forward_request(char *proxy,char *command,int port,char *value) -{ - char *haddr; - char c[1024]; - - int s; - struct sockaddr_in addr; - int addrlen; - - - struct hostent *host; - - host = gethostbyname(proxy); - if(host == NULL) - { - snprintf(value,MAX_STRING_LEN-1,"%s","ZBX_NETWORK_ERROR\n"); - return; - } - - haddr=host->h_addr; - - addrlen = sizeof(addr); - memset(&addr, 0, addrlen); - addr.sin_port = htons(port); - addr.sin_family = AF_INET; - bcopy(haddr, (void *) &addr.sin_addr.s_addr, 4); - - s = socket(AF_INET, SOCK_STREAM, 0); - if (s == -1) - { - snprintf(value,MAX_STRING_LEN-1,"%s","ZBX_NOTSUPPORTED\n"); - close(s); - return; - } - - if (connect(s, (struct sockaddr *) &addr, addrlen) == -1) - { - snprintf(value,MAX_STRING_LEN-1,"%s","ZBX_NETWORK_ERROR\n"); - close(s); - return; - } - - if(write(s,command,strlen(command)) == -1) - { - snprintf(value,MAX_STRING_LEN-1,"%s","ZBX_NETWORK_ERROR\n"); - close(s); - return; - } - - memset(&c, 0, 1024); - if(read(s, c, 1024) == -1) - { - snprintf(value,MAX_STRING_LEN-1,"%s","ZBX_ERROR\n"); - close(s); - return; - } - close(s); - strcpy(value,c); -} - - -/* - * 0 - NOT OK - * 1 - OK - * */ -int tcp_expect(char *hostname, short port, char *expect,char *sendtoclose, int *value_int) -{ - char *haddr; - char c[1024]; - - int s; - struct sockaddr_in addr; - int addrlen; - - - struct hostent *host; - - host = gethostbyname(hostname); - if(host == NULL) - { - *value_int = 0; - return SYSINFO_RET_OK; - } - - haddr=host->h_addr; - - - addrlen = sizeof(addr); - memset(&addr, 0, addrlen); - addr.sin_port = htons(port); - addr.sin_family = AF_INET; - bcopy(haddr, (void *) &addr.sin_addr.s_addr, 4); - - s = socket(AF_INET, SOCK_STREAM, 0); - if (s == -1) - { - close(s); - *value_int = 0; - return SYSINFO_RET_OK; - } - - if (connect(s, (struct sockaddr *) &addr, addrlen) == -1) - { - close(s); - *value_int = 0; - return SYSINFO_RET_OK; - } - - if( expect == NULL) - { - close(s); - *value_int = 1; - return SYSINFO_RET_OK; - } - - memset(&c, 0, 1024); - recv(s, c, 1024, 0); - if ( strncmp(c, expect, strlen(expect)) == 0 ) - { - send(s,sendtoclose,strlen(sendtoclose),0); - close(s); - *value_int = 1; - return SYSINFO_RET_OK; - } - else - { - send(s,sendtoclose,strlen(sendtoclose),0); - close(s); - *value_int = 0; - return SYSINFO_RET_OK; - } -} - -#ifdef HAVE_LDAP -int check_ldap(char *hostname, short port,int *value) -{ - int rc; - LDAP *ldap; - LDAPMessage *res; - LDAPMessage *msg; - - char *base = ""; - int scope = LDAP_SCOPE_BASE; - char *filter="(objectClass=*)"; - int attrsonly=0; - char *attrs[2]; - - attrs[0] = "namingContexts"; - attrs[1] = NULL; - - BerElement *ber; - char *attr=NULL; - char **valRes=NULL; - - ldap = ldap_init(hostname, port); - if ( !ldap ) - { - *value=0; - return SYSINFO_RET_OK; - } - - rc = ldap_search_s(ldap, base, scope, filter, attrs, attrsonly, &res); - if( rc != 0 ) - { - *value=0; - return SYSINFO_RET_OK; - } - - msg = ldap_first_entry(ldap, res); - if( !msg ) - { - *value=0; - return SYSINFO_RET_OK; - } - - attr = ldap_first_attribute (ldap, msg, &ber); - valRes = ldap_get_values( ldap, msg, attr ); - - ldap_value_free(valRes); - ldap_memfree(attr); - if (ber != NULL) { - ber_free(ber, 0); - } - ldap_msgfree(res); - ldap_unbind(ldap); - - *value=1; - return SYSINFO_RET_OK; -} -#endif - - -/* - * 0- NOT OK - * 1 - OK - * */ -int check_ssh(char *hostname, short port, int *value) -{ - char *haddr; - char c[MAX_STRING_LEN]; - char out[MAX_STRING_LEN]; - char *ssh_proto=NULL; - char *ssh_server=NULL; - - int s; - struct sockaddr_in addr; - int addrlen; - - - struct hostent *host; - - host = gethostbyname(hostname); - if(host == NULL) - { - *value=0; - return SYSINFO_RET_OK; - } - - haddr=host->h_addr; - - addrlen = sizeof(addr); - memset(&addr, 0, addrlen); - addr.sin_port = htons(port); - addr.sin_family = AF_INET; - bcopy(haddr, (void *) &addr.sin_addr.s_addr, 4); - - s = socket(AF_INET, SOCK_STREAM, 0); - if (s == -1) - { - close(s); - *value=0; - return SYSINFO_RET_OK; - } - - if (connect(s, (struct sockaddr *) &addr, addrlen) == -1) - { - close(s); - *value=0; - return SYSINFO_RET_OK; - } - - memset(&c, 0, 1024); - recv(s, c, 1024, 0); - if ( strncmp(c, "SSH", 3) == 0 ) - { - ssh_proto = c + 4; - ssh_server = ssh_proto + strspn (ssh_proto, "0123456789-. "); - ssh_proto[strspn (ssh_proto, "0123456789-. ")] = 0; - -/* printf("[%s] [%s]\n",ssh_proto, ssh_server);*/ - - snprintf(out,sizeof(out)-1,"SSH-%s-%s\r\n", ssh_proto, "zabbix_agent"); - send(s,out,strlen(out),0); - -/* printf("[%s]\n",out);*/ - - close(s); - *value=1; - return SYSINFO_RET_OK; - } - else - { - send(s,"0\n",2,0); - close(s); - *value=0; - return SYSINFO_RET_OK; - } -} - -/* Example check_service[ssh], check_service[smtp,29],check_service[ssh,127.0.0.1,22]*/ -/* check_service[ssh,127.0.0.1,ssh] */ -int CHECK_SERVICE_PERF(const char *cmd, const char *service_and_ip_and_port,double *value) -{ - char *c,*c1; - int port=0; - char service[MAX_STRING_LEN]; - char ip[MAX_STRING_LEN]; - char port_str[MAX_STRING_LEN]; - - struct timeval t1,t2; - struct timezone tz1,tz2; - - int result; - int value_int; - - long exec_time; - - gettimeofday(&t1,&tz1); - - c=strchr(service_and_ip_and_port,','); - strscpy(service,service_and_ip_and_port); - - if(c != NULL) - { - strscpy(ip,c+1); - service[c-service_and_ip_and_port]=0; - - c1=strchr(ip,','); - - if(c1!=NULL) - { - strscpy(port_str,c1+1); - ip[c1-ip]=0; - port=atoi(port_str); - } - else - { - if(strchr(ip,'.')==NULL) - { - strscpy(port_str,ip); - port=atoi(port_str); - strcpy(ip,"127.0.0.1"); - } - } - } - else - { - strcpy(ip,"127.0.0.1"); - } - -/* printf("IP:[%s]",ip); - printf("Service:[%s]",service); - printf("Port:[%d]",port);*/ - - if(strcmp(service,"ssh") == 0) - { - if(port == 0) port=22; - result=check_ssh(ip,port,&value_int); - } -#ifdef HAVE_LDAP - else if(strcmp(service,"ldap") == 0) - { - if(port == 0) port=389; - result=check_ldap(ip,port,&value_int); - } -#endif - else if(strcmp(service,"smtp") == 0) - { - if(port == 0) port=25; - result=tcp_expect(ip,port,"220","QUIT\n",&value_int); - } - else if(strcmp(service,"ftp") == 0) - { - if(port == 0) port=21; - result=tcp_expect(ip,port,"220","",&value_int); - } - else if(strcmp(service,"http") == 0) - { - if(port == 0) port=80; - result=tcp_expect(ip,port,NULL,"",&value_int); - } - else if(strcmp(service,"pop") == 0) - { - if(port == 0) port=110; - result=tcp_expect(ip,port,"+OK","",&value_int); - } - else if(strcmp(service,"nntp") == 0) - { - if(port == 0) port=119; -/* 220 is incorrect */ -/* result=tcp_expect(ip,port,"220","");*/ - result=tcp_expect(ip,port,"200","",&value_int); - } - else if(strcmp(service,"imap") == 0) - { - if(port == 0) port=143; - result=tcp_expect(ip,port,"* OK","a1 LOGOUT\n",&value_int); - } - else if(strcmp(service,"tcp") == 0) - { - if(port == 0) port=80; - result=tcp_expect(ip,port,NULL,"",&value_int); - } - else - { - return SYSINFO_RET_FAIL; - } - - if(1 == value_int) - { - gettimeofday(&t2,&tz2); - exec_time=(t2.tv_sec - t1.tv_sec) * 1000000 + (t2.tv_usec - t1.tv_usec); - *value=(double)exec_time/1000000; - return SYSINFO_RET_OK; - } - else - { - *value=0; - return SYSINFO_RET_OK; - } -} - -/* Example check_service[ssh], check_service[smtp,29],check_service[ssh,127.0.0.1,22]*/ -/* check_service[ssh,127.0.0.1,ssh] */ -int CHECK_SERVICE(const char *cmd, const char *service_and_ip_and_port,double *value) -{ - int port=0; - char service[MAX_STRING_LEN]; - char ip[MAX_STRING_LEN]; - char port_str[MAX_STRING_LEN]; - char tmp[MAX_STRING_LEN]; - char *s; - - int result; - int value_int; - - /* Default IP address */ - strscpy(ip,"127.0.0.1"); - - strscpy(tmp,service_and_ip_and_port); - - s=strtok(tmp,","); - if(s) - { - strscpy(service,s); - - s = strtok(NULL,","); - } - if(s) - { - if(strchr(s,'.')!=NULL) - { - strscpy(ip,s); - } - else - { - strscpy(port_str,s); - port=atoi(port_str); - } - - s = strtok(NULL,","); - } - if(s) - { - if(strchr(s,'.')!=NULL) - { - strscpy(ip,s); - } - else - { - strscpy(port_str,s); - port=atoi(port_str); - } - s = strtok(NULL,","); - } - -/* printf("IP:[%s]\n",ip); - printf("Service:[%s]\n",service); - printf("Port:[%d]\n\n",port);*/ - -/* c=strchr(service_and_ip_and_port,','); - strscpy(service,service_and_ip_and_port); - - if(c != NULL) - { - strscpy(ip,c+1); - service[c-service_and_ip_and_port]=0; - - c1=strchr(ip,','); - - if(c1!=NULL) - { - strscpy(port_str,c1+1); - ip[c1-ip]=0; - port=atoi(port_str); - } - else - { - if(strchr(ip,'.')==NULL) - { - strscpy(port_str,ip); - port=atoi(port_str); - strcpy(ip,"127.0.0.1"); - } - } - } - else - { - strcpy(ip,"127.0.0.1"); - }*/ - -/* printf("IP:[%s]",ip); - printf("Service:[%s]",service); - printf("Port:[%d]",port);*/ - - if(strcmp(service,"ssh") == 0) - { - if(port == 0) port=22; - result=check_ssh(ip,port,&value_int); - } -#ifdef HAVE_LDAP - else if(strcmp(service,"ldap") == 0) - { - if(port == 0) port=389; - result=check_ldap(ip,port,&value_int); - } -#endif - else if(strcmp(service,"smtp") == 0) - { - if(port == 0) port=25; - result=tcp_expect(ip,port,"220","QUIT\n",&value_int); - } - else if(strcmp(service,"ftp") == 0) - { - if(port == 0) port=21; - result=tcp_expect(ip,port,"220","",&value_int); - } - else if(strcmp(service,"http") == 0) - { - if(port == 0) port=80; - result=tcp_expect(ip,port,NULL,"",&value_int); - } - else if(strcmp(service,"pop") == 0) - { - if(port == 0) port=110; - result=tcp_expect(ip,port,"+OK","",&value_int); - } - else if(strcmp(service,"nntp") == 0) - { - if(port == 0) port=119; -/* 220 is incorrect */ -/* result=tcp_expect(ip,port,"220","");*/ - result=tcp_expect(ip,port,"200","",&value_int); - } - else if(strcmp(service,"imap") == 0) - { - if(port == 0) port=143; - result=tcp_expect(ip,port,"* OK","a1 LOGOUT\n",&value_int); - } - else if(strcmp(service,"tcp") == 0) - { - if(port == 0) port=80; - result=tcp_expect(ip,port,NULL,"",&value_int); - } - else - { - result=SYSINFO_RET_FAIL; - } - - *value=(double)value_int; - - return result; -} - -int CHECK_PORT(const char *cmd, const char *ip_and_port,double *value) -{ - char *c; - int port=0; - int value_int; - int result; - char ip[MAX_STRING_LEN]; - - c=strchr(ip_and_port,','); - strscpy(ip,ip_and_port); - - if(c != NULL) - { - port=atoi(c+1); - ip[c-ip_and_port]=0; - } - else - { - port=atoi(ip_and_port); - strcpy(ip,"127.0.0.1"); - } - - result = tcp_expect(ip,port,NULL,"",&value_int); - *value = (double)value_int; - return result; -} diff --git a/src/libs/zbxsysinfo/memory.c b/src/libs/zbxsysinfo/memory.c new file mode 100644 index 00000000..6aa6e1b2 --- /dev/null +++ b/src/libs/zbxsysinfo/memory.c @@ -0,0 +1,430 @@ +/* +** ZABBIX +** Copyright (C) 2000-2005 SIA Zabbix +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +**/ + +#include "config.h" + +#include <errno.h> + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/stat.h> +#include <sys/types.h> + +/* Definitions of uint32_t under OS/X */ +#ifdef HAVE_STDINT_H + #include <stdint.h> +#endif +#ifdef HAVE_STRINGS_H + #include <strings.h> +#endif +#ifdef HAVE_FCNTL_H + #include <fcntl.h> +#endif +#ifdef HAVE_DIRENT_H + #include <dirent.h> +#endif +/* Linux */ +#ifdef HAVE_SYS_VFS_H + #include <sys/vfs.h> +#endif +#ifdef HAVE_SYS_SYSINFO_H + #include <sys/sysinfo.h> +#endif +/* Solaris */ +#ifdef HAVE_SYS_STATVFS_H + #include <sys/statvfs.h> +#endif +/* Solaris */ +#ifdef HAVE_SYS_PROCFS_H +/* This is needed to access the correct procfs.h definitions */ + #define _STRUCTURED_PROC 1 + #include <sys/procfs.h> +#endif +#ifdef HAVE_SYS_LOADAVG_H + #include <sys/loadavg.h> +#endif +#ifdef HAVE_SYS_SOCKET_H + #include <sys/socket.h> +#endif +#ifdef HAVE_NETINET_IN_H + #include <netinet/in.h> +#endif +#ifdef HAVE_ARPA_INET_H + #include <arpa/inet.h> +#endif +/* OpenBSD/Solaris */ +#ifdef HAVE_SYS_PARAM_H + #include <sys/param.h> +#endif + +#ifdef HAVE_SYS_MOUNT_H + #include <sys/mount.h> +#endif + +/* HP-UX */ +#ifdef HAVE_SYS_PSTAT_H + #include <sys/pstat.h> +#endif + +#ifdef HAVE_NETDB_H + #include <netdb.h> +#endif + +/* Solaris */ +#ifdef HAVE_SYS_SWAP_H + #include <sys/swap.h> +#endif + +/* FreeBSD */ +#ifdef HAVE_SYS_SYSCTL_H + #include <sys/sysctl.h> +#endif + +/* Solaris */ +#ifdef HAVE_SYS_SYSCALL_H + #include <sys/syscall.h> +#endif + +/* FreeBSD */ +#ifdef HAVE_VM_VM_PARAM_H + #include <vm/vm_param.h> +#endif +/* FreeBSD */ +#ifdef HAVE_SYS_VMMETER_H + #include <sys/vmmeter.h> +#endif +/* FreeBSD */ +#ifdef HAVE_SYS_TIME_H + #include <sys/time.h> +#endif + +#ifdef HAVE_MACH_HOST_INFO_H + #include <mach/host_info.h> +#endif +#ifdef HAVE_MACH_MACH_HOST_H + #include <mach/mach_host.h> +#endif + + +#ifdef HAVE_KSTAT_H + #include <kstat.h> +#endif + +#ifdef HAVE_LDAP + #include <ldap.h> +#endif + +#include "common.h" +#include "sysinfo.h" + +int CACHEDMEM(const char *cmd, const char *parameter,double *value) +{ +#ifdef HAVE_PROC +/* Get CACHED memory in bytes */ +/* return getPROC("/proc/meminfo",8,2);*/ +/* It does not work for both 2.4 and 2.6 */ +/* return getPROC("/proc/meminfo",2,7);*/ + FILE *f; + char *t; + char c[MAX_STRING_LEN]; + double result = SYSINFO_RET_FAIL; + + 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", &result ); + break; + } + } + fclose(f); + + *value=result; + return SYSINFO_RET_OK; +#else + return SYSINFO_RET_FAIL; +#endif +} + +int BUFFERSMEM(const char *cmd, const char *parameter,double *value) +{ +#ifdef HAVE_SYSINFO_BUFFERRAM + struct sysinfo info; + + if( 0 == sysinfo(&info)) + { +#ifdef HAVE_SYSINFO_MEM_UNIT + *value=(double)info.bufferram * (double)info.mem_unit; +#else + *value=(double)info.bufferram; +#endif + return SYSINFO_RET_OK; + } + else + { + return SYSINFO_RET_FAIL; + } +#else + return SYSINFO_RET_FAIL; +#endif +} + +int SHAREDMEM(const char *cmd, const char *parameter,double *value) +{ +#ifdef HAVE_SYSINFO_SHAREDRAM + struct sysinfo info; + + if( 0 == sysinfo(&info)) + { +#ifdef HAVE_SYSINFO_MEM_UNIT + *value=(double)info.sharedram * (double)info.mem_unit; +#else + *value=(double)info.sharedram; +#endif + return SYSINFO_RET_OK; + } + else + { + return SYSINFO_RET_FAIL; + } +#else +#ifdef HAVE_SYS_VMMETER_VMTOTAL + int mib[2],len; + struct vmtotal v; + + len=sizeof(struct vmtotal); + mib[0]=CTL_VM; + mib[1]=VM_METER; + + sysctl(mib,2,&v,&len,NULL,0); + + *value=(double)(v.t_armshr<<2); + return SYSINFO_RET_OK; +#else + return SYSINFO_RET_FAIL; +#endif +#endif +} + +int TOTALMEM(const char *cmd, const char *parameter,double *value) +{ +/* Solaris */ +#ifdef HAVE_UNISTD_SYSCONF + *value=(double)sysconf(_SC_PHYS_PAGES)*sysconf(_SC_PAGESIZE); + return SYSINFO_RET_OK; +#else +#ifdef HAVE_SYS_PSTAT_H + struct pst_static pst; + long page; + + 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 */ + *value=(double)page*pst.physical_memory; + return SYSINFO_RET_OK; + } +#else +#ifdef HAVE_SYSINFO_TOTALRAM + struct sysinfo info; + + if( 0 == sysinfo(&info)) + { +#ifdef HAVE_SYSINFO_MEM_UNIT + *value=(double)info.totalram * (double)info.mem_unit; +#else + *value=(double)info.totalram; +#endif + return SYSINFO_RET_OK; + } + else + { + return SYSINFO_RET_FAIL; + } +#else +#ifdef HAVE_SYS_VMMETER_VMTOTAL + int mib[2],len; + struct vmtotal v; + + len=sizeof(struct vmtotal); + mib[0]=CTL_VM; + mib[1]=VM_METER; + + sysctl(mib,2,&v,&len,NULL,0); + + *value=(double)(v.t_rm<<2); + return SYSINFO_RET_OK; +#else +#ifdef HAVE_SYS_SYSCTL_H + static int mib[] = { CTL_HW, HW_PHYSMEM }; + size_t len; + unsigned int memory; + int ret; + + len=sizeof(memory); + + if(0==sysctl(mib,2,&memory,&len,NULL,0)) + { + *value=(double)memory; + ret=SYSINFO_RET_OK; + } + else + { + ret=SYSINFO_RET_FAIL; + } + return ret; +#else + return SYSINFO_RET_FAIL; +#endif +#endif +#endif +#endif +#endif +} + +int FREEMEM(const char *cmd, const char *parameter,double *value) +{ +/* Solaris */ +#ifdef HAVE_UNISTD_SYSCONF + *value=(double)sysconf(_SC_AVPHYS_PAGES)*sysconf(_SC_PAGESIZE); + return SYSINFO_RET_OK; +#else +#ifdef HAVE_SYS_PSTAT_H + struct pst_static pst; + struct pst_dynamic dyn; + long page; + + if(pstat_getstatic(&pst, sizeof(pst), (size_t)1, 0) == -1) + { + return SYSINFO_RET_FAIL; + } + else + { + /* Get page size */ + page = pst.page_size; +/* return pst.physical_memory;*/ + + if (pstat_getdynamic(&dyn, sizeof(dyn), 1, 0) == -1) + { + return SYSINFO_RET_FAIL; + } + else + { +/* cout<<"total virtual memory allocated is " << dyn.psd_vm << " + pages, " << dyn.psd_vm * page << " bytes" << endl; + cout<<"active virtual memory is " << dyn.psd_avm <<" pages, " << + dyn.psd_avm * page << " bytes" << endl; + cout<<"total real memory is " << dyn.psd_rm << " pages, " << + dyn.psd_rm * page << " bytes" << endl; + cout<<"active real memory is " << dyn.psd_arm << " pages, " << + dyn.psd_arm * page << " bytes" << endl; + cout<<"free memory is " << dyn.psd_free << " pages, " << +*/ + /* Free memory in bytes */ + + *value=(double)dyn.psd_free * page; + return SYSINFO_RET_OK; + } + } +#else +#ifdef HAVE_SYSINFO_FREERAM + struct sysinfo info; + + if( 0 == sysinfo(&info)) + { +#ifdef HAVE_SYSINFO_MEM_UNIT + *value=(double)info.freeram * (double)info.mem_unit; +#else + *value=(double)info.freeram; +#endif + return SYSINFO_RET_OK; + } + else + { + return SYSINFO_RET_FAIL; + } +#else +#ifdef HAVE_SYS_VMMETER_VMTOTAL + int mib[2],len; + struct vmtotal v; + + len=sizeof(struct vmtotal); + mib[0]=CTL_VM; + mib[1]=VM_METER; + + sysctl(mib,2,&v,&len,NULL,0); + + *value=(double)(v.t_free<<2); + return SYSINFO_RET_OK; +#else +/* OS/X */ +#ifdef HAVE_MACH_HOST_INFO_H + vm_statistics_data_t page_info; + vm_size_t pagesize; + mach_msg_type_number_t count; + kern_return_t kret; + int ret; + + pagesize = 0; + kret = host_page_size (mach_host_self(), &pagesize); + + count = HOST_VM_INFO_COUNT; + kret = host_statistics (mach_host_self(), HOST_VM_INFO, + (host_info_t)&page_info, &count); + if (kret == KERN_SUCCESS) + { + double pw, pa, pi, pf, pu; + + pw = (double)page_info.wire_count*pagesize; + pa = (double)page_info.active_count*pagesize; + pi = (double)page_info.inactive_count*pagesize; + pf = (double)page_info.free_count*pagesize; + + pu = pw+pa+pi; + + *value=(double)pf; + ret = SYSINFO_RET_OK; + } + else + { + ret = SYSINFO_RET_FAIL; + } + return ret; +#else + return SYSINFO_RET_FAIL; +#endif +#endif +#endif +#endif +#endif +} diff --git a/src/libs/zbxsysinfo/sysinfo.c b/src/libs/zbxsysinfo/sysinfo.c index e2b929e1..37068f18 100644 --- a/src/libs/zbxsysinfo/sysinfo.c +++ b/src/libs/zbxsysinfo/sysinfo.c @@ -889,114 +889,6 @@ int get_stat(const char *key, double *value) return SYSINFO_RET_FAIL; } -int DISKREADOPS1(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_read_ops1[%s]",device); - - return get_stat(key,value); -} - -int DISKREADOPS5(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_read_ops5[%s]",device); - - return get_stat(key,value); -} - -int DISKREADOPS15(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_read_ops15[%s]",device); - - return get_stat(key,value); -} - -int DISKREADBLKS1(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_read_blks1[%s]",device); - - return get_stat(key,value); -} - -int DISKREADBLKS5(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_read_blks5[%s]",device); - - return get_stat(key,value); -} - -int DISKREADBLKS15(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_read_blks15[%s]",device); - - return get_stat(key,value); -} - -int DISKWRITEOPS1(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_write_ops1[%s]",device); - - return get_stat(key,value); -} - -int DISKWRITEOPS5(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_write_ops5[%s]",device); - - return get_stat(key,value); -} - -int DISKWRITEOPS15(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_write_ops15[%s]",device); - - return get_stat(key,value); -} - -int DISKWRITEBLKS1(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_write_blks1[%s]",device); - - return get_stat(key,value); -} - -int DISKWRITEBLKS5(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_write_blks5[%s]",device); - - return get_stat(key,value); -} - -int DISKWRITEBLKS15(const char *cmd, const char *device,double *value) -{ - char key[MAX_STRING_LEN]; - - snprintf(key,sizeof(key)-1,"disk_write_blks15[%s]",device); - - return get_stat(key,value); -} - int NETLOADIN1(const char *cmd, const char *parameter,double *value) { char key[MAX_STRING_LEN]; @@ -1578,51 +1470,6 @@ int PROCCOUNT(const char *cmd, const char *parameter,double *value) #endif } -int DISK_IO(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_PROC - return getPROC("/proc/stat",2,2,value); -#else - return SYSINFO_RET_FAIL; -#endif -} - -int DISK_RIO(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_PROC - return getPROC("/proc/stat",3,2,value); -#else - return SYSINFO_RET_FAIL; -#endif -} - -int DISK_WIO(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_PROC - return getPROC("/proc/stat",4,2,value); -#else - return SYSINFO_RET_FAIL; -#endif -} - -int DISK_RBLK(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_PROC - return getPROC("/proc/stat",5,2,value); -#else - return SYSINFO_RET_FAIL; -#endif -} - -int DISK_WBLK(const char *cmd, const char *parameter,double *value) -{ -#ifdef HAVE_PROC - return getPROC("/proc/stat",6,2,value); -#else - return SYSINFO_RET_FAIL; -#endif -} - int STRVERSION(const char *cmd, const char *parameter,char **value) { static char version[]=ZABBIX_VERSION; |