summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxsysinfo/osf/uptime.c
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-10-09 16:05:33 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2005-10-09 16:05:33 +0000
commitc5cfd0af15bb548e7b2488224bf669c7be2cc3dc (patch)
tree033f60d972c202fe6431721f33f30a1b7c47aa80 /src/libs/zbxsysinfo/osf/uptime.c
parenta8a6fecd2d78e6cd897b0218841474e8dc47e9a8 (diff)
downloadzabbix-c5cfd0af15bb548e7b2488224bf669c7be2cc3dc.tar.gz
zabbix-c5cfd0af15bb548e7b2488224bf669c7be2cc3dc.tar.xz
zabbix-c5cfd0af15bb548e7b2488224bf669c7be2cc3dc.zip
Minor changes.
git-svn-id: svn://svn.zabbix.com/trunk@2157 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxsysinfo/osf/uptime.c')
-rw-r--r--src/libs/zbxsysinfo/osf/uptime.c217
1 files changed, 217 insertions, 0 deletions
diff --git a/src/libs/zbxsysinfo/osf/uptime.c b/src/libs/zbxsysinfo/osf/uptime.c
new file mode 100644
index 00000000..9455bef2
--- /dev/null
+++ b/src/libs/zbxsysinfo/osf/uptime.c
@@ -0,0 +1,217 @@
+/*
+** 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 SYSTEM_UPTIME(const char *cmd, const char *parameter,double *value)
+{
+#ifdef HAVE_SYSINFO_UPTIME
+ struct sysinfo info;
+
+ if( 0 == sysinfo(&info))
+ {
+ *value=(double)info.uptime;
+ return SYSINFO_RET_OK;
+ }
+ else
+ {
+ return SYSINFO_RET_FAIL;
+ }
+#else
+#ifdef HAVE_FUNCTION_SYSCTL_KERN_BOOTTIME
+ int mib[2],len;
+ struct timeval uptime;
+ int now;
+
+ mib[0]=CTL_KERN;
+ mib[1]=KERN_BOOTTIME;
+
+ len=sizeof(uptime);
+
+ if(sysctl(mib,2,&uptime,(size_t *)&len,NULL,0) != 0)
+ {
+ return SYSINFO_RET_FAIL;
+/* printf("Errno [%m]\n");*/
+ }
+
+ now=time(NULL);
+
+ *value=(double)(now-uptime.tv_sec);
+ return SYSINFO_RET_OK;
+#else
+/* Solaris */
+#ifdef HAVE_KSTAT_H
+ kstat_ctl_t *kc;
+ kstat_t *kp;
+ kstat_named_t *kn;
+
+ long hz;
+ long secs;
+
+ hz = sysconf(_SC_CLK_TCK);
+
+ /* open kstat */
+ kc = kstat_open();
+ if (0 == kc)
+ {
+ return SYSINFO_RET_FAIL;
+ }
+
+ /* read uptime counter */
+ kp = kstat_lookup(kc, "unix", 0, "system_misc");
+ if (0 == kp)
+ {
+ kstat_close(kc);
+ return SYSINFO_RET_FAIL;
+ }
+
+ if(-1 == kstat_read(kc, kp, 0))
+ {
+ kstat_close(kc);
+ return SYSINFO_RET_FAIL;
+ }
+ kn = (kstat_named_t*)kstat_data_lookup(kp, "clk_intr");
+ secs = kn->value.ul / hz;
+
+ /* close kstat */
+ kstat_close(kc);
+ *value=(double)secs;
+ return SYSINFO_RET_OK;
+#else
+ return SYSINFO_RET_FAIL;
+#endif
+#endif
+#endif
+}