diff options
author | pav <pav@FreeBSD.org> | 2004-07-31 04:47:55 +0800 |
---|---|---|
committer | pav <pav@FreeBSD.org> | 2004-07-31 04:47:55 +0800 |
commit | a19a68fa783cb5c402323516a6aff35cd6ef81e2 (patch) | |
tree | b088cb694aa442e0f97128694b9a859163f98ef3 /sysutils/torsmo | |
parent | 0f54add31cf41e49a6ae89c6aa1432082bd192cb (diff) | |
download | freebsd-ports-gnome-a19a68fa783cb5c402323516a6aff35cd6ef81e2.tar.gz freebsd-ports-gnome-a19a68fa783cb5c402323516a6aff35cd6ef81e2.tar.zst freebsd-ports-gnome-a19a68fa783cb5c402323516a6aff35cd6ef81e2.zip |
Add torsmo, a system monitor that sits in the corner of your desktop. Torsmo can
show various information about your system and it's peripherals.
PR: ports/69743
Submitted by: Roman Bogorodskiy <bogorodskiy@inbox.ru>
Diffstat (limited to 'sysutils/torsmo')
-rw-r--r-- | sysutils/torsmo/Makefile | 44 | ||||
-rw-r--r-- | sysutils/torsmo/distinfo | 2 | ||||
-rw-r--r-- | sysutils/torsmo/files/freebsd.c | 369 | ||||
-rw-r--r-- | sysutils/torsmo/files/patch-Makefile.am | 15 | ||||
-rw-r--r-- | sysutils/torsmo/files/patch-configure.in | 35 | ||||
-rw-r--r-- | sysutils/torsmo/pkg-descr | 4 |
6 files changed, 469 insertions, 0 deletions
diff --git a/sysutils/torsmo/Makefile b/sysutils/torsmo/Makefile new file mode 100644 index 000000000000..060988df4a71 --- /dev/null +++ b/sysutils/torsmo/Makefile @@ -0,0 +1,44 @@ +# New ports collection makefile for: torsmo +# Date created: 2004-07-29 +# Whom: Roman Bogorodskiy <bogorodskiy@inbox.ru> +# +# $FreeBSD$ +# + +PORTNAME= torsmo +PORTVERSION= 0.17 +CATEGORIES= sysutils +MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} +MASTER_SITE_SUBDIR= ${PORTNAME} + +MAINTAINER= bogorodskiy@inbox.ru +COMMENT= System monitor that renders text on desktop + +USE_AUTOCONF_VER=259 +USE_AUTOMAKE_VER=14 +USE_X_PREFIX= yes +MAN1= torsmo.1 + +PLIST_FILES= bin/torsmo \ + %%EXAMPLESDIR%%/torsmorc.sample +PLIST_DIRS= %%EXAMPLESDIR%% +PORTDOCS= AUTHORS ChangeLog NEWS README + +.include <bsd.port.pre.mk> + +.if ${OSVERSION} < 500000 +BROKEN= does not build, use statvfs interface which is only present on FreeBSD 5.0 or newer +.endif + +post-extract: + @${CP} ${FILESDIR}/freebsd.c ${WRKSRC} + +post-install: +.if !defined(NOPORTDOCS) + @${MKDIR} ${DOCSDIR} + @cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR} +.endif + @${MKDIR} ${EXAMPLESDIR} + @${INSTALL_DATA} ${WRKSRC}/torsmorc.sample ${EXAMPLESDIR} + +.include <bsd.port.post.mk> diff --git a/sysutils/torsmo/distinfo b/sysutils/torsmo/distinfo new file mode 100644 index 000000000000..3582d3348d50 --- /dev/null +++ b/sysutils/torsmo/distinfo @@ -0,0 +1,2 @@ +MD5 (torsmo-0.17.tar.gz) = 8c82134cd78f9d4a7b6f6721ee2c16f9 +SIZE (torsmo-0.17.tar.gz) = 80286 diff --git a/sysutils/torsmo/files/freebsd.c b/sysutils/torsmo/files/freebsd.c new file mode 100644 index 000000000000..fed04d33cb53 --- /dev/null +++ b/sysutils/torsmo/files/freebsd.c @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2004 Roman Bogorodskiy <bogorodskiy@inbox.ru> + * + * $FreeBSD$ + */ + +#include "torsmo.h" +#include <fcntl.h> +#include <limits.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <kvm.h> +#include <sys/param.h> +#include <sys/resource.h> +#include <sys/sysctl.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/vmmeter.h> +#include <unistd.h> +#include <sys/user.h> +#include <sys/socket.h> +#include <net/if.h> +#include <net/if_mib.h> + +void net_init(); + +#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var)) + +static int getsysctl(char *name, void *ptr, size_t len) +{ + size_t nlen = len; + if (sysctlbyname(name, ptr, &nlen, NULL, 0) == -1) { + return -1; + } + + if (nlen != len) { + return -1; + } + + return 0; +} + +static kvm_t *kd = NULL; +struct ifmibdata *data = NULL; +size_t len = 0; + +static int swapmode(int *retavail, int *retfree) +{ + int n; + int pagesize = getpagesize(); + struct kvm_swap swapary[1]; + static int kd_init = 1; + + if(kd_init) { + kd_init = 0; + if ((kd = kvm_open("/dev/null", "/dev/null", "/dev/null", + O_RDONLY, "kvm_open")) == NULL) { + (void)fprintf(stderr, "Cannot read kvm\n"); + return -1; + } + } + + if(kd == NULL) { + return -1; + } + + *retavail = 0; + *retfree = 0; + +#define CONVERT(v) ((quad_t)(v) * pagesize / 1024) + + n = kvm_getswapinfo(kd, swapary, 1, 0); + if (n < 0 || swapary[0].ksw_total == 0) + return(0); + + *retavail = CONVERT(swapary[0].ksw_total); + *retfree = CONVERT(swapary[0].ksw_total - swapary[0].ksw_used); + + n = (int)((double)swapary[0].ksw_used * 100.0 / + (double)swapary[0].ksw_total); + + return n; +} + + +void prepare_update() { +} + +double get_uptime() +{ + int mib[2] = {CTL_KERN, KERN_BOOTTIME}; + struct timeval boottime; + time_t now; + int size = sizeof(boottime); + double uptime; + + if((sysctl(mib, 2, &boottime, &size, NULL, 0) != -1) && (boottime.tv_sec != 0)) { + time(&now); + uptime = now - boottime.tv_sec; + } else { + (void)fprintf(stderr, "Could not get uptime\n"); + uptime = 0; + } + + return uptime; +} + + +void update_meminfo() { + int total_pages, + inactive_pages, + free_pages; + int swap_avail, + swap_free; + + int pagesize = getpagesize(); + + if (GETSYSCTL("vm.stats.vm.v_page_count", total_pages)) + (void)fprintf(stderr, "Cannot read sysctl \"vm.stats.vm.v_page_count\"\n"); + + if (GETSYSCTL("vm.stats.vm.v_free_count", free_pages)) + (void)fprintf(stderr, "Cannot read sysctl \"vm.stats.vm.v_free_count\"\n"); + + if (GETSYSCTL("vm.stats.vm.v_inactive_count", inactive_pages)) + (void)fprintf(stderr, "Cannot read sysctl \"vm.stats.vm.v_inactive_count\"\n"); + + memmax = (total_pages*pagesize) >> 10; + mem = ((total_pages-free_pages-inactive_pages) * pagesize) >> 10; + + + if ((swapmode(&swap_avail, &swap_free)) >= 0) { + swapmax = swap_avail; + swap = (swap_avail - swap_free); + } else { + swapmax = 0; + swap = 0; + } +} + +void net_init() +{ +/* XXX */ +#if 0 + struct ifmibdata tempndata; + int numifaces; + size_t len2; + int mib[5], datamib[6]; + int i; + + mib[0] = CTL_NET; + mib[1] = PF_LINK; + mib[2] = NETLINK_GENERIC; + mib[3] = IFMIB_SYSTEM; + mib[4] = IFMIB_IFCOUNT; + + datamib[0] = CTL_NET; + datamib[1] = PF_LINK; + datamib[2] = NETLINK_GENERIC; + datamib[3] = IFMIB_IFDATA; + datamib[4] = 1; + datamib[5] = IFDATA_GENERAL; + + len = sizeof(struct ifmibdata); + len2 = sizeof(numifaces); + + if(sysctl(mib, 5, &numifaces, &len2, NULL, 0) < 0) + fprintf( stderr, "wmnet: failed to perform sysctl" ); + + for(i = 1; i <= numifaces; i++) + { + datamib[4] = i; + if(sysctl(datamib, 6, &tempndata, &len, NULL, 0) < 0) + { + fprintf( stderr, "wmnet: failed to get device(%d) data", i ); + break; + } + + } + + + /* calculate and allocate mem for ifmibdata containing the if stats */ + data = malloc(len); + +#endif +} + +void update_net_stats() { +#if 0 + static int rep; + unsigned int i; + char buf[256]; + double delta; + + /* get delta */ + delta = current_update_time - last_update_time; + if (delta <= 0.0001) + return; + + net_init(); + + /* read each interface */ + for (i=0; i<16; i++) { + struct net_stat *ns; + char *s, *p; + long long r, t, last_recv, last_trans; + int datamib[6]; + + ns = get_net_stat(s); + last_recv = ns->recv; + last_trans = ns->trans; + + datamib[0] = CTL_NET; + datamib[1] = PF_LINK; + datamib[2] = NETLINK_GENERIC; + datamib[3] = IFMIB_IFDATA; + datamib[4] = i; + datamib[5] = IFDATA_GENERAL; + + if (sysctl(datamib, 6, data, &len, NULL, 0) < 0 ) { + perror("sysctl"); + } + + r = data->ifmd_data.ifi_ipackets; + t = data->ifmd_data.ifi_opackets; + + if (r < ns->last_read_recv) + ns->recv += ((long long) 4294967295U - ns->last_read_recv) + r; + else + ns->recv += (r - ns->last_read_recv); + ns->last_read_recv = r; + + if (t < ns->last_read_trans) + ns->trans += ((long long) 4294967295U - ns->last_read_trans) + t; + else + ns->trans += (t - ns->last_read_trans); + ns->last_read_trans = t; + + /* calculate speeds */ + ns->recv_speed = (ns->recv - last_recv) / delta; + ns->trans_speed = (ns->trans - last_trans) / delta; + } + +#endif +} + +int get_total_processes() { + /* It's easier to use kvm here than sysctl */ + + int n_processes; + static int kd_init = 1; + + if (kd_init) { + kd_init = 0; + if ((kd = kvm_open("/dev/null", "/dev/null", "/dev/null", + O_RDONLY, "kvm_open")) == NULL) { + (void)fprintf(stderr, "Cannot read kvm\n"); + return 0; + } + } + + + if (kd != NULL) + kvm_getprocs(kd, KERN_PROC_ALL, 0, &n_processes); + else + return 0; + + return n_processes; +} + +int get_running_processes() { + static int kd_init = 1; + struct kinfo_proc *p; + int n_processes; + int i, + cnt = 0; + + if(kd_init) { + kd_init = 0; + if ((kd = kvm_open("/dev/null", "/dev/null", "/dev/null", O_RDONLY, "kvm_open")) == NULL) { + (void)fprintf(stderr, "Cannot read kvm\n"); + return 0; + } + } + + if (kd != NULL) { + p = kvm_getprocs(kd, KERN_PROC_ALL, 0, &n_processes); + for (i = 0; i<n_processes; i++) { + if (p[i].ki_stat == SRUN) + cnt++; + } + } else + return 0; + + return cnt; +} + +struct cpu_load_struct { + unsigned long load[5]; +}; + +struct cpu_load_struct fresh = {{0, 0, 0, 0, 0}}; +long cpu_used, oldtotal, oldused; + +void update_cpu_usage() { + long used, total; + long cp_time[CPUSTATES]; + size_t len = sizeof(cp_time); + + if (sysctlbyname("kern.cp_time", &cp_time, &len, NULL, 0) < 0) { + (void)fprintf(stderr, "Cannot get kern.cp_time"); + } + + fresh.load[0] = cp_time[CP_USER]; + fresh.load[1] = cp_time[CP_NICE]; + fresh.load[2] = cp_time[CP_SYS]; + fresh.load[3] = cp_time[CP_IDLE]; + fresh.load[4] = cp_time[CP_IDLE]; + + used = fresh.load[0] + fresh.load[1] + fresh.load[2]; + total = fresh.load[0] + fresh.load[1] + fresh.load[2] + fresh.load[3]; + + if ((total - oldtotal) != 0) + { + cpu_usage = ((double)(used - oldused)) / (double)(total - oldtotal); + } else { + cpu_usage = 0; + } + + oldused = used; + oldtotal = total; +} + +double get_i2c_info(int fd, int div) { + return 0; +} + +void get_load_average(double v[3]) { + getloadavg(v, 3); +} + +double get_acpi_temperature(int fd) { + double temp; + + temp = 0; + + return temp; +} + +void get_battery_stuff(char *buf, unsigned int n, int b) { +} + +int open_i2c_sensor(const char *dev, const char *type, int n, int *div) +{ + return 0; +} + +int open_acpi_temperature(const char *name) { + return 0; +} + +char* get_acpi_ac_adapter(void) +{ + return "blah"; +} + +char* get_acpi_fan() { + return ""; +} diff --git a/sysutils/torsmo/files/patch-Makefile.am b/sysutils/torsmo/files/patch-Makefile.am new file mode 100644 index 000000000000..067a421610cf --- /dev/null +++ b/sysutils/torsmo/files/patch-Makefile.am @@ -0,0 +1,15 @@ +--- Makefile.am.orig Thu Jul 29 08:32:01 2004 ++++ Makefile.am Thu Jul 29 08:32:10 2004 +@@ -8,7 +8,11 @@ + solaris = solaris.c + endif + +-torsmo_SOURCES = torsmo.c torsmo.h fs.c $(linux) $(solaris) ++if BUILD_FREEBSD ++freebsd = freebsd.c ++endif ++ ++torsmo_SOURCES = torsmo.c torsmo.h fs.c $(linux) $(solaris) $(freebsd) + + torsmo_LDFLAGS = $(X11_LIBS) + diff --git a/sysutils/torsmo/files/patch-configure.in b/sysutils/torsmo/files/patch-configure.in new file mode 100644 index 000000000000..1db7fab5336c --- /dev/null +++ b/sysutils/torsmo/files/patch-configure.in @@ -0,0 +1,35 @@ +--- configure.in.orig Thu Jul 29 08:30:12 2004 ++++ configure.in Thu Jul 29 08:30:23 2004 +@@ -9,7 +9,9 @@ + Linux*) + WANT_SYSINFO=yes + ;; +- ++ FreeBSD*) ++ WANT_KVM=yes ++ ;; + # Solaris doesn't work at all right now + # SunOS*) + # WANT_KSTAT=yes +@@ -24,6 +26,8 @@ + + AM_CONDITIONAL(BUILD_LINUX, test x$uname = xLinux) + AM_CONDITIONAL(BUILD_SOLARIS, test x$uname = xSunOS) ++AM_CONDITIONAL(BUILD_FREEBSD, test x$uname = xFreeBSD) ++ + + dnl OWN_WINDOW option + +@@ -108,6 +112,12 @@ + fi + fi + ++if test x$WANT_KVM = xyes; then ++ AC_CHECK_LIB(kvm, kvm_open, ++ LIBS="$LIBS -lkvm", ++ AC_MSG_ERROR([Could not find kvm_open in -lkvm.]) ++ ) ++fi + dnl Check getloadavg + + AC_MSG_CHECKING(for getloadavg) diff --git a/sysutils/torsmo/pkg-descr b/sysutils/torsmo/pkg-descr new file mode 100644 index 000000000000..83f2718265d1 --- /dev/null +++ b/sysutils/torsmo/pkg-descr @@ -0,0 +1,4 @@ +Torsmo is a system monitor that sits in the corner of your desktop. Torsmo can +show various information about your system and it's peripherals. + +WWW: http://torsmo.sourceforge.net/ |