diff options
author | krion <krion@FreeBSD.org> | 2003-11-09 00:15:15 +0800 |
---|---|---|
committer | krion <krion@FreeBSD.org> | 2003-11-09 00:15:15 +0800 |
commit | 11b6d049c7e780dc608982d78140a46a794da3d5 (patch) | |
tree | 26cc914ac7950126281dbb1e4ca55ec3c232ae03 /sysutils | |
parent | f9da175d1c378ca5d5399e0b53825bd28353667e (diff) | |
download | freebsd-ports-gnome-11b6d049c7e780dc608982d78140a46a794da3d5.tar.gz freebsd-ports-gnome-11b6d049c7e780dc608982d78140a46a794da3d5.tar.zst freebsd-ports-gnome-11b6d049c7e780dc608982d78140a46a794da3d5.zip |
- Update to version 2.5.5 [1]
* integrates a number of FreeBSD enhancements
and fixes a DoS bug
- Respect PTHREAD_LIBS and PTHREAD_CFLAGS [2]
PR: 59049
Submitted by: brooks [1], krion [2]
Diffstat (limited to 'sysutils')
9 files changed, 9 insertions, 883 deletions
diff --git a/sysutils/ganglia-monitor-core/Makefile b/sysutils/ganglia-monitor-core/Makefile index 52e4d38ec6c6..d9a408f46a06 100644 --- a/sysutils/ganglia-monitor-core/Makefile +++ b/sysutils/ganglia-monitor-core/Makefile @@ -6,7 +6,7 @@ # PORTNAME= ganglia-monitor-core -PORTVERSION= 2.5.4 +PORTVERSION= 2.5.5 CATEGORIES= sysutils net parallel MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ganglia @@ -22,8 +22,10 @@ LIB_DEPENDS= rrd.0:${PORTSDIR}/net/rrdtool .endif GNU_CONFIGURE= yes -CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ - LIBS="-L${LOCALBASE}/lib" +CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" +CPPFLAGS= -I${LOCALBASE}/include ${PTHREAD_CFLAGS} +LDFLAGS= -L${LOCALBASE}/lib ${PTHREAD_LIBS} + .if !defined (WITHOUT_GMETAD) CONFIGURE_ARGS+= --with-gmetad .endif @@ -59,6 +61,7 @@ post-patch: ${FIX_CONF_FILES} ${REINPLACE_CMD} -e "s|/var/lib/ganglia|/var/db/ganglia|g" \ ${FIX_DB_FILES} + ${REINPLACE_CMD} -e 's|-pthread||g' ${WRKSRC}/configure # Post-install # diff --git a/sysutils/ganglia-monitor-core/distinfo b/sysutils/ganglia-monitor-core/distinfo index 263b4f4a515f..c519ecd59897 100644 --- a/sysutils/ganglia-monitor-core/distinfo +++ b/sysutils/ganglia-monitor-core/distinfo @@ -1 +1 @@ -MD5 (ganglia-monitor-core-2.5.4.tar.gz) = 354b18077ba33738af5bcb9539ae854d +MD5 (ganglia-monitor-core-2.5.5.tar.gz) = dd26e770b7d06e6252875c8d81fa06bc diff --git a/sysutils/ganglia-monitor-core/files/patch-config.h.in b/sysutils/ganglia-monitor-core/files/patch-config.h.in deleted file mode 100644 index f094dc027b6b..000000000000 --- a/sysutils/ganglia-monitor-core/files/patch-config.h.in +++ /dev/null @@ -1,16 +0,0 @@ - -$FreeBSD$ - ---- config.h.in.orig Tue Oct 28 14:41:30 2003 -+++ config.h.in Tue Oct 28 14:41:41 2003 -@@ -3,8 +3,8 @@ - /* AIX */ - #undef AIX - --/* BSD */ --#undef BSD -+/* FREEBSD */ -+#undef FREEBSD - - /* CPU_VENDOR_OS */ - #undef CPU_VENDOR_OS diff --git a/sysutils/ganglia-monitor-core/files/patch-configure b/sysutils/ganglia-monitor-core/files/patch-configure deleted file mode 100644 index 6e977ba1b3ce..000000000000 --- a/sysutils/ganglia-monitor-core/files/patch-configure +++ /dev/null @@ -1,14 +0,0 @@ - -$FreeBSD$ - ---- configure.orig Mon Oct 27 16:51:34 2003 -+++ configure Mon Oct 27 16:52:23 2003 -@@ -11458,7 +11458,7 @@ - - - cat >>confdefs.h <<\_ACEOF --#define BSD 1 -+#define FREEBSD 1 - _ACEOF - ;; - *cygwin*) metric_source="cygwin.c" diff --git a/sysutils/ganglia-monitor-core/files/patch-gmond_key__metrics.h b/sysutils/ganglia-monitor-core/files/patch-gmond_key__metrics.h deleted file mode 100644 index ad0b44ce7289..000000000000 --- a/sysutils/ganglia-monitor-core/files/patch-gmond_key__metrics.h +++ /dev/null @@ -1,21 +0,0 @@ - -$FreeBSD$ - ---- gmond/key_metrics.h.orig Mon Oct 27 16:47:42 2003 -+++ gmond/key_metrics.h Mon Oct 27 16:48:12 2003 -@@ -69,6 +69,15 @@ - cpu_avm, - cpu_vm, - #endif -+#ifdef FREEBSD -+ bytes_in, -+ bytes_out, -+ pkts_in, -+ pkts_out, -+ disk_total, -+ disk_free, -+ part_max_used, -+#endif - num_key_metrics - } key_metrics; - #endif diff --git a/sysutils/ganglia-monitor-core/files/patch-gmond_machines_freebsd.c b/sysutils/ganglia-monitor-core/files/patch-gmond_machines_freebsd.c deleted file mode 100644 index 3916982f2644..000000000000 --- a/sysutils/ganglia-monitor-core/files/patch-gmond_machines_freebsd.c +++ /dev/null @@ -1,748 +0,0 @@ - -$FreeBSD$ - ---- gmond/machines/freebsd.c.orig Tue Jul 29 10:56:38 2003 -+++ gmond/machines/freebsd.c Mon Oct 27 17:02:26 2003 -@@ -9,9 +9,11 @@ - */ - - #include <kvm.h> --#include <fcntl.h> -+ - #include <sys/param.h> -+#include <sys/mount.h> - #include <sys/sysctl.h> -+#include <sys/time.h> - #include <sys/user.h> - #if __FreeBSD_version < 500101 - #include <sys/dkstat.h> -@@ -20,12 +22,35 @@ - #endif - #include <sys/stat.h> - #include <vm/vm_param.h> -+ -+#include <sys/socket.h> -+#include <net/if.h> -+#include <net/if_dl.h> -+#include <net/route.h> -+ - #include <unistd.h> -+#include <err.h> -+#include <fcntl.h> -+#include <limits.h> -+#include <paths.h> -+ -+#include "dnet.h" - #include "ganglia.h" - #include "metric_typedefs.h" - - #define MIB_SWAPINFO_SIZE 3 - -+#ifndef MIN_NET_POLL_INTERVAL -+#define MIN_NET_POLL_INTERVAL 0.5 -+#endif -+ -+#ifndef UINT64_MAX -+#define UINT64_MAX ULLONG_MAX -+#endif -+ -+#define timertod(tvp) \ -+ ((double)(tvp)->tv_sec + (double)(tvp)->tv_usec/(1000*1000)) -+ - #ifndef XSWDEV_VERSION - #define XSWDEV_VERSION 1 - struct xswdev { -@@ -37,14 +62,32 @@ - }; - #endif - -+struct traffic { -+ uint64_t in_bytes; -+ uint64_t out_bytes; -+ uint64_t in_pkts; -+ uint64_t out_pkts; -+}; -+ -+static void get_netbw(double *, double *, double *, double *); -+static uint64_t counterdiff(uint64_t, uint64_t, uint64_t, uint64_t); -+ -+ -+static char *makenetvfslist(void); -+static size_t regetmntinfo(struct statfs **, long, const char **); -+static int checkvfsname(const char *, const char **); -+static const char **makevfslist(char *); -+static float find_disk_space(double *, double *); -+ - static int use_vm_swap_info = 0; - static int mibswap[MIB_SWAPINFO_SIZE]; - static size_t mibswap_size; - static kvm_t *kd = NULL; - static int pagesize; -+static int skipvfs; - - /* Function prototypes */ --long percentages(int cnt, int *out, register long *new, -+static long percentages(int cnt, int *out, register long *new, - register long *old, long *diffs); - - /* -@@ -64,10 +107,25 @@ - if (sysctlnametomib("vm.swap_info", mibswap, &mibswap_size) == -1) { - kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "metric_init()"); - } else { -+ /* -+ * Versions of FreeBSD with the swap mib generally have a version -+ * of libkvm that doesn't need root for simple proc access so we -+ * just open /dev/null to give us a working handle here. This is -+ * bogus, but only a few pre-release versions of 5.0 are -+ * affected by the bogosity and people running those should -+ * upgrade. -+ */ -+ kd = kvm_open(_PATH_DEVNULL, NULL, NULL, O_RDONLY, "metric_init()"); - use_vm_swap_info = 1; - } - pagesize = getpagesize(); - -+ /* -+ * Call get_netbw once to initalize the counters. -+ */ -+ -+ get_netbw(NULL, NULL, NULL, NULL); -+ - val.int32 = SYNAPSE_SUCCESS; - return val; - } -@@ -124,7 +182,7 @@ - g_val_t val; - struct kvm_swap swap[1]; - struct xswdev xsw; -- size_t mibsize, size; -+ size_t size; - int totswap, n; - val.uint32 = 0; - totswap = 0; -@@ -366,9 +424,41 @@ - g_val_t - proc_run_func( void ) - { -+ struct kinfo_proc *kp; -+ int i; -+ int state; -+ int nentries; -+ int what = KERN_PROC_ALL; - g_val_t val; - - val.uint32 = 0; -+ -+ if (kd == NULL) -+ goto output; -+#ifdef KERN_PROC_NOTHREADS -+ what |= KERN_PROC_NOTHREADS -+#endif -+ if ((kp = kvm_getprocs(kd, what, 0, &nentries)) == 0 || nentries < 0) -+ goto output; -+ -+ for (i = 0; i < nentries; kp++, i++) { -+#ifdef KINFO_PROC_SIZE -+ state = kp->ki_stat; -+#else -+ state = kp->kp_proc.p_stat; -+#endif -+ switch(state) { -+ case SRUN: -+ case SIDL: -+ val.uint32++; -+ break; -+ } -+ } -+ -+ if (val.uint32 > 0) -+ val.uint32--; -+ -+output: - return val; - } - -@@ -461,7 +551,6 @@ - return val; - } - --#include "dnet.h" - - static int - find_mtu(const struct intf_entry *entry, void *arg) -@@ -509,8 +598,8 @@ - * $FreeBSD$ - */ - --long percentages(int cnt, int *out, register long *new, -- register long *old, long *diffs) { -+static long percentages(int cnt, int *out, register long *new, -+ register long *old, long *diffs) { - - register int i; - register long change; -@@ -549,3 +638,563 @@ - return(total_change); - } - -+g_val_t -+pkts_in_func ( void ) -+{ -+ double in_pkts; -+ g_val_t val; -+ -+ get_netbw(NULL, NULL, &in_pkts, NULL); -+ -+ val.f = (float)in_pkts; -+ return val; -+} -+ -+g_val_t -+pkts_out_func ( void ) -+{ -+ double out_pkts; -+ g_val_t val; -+ -+ get_netbw(NULL, NULL, NULL, &out_pkts); -+ -+ val.f = (float)out_pkts; -+ return val; -+} -+ -+g_val_t -+bytes_out_func ( void ) -+{ -+ double out_bytes; -+ g_val_t val; -+ -+ get_netbw(NULL, &out_bytes, NULL, NULL); -+ -+ val.f = (float)out_bytes; -+ return val; -+} -+ -+g_val_t -+bytes_in_func ( void ) -+{ -+ double in_bytes; -+ g_val_t val; -+ -+ get_netbw(&in_bytes, NULL, NULL, NULL); -+ -+ val.f = (float)in_bytes; -+ return val; -+} -+ -+/* -+ * Disk space reporting functions from Linux code. find_disk_space() -+ * body derived from FreeBSD df and mount code. -+ */ -+ -+g_val_t -+disk_free_func( void ) -+{ -+ double total_free=0.0; -+ double total_size=0.0; -+ g_val_t val; -+ -+ find_disk_space(&total_size, &total_free); -+ -+ val.d = total_free; -+ return val; -+} -+ -+g_val_t -+disk_total_func( void ) -+{ -+ double total_free=0.0; -+ double total_size=0.0; -+ g_val_t val; -+ -+ find_disk_space(&total_size, &total_free); -+ -+ val.d = total_size; -+ return val; -+} -+ -+g_val_t -+part_max_used_func( void ) -+{ -+ double total_free=0.0; -+ double total_size=0.0; -+ float most_full; -+ g_val_t val; -+ -+ most_full = find_disk_space(&total_size, &total_free); -+ -+ val.f = most_full; -+ return val; -+} -+ -+ -+/* -+ * Copyright (c) 1980, 1983, 1990, 1993, 1994, 1995 -+ * The Regents of the University of California. All rights reserved. -+ * (c) UNIX System Laboratories, Inc. -+ * All or some portions of this file are derived from material licensed -+ * to the University of California by American Telephone and Telegraph -+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with -+ * the permission of UNIX System Laboratories, Inc. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions -+ * are met: -+ * 1. Redistributions of source code must retain the above copyright -+ * notice, this list of conditions and the following disclaimer. -+ * 2. Redistributions in binary form must reproduce the above copyright -+ * notice, this list of conditions and the following disclaimer in the -+ * documentation and/or other materials provided with the distribution. -+ * 3. All advertising materials mentioning features or use of this software -+ * must display the following acknowledgement: -+ * This product includes software developed by the University of -+ * California, Berkeley and its contributors. -+ * 4. Neither the name of the University nor the names of its contributors -+ * may be used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -+ * SUCH DAMAGE. -+ * -+ * -+ * NOTE: The copyright of UC Berkeley's Berkeley Software Distribution -+ * ("BSD") source has been updated. The copyright addendum may be found -+ * at ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change. -+ */ -+ -+ -+ -+static float -+find_disk_space(double *total, double *tot_avail) -+{ -+ struct statfs *mntbuf; -+ const char *fstype; -+ const char **vfslist; -+ size_t i, mntsize; -+ size_t used, availblks; -+ const double reported_units = 1e9; -+ double toru; -+ float pct; -+ float most_full = 0.0; -+ -+ *total = 0.0; -+ *tot_avail = 0.0; -+ -+ fstype = "ufs"; -+ -+ vfslist = makevfslist(makenetvfslist()); -+ -+ mntsize = getmntinfo(&mntbuf, MNT_NOWAIT); -+ mntsize = regetmntinfo(&mntbuf, mntsize, vfslist); -+ for (i = 0; i < mntsize; i++) { -+ if ((mntbuf[i].f_flags & MNT_IGNORE) == 0) { -+ used = mntbuf[i].f_blocks - mntbuf[i].f_bfree; -+ availblks = mntbuf[i].f_bavail + used; -+ pct = (availblks == 0 ? 100.0 : -+ (double)used / (double)availblks * 100.0); -+ if (pct > most_full) -+ most_full = pct; -+ -+ toru = reported_units/mntbuf[i].f_bsize; -+ *total += mntbuf[i].f_blocks / toru; -+ *tot_avail += mntbuf[i].f_bavail / toru; -+ } -+ } -+ -+ return most_full; -+} -+ -+/* -+ * Make a pass over the file system info in ``mntbuf'' filtering out -+ * file system types not in vfslist and possibly re-stating to get -+ * current (not cached) info. Returns the new count of valid statfs bufs. -+ */ -+static size_t -+regetmntinfo(struct statfs **mntbufp, long mntsize, const char **vfslist) -+{ -+ int i, j; -+ struct statfs *mntbuf; -+ -+ if (vfslist == NULL) -+ return (getmntinfo(mntbufp, MNT_WAIT)); -+ -+ mntbuf = *mntbufp; -+ for (j = 0, i = 0; i < mntsize; i++) { -+ if (checkvfsname(mntbuf[i].f_fstypename, vfslist)) -+ continue; -+ (void)statfs(mntbuf[i].f_mntonname,&mntbuf[j]); -+ j++; -+ } -+ return (j); -+} -+ -+static int -+checkvfsname(vfsname, vfslist) -+ const char *vfsname; -+ const char **vfslist; -+{ -+ -+ if (vfslist == NULL) -+ return (0); -+ while (*vfslist != NULL) { -+ if (strcmp(vfsname, *vfslist) == 0) -+ return (skipvfs); -+ ++vfslist; -+ } -+ return (!skipvfs); -+} -+ -+static const char ** -+makevfslist(fslist) -+ char *fslist; -+{ -+ const char **av; -+ int i; -+ char *nextcp; -+ -+ if (fslist == NULL) -+ return (NULL); -+ if (fslist[0] == 'n' && fslist[1] == 'o') { -+ fslist += 2; -+ skipvfs = 1; -+ } -+ for (i = 0, nextcp = fslist; *nextcp; nextcp++) -+ if (*nextcp == ',') -+ i++; -+ if ((av = malloc((size_t)(i + 2) * sizeof(char *))) == NULL) { -+ warnx("malloc failed"); -+ return (NULL); -+ } -+ nextcp = fslist; -+ i = 0; -+ av[i++] = nextcp; -+ while ((nextcp = strchr(nextcp, ',')) != NULL) { -+ *nextcp++ = '\0'; -+ av[i++] = nextcp; -+ } -+ av[i++] = NULL; -+ return (av); -+} -+ -+static char * -+makenetvfslist(void) -+{ -+#if __FreeBSD_version > 500000 -+ char *str, *strptr, **listptr; -+ struct xvfsconf *xvfsp, *keep_xvfsp; -+ size_t buflen; -+ int cnt, i, maxvfsconf; -+ -+ if (sysctlbyname("vfs.conflist", NULL, &buflen, NULL, 0) < 0) { -+ warn("sysctl(vfs.conflist)"); -+ return (NULL); -+ } -+ xvfsp = malloc(buflen); -+ if (xvfsp == NULL) { -+ warnx("malloc failed"); -+ return (NULL); -+ } -+ keep_xvfsp = xvfsp; -+ if (sysctlbyname("vfs.conflist", xvfsp, &buflen, NULL, 0) < 0) { -+ warn("sysctl(vfs.conflist)"); -+ free(keep_xvfsp); -+ return (NULL); -+ } -+ maxvfsconf = buflen / sizeof(struct xvfsconf); -+ -+ if ((listptr = malloc(sizeof(char*) * maxvfsconf)) == NULL) { -+ warnx("malloc failed"); -+ free(keep_xvfsp); -+ return (NULL); -+ } -+ -+ for (cnt = 0, i = 0; i < maxvfsconf; i++) { -+ if (xvfsp->vfc_flags & (VFCF_NETWORK|VFCF_SYNTHETIC|VFCF_LOOPBACK)) { -+ listptr[cnt++] = strdup(xvfsp->vfc_name); -+ if (listptr[cnt-1] == NULL) { -+ warnx("malloc failed"); -+ free(listptr); -+ free(keep_xvfsp); -+ return (NULL); -+ } -+ } -+ xvfsp++; -+ } -+ -+ if (cnt == 0 || -+ (str = malloc(sizeof(char) * (32 * cnt + cnt + 2))) == NULL) { -+ if (cnt > 0) -+ warnx("malloc failed"); -+ free(listptr); -+ free(keep_xvfsp); -+ return (NULL); -+ } -+ -+ *str = 'n'; *(str + 1) = 'o'; -+ for (i = 0, strptr = str + 2; i < cnt; i++, strptr++) { -+ strncpy(strptr, listptr[i], 32); -+ strptr += strlen(listptr[i]); -+ *strptr = ','; -+ free(listptr[i]); -+ } -+ *(--strptr) = NULL; -+ -+ free(keep_xvfsp); -+#else -+ char *str, *strptr, **listptr; -+ int mib[3], maxvfsconf, cnt=0, i; -+ size_t miblen; -+ struct ovfsconf *ptr; -+ -+ mib[0] = CTL_VFS; mib[1] = VFS_GENERIC; mib[2] = VFS_MAXTYPENUM; -+ miblen=sizeof(maxvfsconf); -+ if (sysctl(mib, (unsigned int)(sizeof(mib) / sizeof(mib[0])), -+ &maxvfsconf, &miblen, NULL, 0)) { -+ warnx("sysctl failed"); -+ return (NULL); -+ } -+ -+ if ((listptr = malloc(sizeof(char*) * maxvfsconf)) == NULL) { -+ warnx("malloc failed"); -+ return (NULL); -+ } -+ -+ for (ptr = getvfsent(); ptr; ptr = getvfsent()) -+ if (ptr->vfc_flags & (VFCF_NETWORK|VFCF_SYNTHETIC|VFCF_LOOPBACK)) { -+ listptr[cnt++] = strdup(ptr->vfc_name); -+ if (listptr[cnt-1] == NULL) { -+ warnx("malloc failed"); -+ return (NULL); -+ } -+ } -+ -+ if (cnt == 0 || -+ (str = malloc(sizeof(char) * (32 * cnt + cnt + 2))) == NULL) { -+ if (cnt > 0) -+ warnx("malloc failed"); -+ free(listptr); -+ return (NULL); -+ } -+ -+ *str = 'n'; *(str + 1) = 'o'; -+ for (i = 0, strptr = str + 2; i < cnt; i++, strptr++) { -+ strncpy(strptr, listptr[i], 32); -+ strptr += strlen(listptr[i]); -+ *strptr = ','; -+ free(listptr[i]); -+ } -+ *(--strptr) = NULL; -+ -+#endif -+ free(listptr); -+ return (str); -+ -+} -+ -+static void -+get_netbw(double *in_bytes, double *out_bytes, -+ double *in_pkts, double *out_pkts) -+{ -+#ifdef NETBW_DEBUG -+ char name[IFNAMSIZ]; -+#endif -+ struct if_msghdr *ifm, *nextifm; -+ struct sockaddr_dl *sdl; -+ char *buf, *lim, *next; -+ size_t needed; -+ int mib[6]; -+ int i; -+ int index; -+ static double ibytes, obytes, ipkts, opkts; -+ struct timeval this_time; -+ struct timeval time_diff; -+ struct traffic traffic; -+ static struct timeval last_time = {0,0}; -+ static int indexes = 0; -+ static int *seen = NULL; -+ static struct traffic *lastcount = NULL; -+ static double o_ibytes, o_obytes, o_ipkts, o_opkts; -+ -+ ibytes = obytes = ipkts = opkts = 0.0; -+ -+ mib[0] = CTL_NET; -+ mib[1] = PF_ROUTE; -+ mib[2] = 0; -+ mib[3] = 0; /* address family */ -+ mib[4] = NET_RT_IFLIST; -+ mib[5] = 0; /* interface index */ -+ -+ gettimeofday(&this_time, NULL); -+ timersub(&this_time, &last_time, &time_diff); -+ if (timertod(&time_diff) < MIN_NET_POLL_INTERVAL) { -+ goto output; -+ } -+ -+ -+ if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) -+ errx(1, "iflist-sysctl-estimate"); -+ if ((buf = malloc(needed)) == NULL) -+ errx(1, "malloc"); -+ if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) -+ errx(1, "actual retrieval of interface table"); -+ lim = buf + needed; -+ -+ next = buf; -+ while (next < lim) { -+ -+ ifm = (struct if_msghdr *)next; -+ -+ if (ifm->ifm_type == RTM_IFINFO) { -+ sdl = (struct sockaddr_dl *)(ifm + 1); -+ } else { -+ fprintf(stderr, "out of sync parsing NET_RT_IFLIST\n"); -+ fprintf(stderr, "expected %d, got %d\n", RTM_IFINFO, -+ ifm->ifm_type); -+ fprintf(stderr, "msglen = %d\n", ifm->ifm_msglen); -+ fprintf(stderr, "buf:%p, next:%p, lim:%p\n", buf, next, -+ lim); -+ exit (1); -+ } -+ -+ next += ifm->ifm_msglen; -+ while (next < lim) { -+ nextifm = (struct if_msghdr *)next; -+ -+ if (nextifm->ifm_type != RTM_NEWADDR) -+ break; -+ -+ next += nextifm->ifm_msglen; -+ } -+ -+ if ((ifm->ifm_flags & IFF_LOOPBACK) || -+ !(ifm->ifm_flags & IFF_UP)) -+ continue; -+ -+ index = ifm->ifm_index; -+ -+ /* If we don't have a previous value yet, make a slot. */ -+ if (index >= indexes) { -+ seen = realloc(seen, sizeof(*seen)*(index+1)); -+ lastcount = realloc(lastcount, -+ sizeof(*lastcount)*(index+1)); -+ -+ /* Initalize the new slots */ -+ for (i = indexes; i <= index; i++) { -+ seen[i] = 0; -+ } -+ indexes = index+1; -+ } -+ -+ /* -+ * If this is the first time we've seen this interface, -+ * set the last values to the current ones. That causes -+ * us to see no bandwidth on the interface the first -+ * time, but that's OK. -+ */ -+ if (!seen[index]) { -+ seen[index] = 1; -+ lastcount[index].in_bytes = ifm->ifm_data.ifi_ibytes; -+ lastcount[index].out_bytes = ifm->ifm_data.ifi_obytes; -+ lastcount[index].in_pkts = ifm->ifm_data.ifi_ipackets; -+ lastcount[index].out_pkts = ifm->ifm_data.ifi_opackets; -+ } -+ -+ traffic.in_bytes = counterdiff(lastcount[index].in_bytes, -+ ifm->ifm_data.ifi_ibytes, ULONG_MAX, 0); -+ traffic.out_bytes = counterdiff(lastcount[index].out_bytes, -+ ifm->ifm_data.ifi_obytes, ULONG_MAX, 0); -+ traffic.in_pkts = counterdiff(lastcount[index].in_pkts, -+ ifm->ifm_data.ifi_ipackets, ULONG_MAX, 0); -+ traffic.out_pkts = counterdiff(lastcount[index].out_pkts, -+ ifm->ifm_data.ifi_opackets, ULONG_MAX, 0); -+ -+ lastcount[index].in_bytes = ifm->ifm_data.ifi_ibytes; -+ lastcount[index].out_bytes = ifm->ifm_data.ifi_obytes; -+ lastcount[index].in_pkts = ifm->ifm_data.ifi_ipackets; -+ lastcount[index].out_pkts = ifm->ifm_data.ifi_opackets; -+ -+#ifdef NETBW_DEBUG -+ if_indextoname(index, name); -+ printf("%s: \n", name); -+ printf("\topackets=%llu ipackets=%llu\n", -+ traffic.out_pkts, traffic.in_pkts); -+ printf("\tobytes=%llu ibytes=%llu\n", -+ traffic.out_bytes, traffic.in_bytes); -+#endif -+ -+ if (timerisset(&last_time)) { -+ ibytes += (double)traffic.in_bytes / timertod(&time_diff); -+ obytes += (double)traffic.out_bytes / timertod(&time_diff); -+ ipkts += (double)traffic.in_pkts / timertod(&time_diff); -+ opkts += (double)traffic.out_pkts / timertod(&time_diff); -+ } -+ } -+ free(buf); -+ -+ /* Save the values from this time */ -+ last_time = this_time; -+ o_ibytes = ibytes; -+ o_obytes = obytes; -+ o_ipkts = ipkts; -+ o_opkts = opkts; -+ -+output: -+ if (in_bytes != NULL) -+ *in_bytes = o_ibytes; -+ if (out_bytes != NULL) -+ *out_bytes = o_obytes; -+ if (in_pkts != NULL) -+ *in_pkts = o_ipkts; -+ if (out_pkts != NULL) -+ *out_pkts = o_opkts; -+} -+ -+static uint64_t -+counterdiff(uint64_t oldval, uint64_t newval, uint64_t maxval, uint64_t maxdiff) -+{ -+ uint64_t diff; -+ -+ if (maxdiff == 0) -+ maxdiff = maxval; -+ -+ /* Paranoia */ -+ if (oldval > maxval || newval > maxval) -+ return 0; -+ -+ /* -+ * Tackle the easy case. Don't worry about maxdiff here because -+ * we're SOL if it happens (i.e. assuming a reset just makes -+ * matters worse). -+ */ -+ if (oldval <= newval) -+ return (newval - oldval); -+ -+ /* -+ * Now the tricky part. If we assume counters never get reset, -+ * this is easy. Unfortunaly, they do get reset on some -+ * systems, so we need to try and deal with that. Our huristic -+ * is that if out difference is greater then maxdiff and newval -+ * is less or equal to maxdiff, then we've probably been reset -+ * rather then actually wrapping. Obviously, you need to be -+ * careful to poll often enough that you won't exceed maxdiff or -+ * you will get undersized numbers when you do wrap. -+ */ -+ diff = maxval - oldval + newval; -+ if (diff > maxdiff && newval <= maxdiff) -+ return newval; -+ -+ return diff; -+} diff --git a/sysutils/ganglia-monitor-core/files/patch-gmond_metric.h b/sysutils/ganglia-monitor-core/files/patch-gmond_metric.h deleted file mode 100644 index 7c7d8eeb06bc..000000000000 --- a/sysutils/ganglia-monitor-core/files/patch-gmond_metric.h +++ /dev/null @@ -1,65 +0,0 @@ - -$FreeBSD$ - ---- gmond/metric.h.orig Mon Oct 27 16:47:53 2003 -+++ gmond/metric.h Mon Oct 27 16:48:15 2003 -@@ -88,6 +88,18 @@ - - #endif - -+#ifdef FREEBSD -+ -+extern g_val_t bytes_in_func(void); -+extern g_val_t bytes_out_func(void); -+extern g_val_t pkts_in_func(void); -+extern g_val_t pkts_out_func(void); -+extern g_val_t disk_total_func(void); -+extern g_val_t disk_free_func(void); -+extern g_val_t part_max_used_func(void); -+ -+#endif -+ - #define INIT 0, 0, {0}, {0} - #define KEY(NAME) { #NAME, NAME ##_func, INIT - -@@ -182,7 +194,8 @@ - KEY(pkts_in), 256, 30, 40, 200, 300, g_float, "packets/sec", "%.2f" }, - KEY(pkts_out), 256, 30, 40, 200, 300, g_float, "packets/sec", "%.2f" }, - --/* The amount of disk space could change - hot-swap, mounts, etc. check: 30-60min. */ -+/* -+ * The amount of disk space could change - hot-swap, mounts, etc. check: 30-60min. */ - KEY(disk_total), 1, 1800, 3600, 900, 1200, g_double, "GB", "%.3f" }, - KEY(disk_free), 1, 30, 40, 120, 180, g_double, "GB", "%.3f" }, - KEY(part_max_used), 1, 30, 40, 120, 180, g_float, "%", "%.1f" } -@@ -198,6 +211,30 @@ - KEY(mem_rm), 1024, 30, 40, 120, 180, g_uint32, "KB", "%u" }, - KEY(mem_avm), 1024, 30, 40, 120, 180, g_uint32, "KB", "%u" }, - KEY(mem_vm), 1024, 30, 40, 120, 180, g_uint32, "KB", "%u" } -+ -+#endif -+ -+#ifdef FREEBSD -+ -+, -+/* -+ * (sacerdoti) Experiments have shown gmon resting bandwidth is around -+ * 2KB/s for a 128-node cluster. We set the value thresh of these -+ * metrics to double that. -+ * -+ */ -+KEY(bytes_out), 4096, 30, 40, 200, 300, g_float, "bytes/sec", "%.2f" }, -+KEY(bytes_in), 4096, 30, 40, 200, 300, g_float, "bytes/sec", "%.2f" }, -+KEY(pkts_in), 256, 30, 40, 200, 300, g_float, "packets/sec", "%.2f" }, -+KEY(pkts_out), 256, 30, 40, 200, 300, g_float, "packets/sec", "%.2f" }, -+ -+/* -+ * The amount of disk space could change - hot-swap, mounts, etc. -+ * check: 30-60min. -+ */ -+KEY(disk_total), 1, 1800, 3600, 900, 1200, g_double, "GB", "%.3f" }, -+KEY(disk_free), 1, 30, 40, 120, 180, g_double, "GB", "%.3f" }, -+KEY(part_max_used), 1, 30, 40, 120, 180, g_float, "%", "%.1f" } - - #endif - }; diff --git a/sysutils/ganglia-monitor-core/files/patch-lib_ganglia_net.h b/sysutils/ganglia-monitor-core/files/patch-lib_ganglia_net.h deleted file mode 100644 index 0ca2ad99970d..000000000000 --- a/sysutils/ganglia-monitor-core/files/patch-lib_ganglia_net.h +++ /dev/null @@ -1,14 +0,0 @@ - -$FreeBSD$ - ---- lib/ganglia/net.h.orig Mon Oct 27 16:53:00 2003 -+++ lib/ganglia/net.h Mon Oct 27 16:53:07 2003 -@@ -12,7 +12,7 @@ - #include <netdb.h> - #include <ganglia/llist.h> - #include <ganglia/net.h> --#ifdef BSD -+#ifdef FREEBSD - #include <sys/types.h> - #endif - #include <netinet/in.h> diff --git a/sysutils/ganglia-monitor-core/pkg-plist b/sysutils/ganglia-monitor-core/pkg-plist index 4144d046aa47..c049c2190b15 100644 --- a/sysutils/ganglia-monitor-core/pkg-plist +++ b/sysutils/ganglia-monitor-core/pkg-plist @@ -38,4 +38,5 @@ lib/libganglia.a %%GMETAD%%sbin/gmetad sbin/gmond @dirrm include/ganglia -@unexec rmdir /var/db/ganglia/rrds /var/db/ganglia 2>/dev/null || true +@unexec rmdir %D/var/db/ganglia/rrds 2>/dev/null || true +@unexec rmdir %D/var/db/ganglia 2>/dev/null || true |