diff options
-rw-r--r-- | sysutils/Makefile | 1 | ||||
-rw-r--r-- | sysutils/wmmemfree/Makefile | 32 | ||||
-rw-r--r-- | sysutils/wmmemfree/distinfo | 1 | ||||
-rw-r--r-- | sysutils/wmmemfree/files/mem_freebsd.c | 125 | ||||
-rw-r--r-- | sysutils/wmmemfree/files/mem_freebsd.h | 32 | ||||
-rw-r--r-- | sysutils/wmmemfree/files/patch-Makefile | 54 | ||||
-rw-r--r-- | sysutils/wmmemfree/files/patch-draw.c | 11 | ||||
-rw-r--r-- | sysutils/wmmemfree/files/patch-wmmemfree.c | 16 | ||||
-rw-r--r-- | sysutils/wmmemfree/pkg-descr | 4 | ||||
-rw-r--r-- | sysutils/wmmemfree/pkg-plist | 1 |
10 files changed, 277 insertions, 0 deletions
diff --git a/sysutils/Makefile b/sysutils/Makefile index 1a1ae63b212e..9862aa233d88 100644 --- a/sysutils/Makefile +++ b/sysutils/Makefile @@ -280,6 +280,7 @@ SUBDIR += wminet SUBDIR += wmlmmon SUBDIR += wmlongrun + SUBDIR += wmmemfree SUBDIR += wmmemload SUBDIR += wmmemmon SUBDIR += wmmon diff --git a/sysutils/wmmemfree/Makefile b/sysutils/wmmemfree/Makefile new file mode 100644 index 000000000000..408e0b0964a9 --- /dev/null +++ b/sysutils/wmmemfree/Makefile @@ -0,0 +1,32 @@ +# New ports collection makefile for: wmmemfree +# Date created: 29 Mar 2003 +# Whom: Alexey Dokuchaev <danfe@regency.nsu.ru> +# +# $FreeBSD$ +# + +PORTNAME= wmmemfree +PORTVERSION= 0.7 +CATEGORIES= sysutils windowmaker +MASTER_SITES= http://ibiblio.org/pub/linux/X11/xutils/ \ + ftp://ftp.ibiblio.org/pub/linux/X11/xutils/ + +MAINTAINER= danfe@regency.nsu.ru +COMMENT= Memory and swap monitoring dockapp + +USE_BZIP2= yes +USE_X_PREFIX= yes +USE_XPM= yes + +MAN1= ${PORTNAME}.1 + +post-patch: + @${CP} ${FILESDIR}/mem_freebsd.* ${WRKSRC} + +do-install: + @${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${PREFIX}/bin + @${CHMOD} g+s ${PREFIX}/bin/${PORTNAME} + @${CHOWN} root:kmem ${PREFIX}/bin/${PORTNAME} + @${INSTALL_MAN} ${WRKSRC}/${PORTNAME}.1 ${MANPREFIX}/man/man1 + +.include <bsd.port.mk> diff --git a/sysutils/wmmemfree/distinfo b/sysutils/wmmemfree/distinfo new file mode 100644 index 000000000000..a7183441ae3d --- /dev/null +++ b/sysutils/wmmemfree/distinfo @@ -0,0 +1 @@ +MD5 (wmmemfree-0.7.tar.bz2) = 6b478209d907dd2955828e71319af757 diff --git a/sysutils/wmmemfree/files/mem_freebsd.c b/sysutils/wmmemfree/files/mem_freebsd.c new file mode 100644 index 000000000000..2198f0069ca8 --- /dev/null +++ b/sysutils/wmmemfree/files/mem_freebsd.c @@ -0,0 +1,125 @@ +/* + * mem_freebsd.c - get memory status + * + * Copyright (C) 2003 Alexey Dokuchaev <danfe@regency.nsu.ru> + * Parts are Copyright (C) 1993-2003 FreeBSD Project + * + * 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., 59 Temple Street #330, Boston, MA 02111-1307, USA. + */ + +#include <sys/types.h> +#include <sys/vmmeter.h> +#include <fcntl.h> +#include <kvm.h> +#include <nlist.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#include "mem_freebsd.h" + +long long int mem_total, mem_used, mem_free, mem_buffers, mem_cached; +long long int swp_total, swp_used, swp_free; + +static kvm_t *kd; +struct nlist nlst[] = { {"_cnt"}, {"_bufspace"}, {0} }; + +void +mem_init(void) +{ + int pagesize; + + if (!(kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open"))) + { + perror("kvm_open"); + exit(1); + } + + kvm_nlist(kd, nlst); + + if (!nlst[0].n_type) + { + perror("kvm_nlist"); + exit(1); + } + + seteuid(getuid()); + setegid(getgid()); + + if (geteuid() != getuid() || getegid() != getgid()) + { + perror("sete?id"); + exit(1); + } +} + +void +mem_getfree() +{ + struct vmmeter vm; + struct kvm_swap sw; + int bufspace = 0; + unsigned long cnt_offset; + unsigned long bufspace_offset; + + static int firsttime = 1; + static int pagesin = -1; + static int pagesout = -1; + static time_t lasttime = 0; + time_t curtime; + + if ((kvm_read(kd, nlst[0].n_value, &vm, sizeof(vm)) + != sizeof(vm)) || + (kvm_read(kd, nlst[1].n_value, &bufspace, sizeof(bufspace)) + != sizeof(bufspace))) + { + perror("kvm_read"); + exit(1); + } + + mem_total = vm.v_page_count; + mem_free = vm.v_free_count; + mem_used = mem_total - mem_free; + mem_cached = vm.v_cache_count; + mem_buffers = bufspace / vm.v_page_size; + + /* + * Only calculate when first time or when changes took place. + * Do not call it more than 1 time per 2 seconds; otherwise + * it can eat up to 50% of CPU time on heavy swap activity. + */ + + curtime = time(NULL); + + if (firsttime || + (((vm.v_swappgsin > pagesin) || + (vm.v_swappgsout > pagesout)) + && curtime > lasttime + 1)) + { + if (kvm_getswapinfo(kd, &sw, 1, 0) >= 0 && + sw.ksw_total) + { + swp_total = sw.ksw_total; + swp_used = sw.ksw_used; + swp_free = swp_total - swp_used; + } + firsttime = 0; + lasttime = curtime; + } + pagesin = vm.v_swappgsin; + pagesout = vm.v_swappgsout; +} diff --git a/sysutils/wmmemfree/files/mem_freebsd.h b/sysutils/wmmemfree/files/mem_freebsd.h new file mode 100644 index 000000000000..d0f86dc328a5 --- /dev/null +++ b/sysutils/wmmemfree/files/mem_freebsd.h @@ -0,0 +1,32 @@ +/* + * mem_freebsd.h + * + * Copyright (C) 2003 Alexey Dokuchaev <danfe@regency.nsu.ru> + * Parts are Copyright (C) 1993-2003 FreeBSD Project + * + * 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., 59 Temple Street #330, Boston, MA 02111-1307, USA. + */ + +#ifndef __MEM_FREEBSD_H__ +#define __MEM_FREEBSD_H__ + +extern long long int mem_total, mem_used; +extern long long int mem_shared, mem_buffers, mem_cached; +extern long long int swp_total, swp_used; + +void mem_init(); +void mem_getfree(); + +#endif /* __MEM_FREEBSD_H__ */ diff --git a/sysutils/wmmemfree/files/patch-Makefile b/sysutils/wmmemfree/files/patch-Makefile new file mode 100644 index 000000000000..4587a4b54ed8 --- /dev/null +++ b/sysutils/wmmemfree/files/patch-Makefile @@ -0,0 +1,54 @@ +--- Makefile.orig Sat Mar 22 02:59:07 2003 ++++ Makefile Fri Apr 11 12:50:48 2003 +@@ -1,38 +1,17 @@ +-#Makefile ++CC ?= cc ++LDIR = -L${X11BASE}/lib ++IDIR = -I${X11BASE}/include + +-PROG=wmmemfree +-OBJS=dockapp.o draw.o mem_linux.o options.o wmmemfree.o ++LIBS = -lX11 -lXpm -lXext -lkvm + +-PREFIX=/usr/local +-BINDIR=$(PREFIX)/bin +-MANUALDIR=$(PREFIX)/share/man/man1 +-CC=gcc +-STRIP=strip +-FLAGS=-Wall -O2 +-RM=rm -f +-INST=install +-MANUAL=$(PROG).1 +-LIBS=-L/usr/X11R6/lib -lX11 -lXext -lXpm ++OBJS = dockapp.o\ ++ draw.o\ ++ mem_freebsd.o\ ++ options.o\ ++ wmmemfree.o + +-all: $(PROG) ++.c.o: ++ ${CC} ${CFLAGS} ${IDIR} ${DEFS} -c $< -o $*.o + +-$(PROG): $(OBJS) +- $(CC) -o $(PROG) $(OBJS) $(LIBS) +- $(STRIP) $(PROG) +-%.o: %.c +- $(CC) $(FLAGS) -c $< -o $@ +-clean: +- $(RM) $(OBJS) $(PROG) +-install: $(PROG) +- $(INST) -m 755 $(PROG) $(BINDIR) +- $(INST) -m 644 $(MANUAL) $(MANUALDIR) +-uninstall: +- $(RM) $(BINDIR)/$(PROG) +- $(RM) $(MANUALDIR)/$(MANUAL) +- +-dockapp.o: dockapp.c wmmemfree.h options.h draw.h xpm/bg.xpm xpm/on.xpm \ +- xpm/off.xpm xpm/numbers.xpm xpm/panel.xpm +-draw.o: draw.c dockapp.h draw.h mem_linux.h options.h +-mem_linux.o: mem_linux.c +-options.o: options.c wmmemfree.h options.h +-wmmemfree.o: wmmemfree.c wmmemfree.h dockapp.h draw.h options.h ++all: ${OBJS} ++ ${CC} ${CFLAGS} -o wmmemfree ${OBJS} ${LDIR} ${LIBS} diff --git a/sysutils/wmmemfree/files/patch-draw.c b/sysutils/wmmemfree/files/patch-draw.c new file mode 100644 index 000000000000..1e107ac48a6e --- /dev/null +++ b/sysutils/wmmemfree/files/patch-draw.c @@ -0,0 +1,11 @@ +--- draw.c.orig Fri Apr 11 12:47:47 2003 ++++ draw.c Fri Apr 11 12:47:54 2003 +@@ -24,7 +24,7 @@ + + #include "dockapp.h" + #include "draw.h" +-#include "mem_linux.h" ++#include "mem_freebsd.h" + #include "options.h" + + void draw_window() diff --git a/sysutils/wmmemfree/files/patch-wmmemfree.c b/sysutils/wmmemfree/files/patch-wmmemfree.c new file mode 100644 index 000000000000..62f224511132 --- /dev/null +++ b/sysutils/wmmemfree/files/patch-wmmemfree.c @@ -0,0 +1,16 @@ +--- wmmemfree.c.orig Fri Apr 11 12:48:52 2003 ++++ wmmemfree.c Fri Apr 11 12:50:05 2003 +@@ -43,10 +43,11 @@ + { + struct itimerval tv; + ++ mem_init(); + tv.it_value.tv_sec = 2; /* give 2 seconds for safety */ + tv.it_value.tv_usec = 0; +- tv.it_interval.tv_sec = 0; +- tv.it_interval.tv_usec = opt_milisecs * 1000; ++ tv.it_interval.tv_sec = opt_milisecs / 1000; ++ tv.it_interval.tv_usec = (opt_milisecs % 1000) * 1000; + signal(SIGALRM, handle_timer); + setitimer(ITIMER_REAL, &tv, NULL); + } diff --git a/sysutils/wmmemfree/pkg-descr b/sysutils/wmmemfree/pkg-descr new file mode 100644 index 000000000000..5f6845e03aaa --- /dev/null +++ b/sysutils/wmmemfree/pkg-descr @@ -0,0 +1,4 @@ +WMMemFree shows system memory usage. It runs as a dockapp for window +manager like WindowMaker or some other which supports dockapps. On +the top side you have your physical memory usage and on the bottom there +is your swap space usage. diff --git a/sysutils/wmmemfree/pkg-plist b/sysutils/wmmemfree/pkg-plist new file mode 100644 index 000000000000..fa26e7cd78aa --- /dev/null +++ b/sysutils/wmmemfree/pkg-plist @@ -0,0 +1 @@ +bin/wmmemfree |