summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxsysinfo/netbsd/diskspace.c
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-11-01 15:52:10 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-11-01 15:52:10 +0000
commit2c9ca1001703a1ba0ae7b6d4cd238ebd44148fdc (patch)
treefc0cf11a6f9aff4e59bcef0f20986dc08fed12f3 /src/libs/zbxsysinfo/netbsd/diskspace.c
parent12b9d9858224301d1abb19f08956964c6fabd9a0 (diff)
downloadzabbix-2c9ca1001703a1ba0ae7b6d4cd238ebd44148fdc.tar.gz
zabbix-2c9ca1001703a1ba0ae7b6d4cd238ebd44148fdc.tar.xz
zabbix-2c9ca1001703a1ba0ae7b6d4cd238ebd44148fdc.zip
- added new interface of sysinfo function for others platforms (Eugene)
git-svn-id: svn://svn.zabbix.com/trunk@2237 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxsysinfo/netbsd/diskspace.c')
-rw-r--r--src/libs/zbxsysinfo/netbsd/diskspace.c413
1 files changed, 169 insertions, 244 deletions
diff --git a/src/libs/zbxsysinfo/netbsd/diskspace.c b/src/libs/zbxsysinfo/netbsd/diskspace.c
index b0955ef6..e2120ac6 100644
--- a/src/libs/zbxsysinfo/netbsd/diskspace.c
+++ b/src/libs/zbxsysinfo/netbsd/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;
}