diff options
author | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-11-01 14:47:20 +0000 |
---|---|---|
committer | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2005-11-01 14:47:20 +0000 |
commit | 12b9d9858224301d1abb19f08956964c6fabd9a0 (patch) | |
tree | 5f389fdc2c5c66563eaf9ac3aa7a5311e0cf182a /src/libs/zbxsysinfo/aix/diskspace.c | |
parent | de267adc7399911d3d3339c8aa91bcab381ad50a (diff) | |
download | zabbix-12b9d9858224301d1abb19f08956964c6fabd9a0.tar.gz zabbix-12b9d9858224301d1abb19f08956964c6fabd9a0.tar.xz zabbix-12b9d9858224301d1abb19f08956964c6fabd9a0.zip |
- added support of new sysinfo function interface for aix (Eugene)
git-svn-id: svn://svn.zabbix.com/trunk@2236 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxsysinfo/aix/diskspace.c')
-rw-r--r-- | src/libs/zbxsysinfo/aix/diskspace.c | 413 |
1 files changed, 169 insertions, 244 deletions
diff --git a/src/libs/zbxsysinfo/aix/diskspace.c b/src/libs/zbxsysinfo/aix/diskspace.c index b0955ef6..e2120ac6 100644 --- a/src/libs/zbxsysinfo/aix/diskspace.c +++ b/src/libs/zbxsysinfo/aix/diskspace.c @@ -19,302 +19,227 @@ #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 +#include "common.h" +#include "sysinfo.h" -#ifdef HAVE_SYS_MOUNT_H - #include <sys/mount.h> +int get_fs_size_stat(char *fs, double *total, double *free, double *usage) +{ +#ifdef HAVE_SYS_STATVFS_H + struct statvfs s; +#else + struct statfs s; #endif -/* HP-UX */ -#ifdef HAVE_SYS_PSTAT_H - #include <sys/pstat.h> -#endif + assert(fs); -#ifdef HAVE_NETDB_H - #include <netdb.h> +#ifdef HAVE_SYS_STATVFS_H + if ( statvfs( fs, &s) != 0 ) +#else + if ( statfs( fs, &s) != 0 ) #endif + { + return SYSINFO_RET_FAIL; + } -/* Solaris */ -#ifdef HAVE_SYS_SWAP_H - #include <sys/swap.h> -#endif +#ifdef HAVE_SYS_STATVFS_H + if(total) + (*total) = (double)(s.f_blocks * (s.f_frsize / 1024.0)); + if(free) + (*free) = (double)(s.f_bavail * (s.f_frsize / 1024.0)); + if(usage) + (*usage) = (double)((s.f_blocks - s.f_bavail) * (s.f_frsize / 1024.0)); +#else + if(total) + (*total) = (double)(s.f_blocks * (s.f_bsize / 1024.0)); + if(free) + (*free) = (double)(s.f_bfree * (s.f_bsize / 1024.0)); + if(usage) + (*usage) = (double)((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)); +#endif + return SYSINFO_RET_OK; +} -/* FreeBSD */ -#ifdef HAVE_SYS_SYSCTL_H - #include <sys/sysctl.h> -#endif +static int VFS_FS_USED(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) +{ + char mountPoint[MAX_STRING_LEN]; + double value = 0; -/* Solaris */ -#ifdef HAVE_SYS_SYSCALL_H - #include <sys/syscall.h> -#endif + assert(result); -/* 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 + clean_result(result); -#ifdef HAVE_MACH_HOST_INFO_H - #include <mach/host_info.h> -#endif -#ifdef HAVE_MACH_MACH_HOST_H - #include <mach/mach_host.h> -#endif + if(num_param(param) > 1) + return SYSINFO_RET_FAIL; + if(get_param(param, 1, mountPoint, MAX_STRING_LEN) != 0) + return SYSINFO_RET_FAIL; -#ifdef HAVE_KSTAT_H - #include <kstat.h> -#endif + if(get_fs_size_stat(mountPoint, NULL, NULL, &value) != SYSINFO_RET_OK) + return SYSINFO_RET_FAIL; -#ifdef HAVE_LDAP - #include <ldap.h> -#endif + result->type |= AR_DOUBLE; + result->dbl = value; -#include "common.h" -#include "sysinfo.h" + return SYSINFO_RET_OK; +} -int VFS_FS_FREE(const char *cmd, const char *mountPoint,double *value, const char *msg, int mlen_max) +static int VFS_FS_FREE(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { -#ifdef HAVE_SYS_STATVFS_H - struct statvfs s; + char mountPoint[MAX_STRING_LEN]; + double value = 0; - if ( statvfs( (char *)mountPoint, &s) != 0 ) - { - return SYSINFO_RET_FAIL; - } + assert(result); -/* return s.f_bavail * (s.f_bsize / 1024.0);*/ - *value=s.f_bavail * (s.f_frsize / 1024.0); - return SYSINFO_RET_OK; -#else - struct statfs s; - long blocks_used; - long blocks_percent_used; + clean_result(result); - if ( statfs( (char *)mountPoint, &s) != 0 ) - { - return SYSINFO_RET_FAIL; - } - - if ( s.f_blocks > 0 ) { - blocks_used = s.f_blocks - s.f_bfree; - blocks_percent_used = (long) - (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); - -/* printf( - "%7.0f %7.0f %7.0f %5ld%% %s\n" - ,s.f_blocks * (s.f_bsize / 1024.0) - ,(s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0) - ,s.f_bavail * (s.f_bsize / 1024.0) - ,blocks_percent_used - ,mountPoint); -*/ - *value=s.f_bavail * (s.f_bsize / 1024.0); - return SYSINFO_RET_OK; + if(num_param(param) > 1) + return SYSINFO_RET_FAIL; - } + if(get_param(param, 1, mountPoint, MAX_STRING_LEN) != 0) + return SYSINFO_RET_FAIL; - return SYSINFO_RET_FAIL; -#endif + if(get_fs_size_stat(mountPoint, NULL, &value, NULL) != SYSINFO_RET_OK) + return SYSINFO_RET_FAIL; + + result->type |= AR_DOUBLE; + result->dbl = value; + + return SYSINFO_RET_OK; } -int VFS_FS_USED(const char *cmd, const char *mountPoint,double *value, const char *msg, int mlen_max) +static int VFS_FS_TOTAL(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { -#ifdef HAVE_SYS_STATVFS_H - struct statvfs s; + char mountPoint[MAX_STRING_LEN]; + double value = 0; - if ( statvfs( (char *)mountPoint, &s) != 0 ) - { - return SYSINFO_RET_FAIL; - } + assert(result); -/* return (s.f_blocks-s.f_bavail) * (s.f_bsize / 1024.0);*/ - *value=(s.f_blocks-s.f_bavail) * (s.f_frsize / 1024.0); - return SYSINFO_RET_OK; -#else - struct statfs s; - long blocks_used; - long blocks_percent_used; + clean_result(result); - if ( statfs( (char *)mountPoint, &s) != 0 ) - { - return SYSINFO_RET_FAIL; - } - - if ( s.f_blocks > 0 ) { - blocks_used = s.f_blocks - s.f_bfree; - blocks_percent_used = (long) - (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); - -/* printf( - "%7.0f %7.0f %7.0f %5ld%% %s\n" - ,s.f_blocks * (s.f_bsize / 1024.0) - ,(s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0) - ,s.f_bavail * (s.f_bsize / 1024.0) - ,blocks_percent_used - ,mountPoint); -*/ - *value=blocks_used * (s.f_bsize / 1024.0); - return SYSINFO_RET_OK; + if(num_param(param) > 1) + return SYSINFO_RET_FAIL; - } + if(get_param(param, 1, mountPoint, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + if(get_fs_size_stat(mountPoint, &value, NULL, NULL) != SYSINFO_RET_OK) + return SYSINFO_RET_FAIL; + + result->type |= AR_DOUBLE; + result->dbl = value; + + return SYSINFO_RET_OK; - return SYSINFO_RET_FAIL; -#endif } -int VFS_FS_TOTAL(const char *cmd, const char *mountPoint,double *value, const char *msg, int mlen_max) +static int VFS_FS_PFREE(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { -#ifdef HAVE_SYS_STATVFS_H - struct statvfs s; + char mountPoint[MAX_STRING_LEN]; + double tot_val = 0; + double free_val = 0; - if ( statvfs( (char *)mountPoint, &s) != 0 ) - { - return SYSINFO_RET_FAIL; - } + assert(result); -/* return s.f_blocks * (s.f_bsize / 1024.0);*/ - *value= s.f_blocks * (s.f_frsize / 1024.0); - return SYSINFO_RET_OK; -#else - struct statfs s; - long blocks_used; - long blocks_percent_used; + clean_result(result); - if ( statfs( (char *)mountPoint, &s) != 0 ) - { - return SYSINFO_RET_FAIL; - } - - if ( s.f_blocks > 0 ) { - blocks_used = s.f_blocks - s.f_bfree; - blocks_percent_used = (long) - (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); - -/* printf( - "%7.0f %7.0f %7.0f %5ld%% %s\n" - ,s.f_blocks * (s.f_bsize / 1024.0) - ,(s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0) - ,s.f_bavail * (s.f_bsize / 1024.0) - ,blocks_percent_used - ,mountPoint); -*/ - *value=s.f_blocks * (s.f_bsize / 1024.0); - return SYSINFO_RET_OK; + if(num_param(param) > 1) + return SYSINFO_RET_FAIL; - } + if(get_param(param, 1, mountPoint, MAX_STRING_LEN) != 0) + return SYSINFO_RET_FAIL; - return SYSINFO_RET_FAIL; -#endif + if(get_fs_size_stat(mountPoint, &tot_val, &free_val, NULL) != SYSINFO_RET_OK) + return SYSINFO_RET_FAIL; + + result->type |= AR_DOUBLE; + result->dbl = (100.0 * free_val) / tot_val; + + return SYSINFO_RET_OK; } -int VFS_FS_PUSED(const char *cmd, const char *mountPoint,double *value, const char *msg, int mlen_max) +static int VFS_FS_PUSED(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { - double total; - double used; + char mountPoint[MAX_STRING_LEN]; + double tot_val = 0; + double usg_val = 0; - if(SYSINFO_RET_OK != VFS_FS_TOTAL(cmd, mountPoint, &total, msg, mlen_max)) - { - return SYSINFO_RET_FAIL; - } + assert(result); - if(SYSINFO_RET_OK != VFS_FS_USED(cmd, mountPoint, &used, msg, mlen_max)) - { - return SYSINFO_RET_FAIL; - } + clean_result(result); - if(total == 0) - { - return SYSINFO_RET_FAIL; - } + if(num_param(param) > 1) + return SYSINFO_RET_FAIL; + + if(get_param(param, 1, mountPoint, MAX_STRING_LEN) != 0) + return SYSINFO_RET_FAIL; + + if(get_fs_size_stat(mountPoint, &tot_val, NULL, &usg_val) != SYSINFO_RET_OK) + return SYSINFO_RET_FAIL; - *value = 100*used/total; - return SYSINFO_RET_OK; + result->type |= AR_DOUBLE; + result->dbl = (100.0 * usg_val) / tot_val; + + return SYSINFO_RET_OK; } -int VFS_FS_PFREE(const char *cmd, const char *mountPoint,double *value, const char *msg, int mlen_max) +int VFS_FS_SIZE(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { - double total; - double free; - if(SYSINFO_RET_OK != VFS_FS_TOTAL(cmd, mountPoint, &total, msg, mlen_max)) - { - return SYSINFO_RET_FAIL; - } +#define FS_FNCLIST struct fs_fnclist_s +FS_FNCLIST +{ + char *mode; + int (*function)(); +}; - if(SYSINFO_RET_OK != VFS_FS_FREE(cmd, mountPoint, &free, msg, mlen_max)) + FS_FNCLIST fl[] = + { + {"free" , VFS_FS_FREE}, + {"total" , VFS_FS_TOTAL}, + {"used", VFS_FS_USED}, + {"pfree" , VFS_FS_PFREE}, + {"pused" , VFS_FS_PUSED}, + {0, 0} + }; + + char fsname[MAX_STRING_LEN]; + char mode[MAX_STRING_LEN]; + int i; + + assert(result); + + clean_result(result); + + if(num_param(param) > 2) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 1, fsname, MAX_STRING_LEN) != 0) + { + return SYSINFO_RET_FAIL; + } + + if(get_param(param, 2, mode, MAX_STRING_LEN) != 0) + { + mode[0] = '\0'; + } + if(mode[0] == '\0') { - return SYSINFO_RET_FAIL; + /* default parameter */ + sprintf(mode, "total"); } - - if(total == 0) + + for(i=0; fl[i].mode!=0; i++) { - return SYSINFO_RET_FAIL; + if(strncmp(mode, fl[i].mode, MAX_STRING_LEN)==0) + { + return (fl[i].function)(cmd, fsname, flags, result); + } } - - *value = 100*free/total; - return SYSINFO_RET_OK; + + return SYSINFO_RET_FAIL; } |