mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -04:00
Update to Version 3.1 this includes several bugfixes:
o Fix compiler -Wall warnings o Calc etime correct for multi CPU machines o Show disk stats for "ad" disk devices, too o Count number of network in/out packets correctly o Get free swapspace only every 10 time intervals to limit CPU usage.
This commit is contained in:
parent
97652512b1
commit
f5c1a46665
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=41231
12 changed files with 321 additions and 148 deletions
|
@ -6,7 +6,7 @@
|
|||
#
|
||||
|
||||
PORTNAME= xperfmon++
|
||||
PORTVERSION= 3.0
|
||||
PORTVERSION= 3.1
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= ftp://ftp.uni-bielefeld.de/pub/systems/FreeBSD/lkoeller/ \
|
||||
ftp://ftp.u-aizu.ac.jp/pub/misc/tools/xperfmon/ \
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Handel the FreeBSD Versions in a central file!
|
||||
*
|
||||
* $FreeBSD$
|
||||
* $Id: fbsd_vers.h,v 3.2 2001/04/10 20:02:26 lkoeller Exp lkoeller $
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
|
@ -14,9 +14,9 @@
|
|||
#if (defined(BSD) && (BSD >= 199506))
|
||||
# include <osreldate.h>
|
||||
#else
|
||||
# error You can compile this xperfmon++ V3.0 only on FreeBSD-3.X systems. xperfmon++ V1.31 up to V2.0 runs on FreeBSD 2.[12].X system!
|
||||
# error You can compile this xperfmon++ V3.1 only on FreeBSD-3.X/4.X systems. xperfmon++ V1.31 up to V2.0 runs on FreeBSD 2.[12].X system!
|
||||
#endif
|
||||
|
||||
#if __FreeBSD_version < 300000
|
||||
# error You can compile this xperfmon++ V3.0 only on FreeBSD-3.X systems. xperfmon++ V1.31 up to V2.0 runs on FreeBSD 2.[12].X system!
|
||||
# error You can compile this xperfmon++ V3.1 only on FreeBSD-3.X/4.X systems. xperfmon++ V1.31 up to V2.0 runs on FreeBSD 2.[12].X system!
|
||||
#endif
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
*
|
||||
* Work has started on 7th Sep 1998 on Northsea island Föhr.
|
||||
*
|
||||
* $FreeBSD$
|
||||
* $Id: freebsd_system.c,v 3.8 2001/04/10 19:39:44 lkoeller Exp lkoeller $
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -105,7 +105,7 @@
|
|||
*/
|
||||
|
||||
#ifndef LINT
|
||||
static char rcsid[] = "$FreeBSD$";
|
||||
static char rcsid[] = "$Id: freebsd_system.c,v 3.8 2001/04/10 19:39:44 lkoeller Exp lkoeller $";
|
||||
#endif
|
||||
|
||||
#include "fbsd_vers.h"
|
||||
|
@ -121,7 +121,6 @@ static char rcsid[] = "$FreeBSD$";
|
|||
#include <sys/socket.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/dkstat.h>
|
||||
#include <sys/buf.h>
|
||||
#include <sys/time.h>
|
||||
#include <vm/vm.h>
|
||||
#include <net/if.h>
|
||||
|
@ -139,6 +138,7 @@ static char rcsid[] = "$FreeBSD$";
|
|||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <unistd.h>
|
||||
#include <ctype.h>
|
||||
|
@ -223,8 +223,7 @@ static int interrupts, old_interrupts;
|
|||
static struct statinfo cur, last;
|
||||
static struct devstat_match *matches = NULL;
|
||||
static struct device_selection *dev_select = NULL;
|
||||
static devstat_select_mode select_mode;
|
||||
static int num_matches = 0, num_devices = 0;
|
||||
static int num_matches = 0, num_devices = 0, ncpu;
|
||||
static int num_selected = 0, num_selections = 0;
|
||||
static int num_devices_specified = 0, maxshowdevs;
|
||||
static long generation, select_generation;
|
||||
|
@ -254,23 +253,29 @@ static void get_nfsstat(void);
|
|||
void
|
||||
sys_setup(void)
|
||||
{
|
||||
int size;
|
||||
|
||||
get_namelist(getbootfile(), _PATH_MEM);
|
||||
|
||||
/* To make calc of etime independent of number of CPUs */
|
||||
size = sizeof(ncpu);
|
||||
if (sysctlbyname("hw.ncpu", &ncpu, &size, NULL, 0) < 0)
|
||||
ncpu = 1;
|
||||
|
||||
/* Initialize all stats, i.e. global variables */
|
||||
get_cpustat();
|
||||
get_load();
|
||||
get_ttystat();
|
||||
interrupts=0;
|
||||
get_interrupts();
|
||||
init_diskio();
|
||||
get_diskio();
|
||||
|
||||
/*
|
||||
* To force first scale of 'free swapspace' to 100%, we need this hack!
|
||||
* Wee use a value < 0 cause it's not a valid value!
|
||||
*/
|
||||
current_values[FREE_MEM] = -0.4 * SCALE_HACK;
|
||||
|
||||
get_netstat();
|
||||
|
||||
/*
|
||||
* To force first scale of 'free swapspace' to 100%, we need
|
||||
* set it the first time by hand!
|
||||
*/
|
||||
current_values[FREE_MEM] = 100 * SCALE_HACK;
|
||||
/*
|
||||
* Check if we have NFS in the kernel
|
||||
*/
|
||||
|
@ -287,7 +292,7 @@ sys_setup(void)
|
|||
void
|
||||
update_stats(void)
|
||||
{
|
||||
static int firsttime = 1;
|
||||
static int firsttime = 1, i = FREE_MEM_INT;
|
||||
/*
|
||||
* For any stat we need etime, so get it!
|
||||
*/
|
||||
|
@ -312,15 +317,18 @@ update_stats(void)
|
|||
current_values[INTERRUPTS] = (interrupts - old_interrupts)/etime * SCALE_HACK;
|
||||
}
|
||||
|
||||
/*
|
||||
* The first time called, we want to get 100%
|
||||
* for the full scale of the graph!
|
||||
*/
|
||||
if (perfmon[FREE_MEM] && !firsttime)
|
||||
current_values[FREE_MEM] =
|
||||
(current_values[FREE_MEM] < 0 ? 100.0 * SCALE_HACK : get_swapspace() * SCALE_HACK);
|
||||
else
|
||||
--firsttime;
|
||||
if (perfmon[FREE_MEM] && !firsttime) {
|
||||
/* Calc swapspace only every FREE_MEM_INT intervals */
|
||||
if ( i == FREE_MEM_INT ) {
|
||||
i = 1;
|
||||
current_values[FREE_MEM] = get_swapspace() * SCALE_HACK;
|
||||
} else
|
||||
i++;
|
||||
} else {
|
||||
/* First time called we set freeswap to 100% to have full scale!*/
|
||||
firsttime--;
|
||||
current_values[FREE_MEM] = 100 * SCALE_HACK;
|
||||
}
|
||||
|
||||
if (perfmon[DISK_TRANSFERS] || perfmon[DISK_MB] ||
|
||||
perfmon[TAPE_TRANSFERS] || perfmon[TAPE_MB] ||
|
||||
|
@ -341,6 +349,9 @@ update_stats(void)
|
|||
(packets.input - old_packets.input)/etime * SCALE_HACK;
|
||||
current_values[ OUTPUT_PACKETS] =
|
||||
(packets.output - old_packets.output)/etime * SCALE_HACK;
|
||||
/* LK!!! DEBUG
|
||||
printf("input: %f output: %f\n",current_values[INPUT_PACKETS]/SCALE_HACK,
|
||||
current_values[ OUTPUT_PACKETS]/SCALE_HACK); */
|
||||
current_values[COLLISION_PACKETS] =
|
||||
(packets.collisions - old_packets.collisions)/etime * SCALE_HACK;
|
||||
}
|
||||
|
@ -402,7 +413,7 @@ get_namelist(kernel_name, memory_name)
|
|||
time(&now);
|
||||
nintv = now - boottime;
|
||||
if (nintv <= 0 || nintv > 60*60*24*365*10)
|
||||
errx(1, "Time makes no sense ... namelist must be wrong", NULL);
|
||||
errx(1, "Time makes no sense ... namelist must be wrong");
|
||||
}
|
||||
|
||||
|
||||
|
@ -442,6 +453,7 @@ get_cpustat(void)
|
|||
etime = 1.0;
|
||||
|
||||
etime /= (float)hz;
|
||||
etime /= ncpu;
|
||||
|
||||
/*
|
||||
* scale to percent
|
||||
|
@ -461,7 +473,7 @@ get_load(void)
|
|||
loadavg[0] = 0.0;
|
||||
if (getloadavg(loadavg, sizeof(loadavg)/sizeof(loadavg[0])) == -1) {
|
||||
fprintf(stderr, "xperfmon++: getloadavg() returned no values\n");
|
||||
return;
|
||||
return(0.0);
|
||||
}
|
||||
return(loadavg[0]);
|
||||
}
|
||||
|
@ -490,12 +502,13 @@ get_interrupts(void)
|
|||
unsigned long *intrcnt;
|
||||
int nintr;
|
||||
|
||||
old_interrupts = interrupts;
|
||||
|
||||
nintr = namelist[X_EINTRCNT].n_value - namelist[X_INTRCNT].n_value;
|
||||
if ((intrcnt = (unsigned long *)malloc((size_t) nintr)) == NULL)
|
||||
err(1, "xperfmon++: malloc failed in get_interrupts()");
|
||||
nintr /= sizeof(long);
|
||||
kread(X_INTRCNT, intrcnt, (size_t)nintr*sizeof(long));
|
||||
old_interrupts = interrupts;
|
||||
for (i = 0, interrupts = 0; i < nintr; i++)
|
||||
interrupts += *(intrcnt + i);
|
||||
free(intrcnt);
|
||||
|
@ -521,7 +534,7 @@ get_nfsstat(void)
|
|||
size_t size = sizeof(nfsstats);
|
||||
if (sysctlbyname("vfs.nfs.nfsstats", &nfsstats, &size, (void *)0, (size_t)0) < 0) {
|
||||
#endif
|
||||
fprintf(stderr, "xperfmon++: get_nfsstat(): Can?%t get NFS statistics with sysctl()\n");
|
||||
fprintf(stderr, "xperfmon++: get_nfsstat(): Can't get NFS statistics with sysctl()\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -619,7 +632,7 @@ get_swapspace(void)
|
|||
struct kvm_swap swapary[1];
|
||||
|
||||
n = kvm_getswapinfo(kd, swapary, 1, 0);
|
||||
if (n < 0)
|
||||
if (n < 0 || swapary[0].ksw_total == 0)
|
||||
return(0);
|
||||
|
||||
percentfree = ((((double)swapary[0].ksw_total -
|
||||
|
@ -729,6 +742,7 @@ static void
|
|||
get_netstat(void)
|
||||
{
|
||||
off_t ifnetaddr;
|
||||
char name[32], tname[16], *interface = '\0';
|
||||
|
||||
if ((ifnetaddr = namelist[N_IFNET].n_value) != 0) {
|
||||
struct ifnet ifnet;
|
||||
|
@ -748,9 +762,15 @@ get_netstat(void)
|
|||
while (ifnetaddr || ifaddraddr) {
|
||||
if (ifaddraddr == 0) {
|
||||
ifnetfound = ifnetaddr;
|
||||
if(kvm_read(kd, ifnetaddr, (char *)&ifnet, sizeof ifnet) == -1)
|
||||
/* Get stats and interface name to select a specific one (TODO) */
|
||||
if(kvm_read(kd, ifnetaddr, (char *)&ifnet, sizeof ifnet) == -1 ||
|
||||
kvm_read(kd, (u_long)ifnet.if_name, (char *)tname, 16) == -1)
|
||||
return;
|
||||
tname[15] = '\0';
|
||||
ifnetaddr = (u_long)ifnet.if_link.tqe_next;
|
||||
snprintf(name, 32, "%s%d", tname, ifnet.if_unit);
|
||||
if (interface != 0 && (strcmp(name, interface) != 0))
|
||||
continue;
|
||||
ifaddraddr = (u_long)ifnet.if_addrhead.tqh_first;
|
||||
}
|
||||
if (kvm_read(kd, ifaddraddr, (char *)&ifa, sizeof ifa) == -1) {
|
||||
|
@ -758,9 +778,9 @@ get_netstat(void)
|
|||
continue;
|
||||
}
|
||||
ifaddraddr = (u_long)ifa.ifa_link.tqe_next;
|
||||
|
||||
packets.input += ifnet.if_ipackets;
|
||||
packets.output += ifnet.if_opackets;
|
||||
/* Normalize number of packets, we count interface four timess */
|
||||
packets.input += (ifnet.if_ipackets >> 2);
|
||||
packets.output += (ifnet.if_opackets >> 2);
|
||||
packets.collisions += ifnet.if_collisions;
|
||||
}
|
||||
}
|
||||
|
@ -773,7 +793,7 @@ get_netstat(void)
|
|||
static void
|
||||
init_diskio(void)
|
||||
{
|
||||
int retval, i;
|
||||
int retval;
|
||||
|
||||
cur.dinfo = (struct devinfo *) malloc(sizeof(struct devinfo));
|
||||
last.dinfo = (struct devinfo *) malloc(sizeof(struct devinfo));
|
||||
|
@ -823,11 +843,10 @@ init_diskio(void)
|
|||
static void
|
||||
get_diskio(void)
|
||||
{
|
||||
register int i, dn;
|
||||
register int dn;
|
||||
long double busy_seconds;
|
||||
long double transfers_per_second, mb_per_second;
|
||||
struct devinfo *tmp_dinfo;
|
||||
int retval;
|
||||
|
||||
tmp_dinfo = last.dinfo;
|
||||
last.dinfo = cur.dinfo;
|
||||
|
@ -890,7 +909,8 @@ get_diskio(void)
|
|||
errx(1, "xperfmon++: %s", devstat_errbuf);
|
||||
|
||||
if (strcmp(cur.dinfo->devices[di].device_name, "da") == 0 ||
|
||||
strcmp(cur.dinfo->devices[di].device_name, "wd") == 0) {
|
||||
strcmp(cur.dinfo->devices[di].device_name, "ad") == 0 ||
|
||||
strcmp(cur.dinfo->devices[di].device_name, "wd") == 0) {
|
||||
#ifdef DEBUG
|
||||
printf( "da%d: %Lf %Lf\n", cur.dinfo->devices[di].unit_number, transfers_per_second, mb_per_second);
|
||||
#endif
|
||||
|
@ -904,8 +924,8 @@ get_diskio(void)
|
|||
diskstat.sa_trsf += transfers_per_second;
|
||||
diskstat.sa_mb += mb_per_second;
|
||||
}
|
||||
if (strcmp(cur.dinfo->devices[di].device_name, "cd") == 0 ||
|
||||
strcmp(cur.dinfo->devices[di].device_name, "acd") == 0) {
|
||||
if (strcmp(cur.dinfo->devices[di].device_name, "cd") == 0 ||
|
||||
strcmp(cur.dinfo->devices[di].device_name, "acd") == 0) {
|
||||
#ifdef DEBUG
|
||||
printf( "cd%d: %Lf %Lf\n", cur.dinfo->devices[di].unit_number, transfers_per_second, mb_per_second);
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
*** ../xperfmon++/StripChart.c Wed Jul 27 22:29:30 1994
|
||||
--- ./StripChart.c Sun Jan 10 21:14:40 1999
|
||||
--- ./StripChart.c Tue Apr 10 21:49:59 2001
|
||||
***************
|
||||
*** 1,4 ****
|
||||
! /* $XConsortium: StripChart.c,v 1.20 91/05/24 17:20:42 converse Exp $ */
|
||||
|
@ -11,7 +11,7 @@
|
|||
! * Enhancement and error correction for FreeBSD-3.X
|
||||
! * COPYRIGHT 1998 by Lars Köller <Lars.Koeller@Uni-Bielefeld.de>
|
||||
! *
|
||||
! * $Id: StripChart.c,v 3.8 1999/01/10 20:14:30 lkoeller Exp lkoeller $
|
||||
! * $Id: StripChart.c,v 3.9 2001/04/10 19:49:34 lkoeller Exp lkoeller $
|
||||
! */
|
||||
|
||||
/***********************************************************
|
||||
|
@ -86,7 +86,7 @@
|
|||
******************************************************************/
|
||||
|
||||
+ #ifndef LINT
|
||||
+ static char rcsid[] = "$Id: StripChart.c,v 3.8 1999/01/10 20:14:30 lkoeller Exp lkoeller $";
|
||||
+ static char rcsid[] = "$Id: StripChart.c,v 3.9 2001/04/10 19:49:34 lkoeller Exp lkoeller $";
|
||||
+ #endif
|
||||
+
|
||||
+ #include "fbsd_vers.h"
|
||||
|
@ -203,7 +203,11 @@
|
|||
* going to hold off until then.
|
||||
*/
|
||||
***************
|
||||
*** 295,301 ****
|
||||
*** 291,301 ****
|
||||
XtIntervalId *id; /* unused */
|
||||
{
|
||||
PerfChartWidget w = (PerfChartWidget)client_data;
|
||||
- XGCValues myXGCV;
|
||||
double value, checkValue;
|
||||
Display *dpy = XtDisplay(w);
|
||||
Window win = XtWindow(w);
|
||||
|
@ -211,7 +215,10 @@
|
|||
/* if (w->strip_chart.update > 0)
|
||||
w->strip_chart.interval_id =
|
||||
XtAppAddTimeOut(XtWidgetToApplicationContext( (Widget) w),
|
||||
--- 324,330 ----
|
||||
--- 320,329 ----
|
||||
XtIntervalId *id; /* unused */
|
||||
{
|
||||
PerfChartWidget w = (PerfChartWidget)client_data;
|
||||
double value, checkValue;
|
||||
Display *dpy = XtDisplay(w);
|
||||
Window win = XtWindow(w);
|
||||
|
@ -232,7 +239,7 @@
|
|||
if (value > w->strip_chart.max_value) {
|
||||
w->strip_chart.max_value = value;
|
||||
if (w->strip_chart.max_value > w->strip_chart.scale) {
|
||||
--- 340,350 ----
|
||||
--- 339,349 ----
|
||||
|
||||
XtCallCallbacks( (Widget)w, XtNgetValue, (XtPointer)&value );
|
||||
|
||||
|
@ -254,7 +261,7 @@
|
|||
|
||||
w->strip_chart.valuedata[w->strip_chart.interval] = value;
|
||||
if (XtIsRealized((Widget)w)) {
|
||||
--- 352,359 ----
|
||||
--- 351,358 ----
|
||||
w->strip_chart.interval = repaint_window(w, 0, (int) w->core.width);
|
||||
}
|
||||
}
|
||||
|
@ -325,7 +332,7 @@
|
|||
w->strip_chart.currentBG = w->strip_chart.okColor;
|
||||
}
|
||||
}
|
||||
--- 361,420 ----
|
||||
--- 360,419 ----
|
||||
(int)(w->core.height * value) / w->strip_chart.scale);
|
||||
|
||||
/* Check for high warnings and alarms */
|
||||
|
@ -409,7 +416,7 @@
|
|||
|
||||
if (w->strip_chart.points != NULL) {
|
||||
w->strip_chart.points[0].x = w->strip_chart.interval;
|
||||
--- 422,442 ----
|
||||
--- 421,441 ----
|
||||
|
||||
if ( !w->strip_chart.fillRect ) { /* draw line graph */
|
||||
int y = (int) (w->core.height -
|
||||
|
@ -432,7 +439,7 @@
|
|||
if (w->strip_chart.points != NULL) {
|
||||
w->strip_chart.points[0].x = w->strip_chart.interval;
|
||||
***************
|
||||
*** 434,440 ****
|
||||
*** 434,455 ****
|
||||
#define XDS(s) XDrawString(XtDisplay(w), XtWindow(w), \
|
||||
w->strip_chart.hiGC, x, y, s, strlen(s))
|
||||
|
||||
|
@ -440,16 +447,13 @@
|
|||
repaint_window(w, left, width)
|
||||
PerfChartWidget w;
|
||||
int left, width;
|
||||
--- 463,469 ----
|
||||
#define XDS(s) XDrawString(XtDisplay(w), XtWindow(w), \
|
||||
w->strip_chart.hiGC, x, y, s, strlen(s))
|
||||
|
||||
! static int
|
||||
repaint_window(w, left, width)
|
||||
PerfChartWidget w;
|
||||
int left, width;
|
||||
***************
|
||||
*** 448,455 ****
|
||||
{
|
||||
! register int i, j;
|
||||
register int next = w->strip_chart.interval;
|
||||
int scale = w->strip_chart.scale;
|
||||
int scalewidth = 0;
|
||||
! int x, x1, x2, y, y1, y2;
|
||||
char numstring[24];
|
||||
|
||||
/* Compute the minimum scale required to graph the data, but don't go
|
||||
lower than min_scale. */
|
||||
|
@ -458,7 +462,21 @@
|
|||
if (scale < w->strip_chart.min_scale)
|
||||
scale = w->strip_chart.min_scale;
|
||||
|
||||
--- 477,486 ----
|
||||
--- 462,485 ----
|
||||
#define XDS(s) XDrawString(XtDisplay(w), XtWindow(w), \
|
||||
w->strip_chart.hiGC, x, y, s, strlen(s))
|
||||
|
||||
! static int
|
||||
repaint_window(w, left, width)
|
||||
PerfChartWidget w;
|
||||
int left, width;
|
||||
{
|
||||
! register int i;
|
||||
register int next = w->strip_chart.interval;
|
||||
int scale = w->strip_chart.scale;
|
||||
int scalewidth = 0;
|
||||
! int x, y, y1;
|
||||
char numstring[24];
|
||||
|
||||
/* Compute the minimum scale required to graph the data, but don't go
|
||||
lower than min_scale. */
|
||||
|
@ -478,7 +496,7 @@
|
|||
XClearWindow (XtDisplay (w), XtWindow (w));
|
||||
|
||||
}
|
||||
--- 492,498 ----
|
||||
--- 491,497 ----
|
||||
|
||||
SetPoints(w);
|
||||
|
||||
|
@ -512,7 +530,7 @@
|
|||
x = LABEL_ROOM - XTW(numstring);
|
||||
y = w->strip_chart.font_height - 4;
|
||||
XDS(numstring); /* draw max value */
|
||||
--- 510,540 ----
|
||||
--- 509,539 ----
|
||||
/* draw titles */
|
||||
|
||||
if ( w->strip_chart.topLabel ) {
|
||||
|
@ -561,7 +579,7 @@
|
|||
else {
|
||||
/* If this is not the left most point, then draw a line
|
||||
* connecting this point with the one to its left.
|
||||
--- 549,562 ----
|
||||
--- 548,561 ----
|
||||
|
||||
if ( i == left && left + 1 == width && width != next ) {
|
||||
y1 = (int) (w->core.height -
|
||||
|
@ -585,7 +603,7 @@
|
|||
i, /* x */
|
||||
y, /* y */
|
||||
(unsigned int) 1, /* width */
|
||||
--- 573,579 ----
|
||||
--- 572,578 ----
|
||||
int y = (int) (w->core.height -
|
||||
(int)(w->core.height * w->strip_chart.valuedata[i]) /
|
||||
w->strip_chart.scale);
|
||||
|
@ -602,7 +620,7 @@
|
|||
for (i = 1; i < w->strip_chart.scale; i++) {
|
||||
j = i * ((int)w->core.height / w->strip_chart.scale);
|
||||
XDrawLine(dpy, win, w->strip_chart.hiGC, left , j, scalewidth, j);
|
||||
--- 582,588 ----
|
||||
--- 581,587 ----
|
||||
|
||||
}
|
||||
|
||||
|
@ -611,6 +629,25 @@
|
|||
j = i * ((int)w->core.height / w->strip_chart.scale);
|
||||
XDrawLine(dpy, win, w->strip_chart.hiGC, left , j, scalewidth, j);
|
||||
***************
|
||||
*** 566,573 ****
|
||||
PerfChartWidget w;
|
||||
Boolean blit;
|
||||
{
|
||||
! double old_max, old_min;
|
||||
! int left, i, j;
|
||||
register int next = w->strip_chart.interval;
|
||||
|
||||
if (!XtIsRealized((Widget) w)) return;
|
||||
--- 602,609 ----
|
||||
PerfChartWidget w;
|
||||
Boolean blit;
|
||||
{
|
||||
! double old_max;
|
||||
! int i, j;
|
||||
register int next = w->strip_chart.interval;
|
||||
|
||||
if (!XtIsRealized((Widget) w)) return;
|
||||
***************
|
||||
*** 582,598 ****
|
||||
bcopy((char *)(w->strip_chart.valuedata + next - j),
|
||||
(char *)(w->strip_chart.valuedata), j * sizeof(double));
|
||||
|
@ -629,7 +666,7 @@
|
|||
w->strip_chart.max_value = w->strip_chart.valuedata[i];
|
||||
if ( w->strip_chart.valuedata[i] < w->strip_chart.min_value )
|
||||
w->strip_chart.min_value = w->strip_chart.valuedata[i];
|
||||
--- 619,645 ----
|
||||
--- 618,644 ----
|
||||
bcopy((char *)(w->strip_chart.valuedata + next - j),
|
||||
(char *)(w->strip_chart.valuedata), j * sizeof(double));
|
||||
next = w->strip_chart.interval = j;
|
||||
|
@ -671,7 +708,7 @@
|
|||
left = j;
|
||||
for (i = 1; i < w->strip_chart.scale; i++) {
|
||||
j = i * ((int)w->core.height / w->strip_chart.scale);
|
||||
--- 658,669 ----
|
||||
--- 657,668 ----
|
||||
(unsigned int) j-LABEL_ROOM, (unsigned int) w->core.height,
|
||||
LABEL_ROOM, 0);
|
||||
|
||||
|
@ -705,7 +742,7 @@
|
|||
DestroyGC(old, new_gc);
|
||||
CreateGC(w, new_gc);
|
||||
|
||||
--- 692,714 ----
|
||||
--- 691,713 ----
|
||||
draw_graph, (XtPointer)w);
|
||||
}
|
||||
*/
|
||||
|
@ -747,7 +784,7 @@
|
|||
points[i - 1].y = HEIGHT / w->strip_chart.scale;
|
||||
}
|
||||
}
|
||||
--- 737,753 ----
|
||||
--- 736,752 ----
|
||||
w->strip_chart.points = NULL;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
*** ../xperfmon++/misc.c Wed Jul 27 22:29:33 1994
|
||||
--- ./misc.c Sun Jan 10 21:14:22 1999
|
||||
--- ./misc.c Tue Apr 10 21:48:00 2001
|
||||
***************
|
||||
*** 1,10 ****
|
||||
/* Copyright 1994, Roger Smith for Sterling Software and NASA-Ames Research Center
|
||||
|
@ -17,7 +17,7 @@
|
|||
+ * Enhancement and error correction for FreeBSD-3.X
|
||||
+ * COPYRIGHT 1998 by Lars Köller <Lars.Koeller@Uni-Bielefeld.de>
|
||||
+ *
|
||||
+ * $Id: misc.c,v 3.3 1999/01/10 20:13:27 lkoeller Exp lkoeller $
|
||||
+ * $Id: misc.c,v 3.4 2001/04/10 19:47:38 lkoeller Exp lkoeller $
|
||||
+ */
|
||||
+
|
||||
/* Copyright 1994, Roger Smith for Sterling Software and NASA-Ames Research Center
|
||||
|
@ -58,7 +58,7 @@
|
|||
*/
|
||||
+
|
||||
+ #ifndef LINT
|
||||
+ static char rcsid[] = "$Id: misc.c,v 3.3 1999/01/10 20:13:27 lkoeller Exp lkoeller $";
|
||||
+ static char rcsid[] = "$Id: misc.c,v 3.4 2001/04/10 19:47:38 lkoeller Exp lkoeller $";
|
||||
+ #endif
|
||||
+
|
||||
+ #include "fbsd_vers.h"
|
||||
|
@ -135,6 +135,16 @@
|
|||
pw->strip_chart.highWarn,
|
||||
pw->strip_chart.highAlarm,
|
||||
***************
|
||||
*** 142,148 ****
|
||||
adjust_timeout(delta)
|
||||
int delta;
|
||||
{
|
||||
- int i;
|
||||
char hostname[132], *c;
|
||||
|
||||
if ( appData.ms_per_sec == 1 )
|
||||
--- 155,160 ----
|
||||
***************
|
||||
*** 152,158 ****
|
||||
appData.interval += delta;
|
||||
|
||||
|
@ -143,7 +153,7 @@
|
|||
appData.interval_id =
|
||||
XtAppAddTimeOut(appData.app_context,
|
||||
appData.interval*appData.ms_per_sec, start_graphs, (caddr_t) appData.toplevel);
|
||||
--- 165,171 ----
|
||||
--- 164,170 ----
|
||||
appData.interval += delta;
|
||||
|
||||
XtRemoveTimeOut(appData.interval_id);
|
||||
|
@ -160,7 +170,7 @@
|
|||
(float)(appData.interval*appData.ms_per_sec)/1000.0);
|
||||
XtVaSetValues(labelBox, XtNlabel, hostname, NULL);
|
||||
}
|
||||
--- 173,179 ----
|
||||
--- 172,178 ----
|
||||
|
||||
(void)gethostname(hostname, sizeof(hostname));
|
||||
c = (char *) ((long) &hostname[0] + (int) strlen(hostname));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
*** ../xperfmon++/xperfmon.c Wed Jul 27 22:29:39 1994
|
||||
--- ./xperfmon.c Tue Jan 26 22:17:32 1999
|
||||
--- ./xperfmon.c Tue Apr 10 22:01:25 2001
|
||||
***************
|
||||
*** 1,6 ****
|
||||
/*
|
||||
|
@ -13,7 +13,7 @@
|
|||
! * Enhancement and error correction for FreeBSD-3.X
|
||||
! * COPYRIGHT 1998 by Lars Köller <Lars.Koeller@Uni-Bielefeld.de>
|
||||
! *
|
||||
! * $Id: xperfmon.c,v 3.5 1999/01/10 17:04:06 lkoeller Exp lkoeller $
|
||||
! * $Id: xperfmon.c,v 3.7 2001/04/10 20:01:01 lkoeller Exp lkoeller $
|
||||
! */
|
||||
!
|
||||
! /*
|
||||
|
@ -78,7 +78,7 @@
|
|||
*/
|
||||
|
||||
+ #ifndef LINT
|
||||
+ static char rcsid[] = "$Id: xperfmon.c,v 3.5 1999/01/10 17:04:06 lkoeller Exp lkoeller $";
|
||||
+ static char rcsid[] = "$Id: xperfmon.c,v 3.7 2001/04/10 20:01:01 lkoeller Exp lkoeller $";
|
||||
+ #endif
|
||||
+
|
||||
+ #include "fbsd_vers.h"
|
||||
|
@ -103,12 +103,11 @@
|
|||
double testValue;
|
||||
***************
|
||||
*** 94,99 ****
|
||||
--- 110,122 ----
|
||||
--- 110,121 ----
|
||||
{ NULL, NULL },
|
||||
};
|
||||
|
||||
+ /* LK!!! */
|
||||
+ char *info1 = "da1";
|
||||
+ int MIN_HEIGHT=78;
|
||||
+ #define MIN_WIDTH 185
|
||||
+ #define ADD_TO_TIMEH (11+(int)(appData.numGraphsOn*0.2))
|
||||
|
@ -118,7 +117,7 @@
|
|||
#define XtNcount "count"
|
||||
#define XtCCount "Count"
|
||||
***************
|
||||
*** 101,156 ****
|
||||
*** 101,164 ****
|
||||
#define XtCFill "Fill"
|
||||
#define XtNfast "fast"
|
||||
#define XtCFast "Fast"
|
||||
|
@ -175,7 +174,15 @@
|
|||
|
||||
#define DEF_INTERVAL 1
|
||||
#define DEF_COUNT -1
|
||||
--- 124,280 ----
|
||||
#define MS_PER_SEC 1000
|
||||
#define SLOWEST_INTERVAL 100
|
||||
|
||||
- static int defaultInterval = DEF_INTERVAL;
|
||||
- static int defaultCount = DEF_COUNT;
|
||||
Widget perfmon[NUM_GRAPHS], timechart, labelBox;
|
||||
|
||||
AppData appData;
|
||||
--- 123,285 ----
|
||||
#define XtCFill "Fill"
|
||||
#define XtNfast "fast"
|
||||
#define XtCFast "Fast"
|
||||
|
@ -333,6 +340,12 @@
|
|||
|
||||
#define DEF_INTERVAL 1
|
||||
#define DEF_COUNT -1
|
||||
#define MS_PER_SEC 1000
|
||||
#define SLOWEST_INTERVAL 100
|
||||
|
||||
Widget perfmon[NUM_GRAPHS], timechart, labelBox;
|
||||
|
||||
AppData appData;
|
||||
***************
|
||||
*** 171,207 ****
|
||||
static XrmOptionDescRec optionDescList[] = {
|
||||
|
@ -372,7 +385,7 @@
|
|||
{ "-lowinputAlarm", "*perfChartInput.lowAlarm", XrmoptionSepArg, NULL },
|
||||
{ "-lowinputWarn", "*perfChartInput.lowWarn", XrmoptionSepArg, NULL },
|
||||
{ "-highinputAlarm", "*perfChartInput.highAlarm", XrmoptionSepArg, NULL },
|
||||
--- 295,392 ----
|
||||
--- 292,389 ----
|
||||
static XrmOptionDescRec optionDescList[] = {
|
||||
{ "-interval", ".interval", XrmoptionSepArg, (caddr_t) NULL},
|
||||
{ "-immediate", "*PerfChart.immediate", XrmoptionNoArg, "True" },
|
||||
|
@ -473,7 +486,7 @@
|
|||
{ "-highinputAlarm", "*perfChartInput.highAlarm", XrmoptionSepArg, NULL },
|
||||
***************
|
||||
*** 217,222 ****
|
||||
--- 402,438 ----
|
||||
--- 399,435 ----
|
||||
{ "-highcollisionAlarm", "*perfChartCollision.highAlarm", XrmoptionSepArg, NULL },
|
||||
{ "-highcollisionWarn", "*perfChartCollision.highWarn", XrmoptionSepArg, NULL },
|
||||
|
||||
|
@ -557,7 +570,7 @@
|
|||
{ XtNinterval, XtCInterval, XtRInt, sizeof(int),
|
||||
XtOffsetOf(AppData, interval), XtRImmediate, (caddr_t) DEF_INTERVAL },
|
||||
{ XtNcount, XtCCount, XtRInt, sizeof(int),
|
||||
--- 442,543 ----
|
||||
--- 439,540 ----
|
||||
{ "-lownfsserverWarn", "*perfChartNFSServer.lowWarn", XrmoptionSepArg, NULL },
|
||||
{ "-highnfsserverAlarm", "*perfChartNFSServer.highAlarm", XrmoptionSepArg, NULL },
|
||||
{ "-highnfsserverWarn", "*perfChartNFSServer.highWarn", XrmoptionSepArg, NULL },
|
||||
|
@ -705,7 +718,7 @@
|
|||
{ XtNnfsclientAdd, XtCNfsclientAdd, XtRBool, sizeof(Bool),
|
||||
XtOffsetOf(AppData, addG[NFS_CLT]), XtRImmediate, (XtPointer) NULL },
|
||||
{ XtNnfsclientSub, XtCNfsclientSub, XtRBool, sizeof(Bool),
|
||||
--- 548,684 ----
|
||||
--- 545,681 ----
|
||||
XtOffsetOf(AppData, debug), XtRImmediate, (caddr_t)NULL },
|
||||
{ XtNfast, XtCFast, XtRBoolean, sizeof(Boolean),
|
||||
XtOffsetOf(AppData, fast), XtRImmediate, (XtPointer) NULL },
|
||||
|
@ -857,7 +870,7 @@
|
|||
fprintf(stderr, "\nusage: xperfmon++ option option option .....\n");
|
||||
fprintf(stderr, "options:\n");
|
||||
fprintf(stderr, " [-display [{host}]:[{vs}]]\n");
|
||||
--- 686,701 ----
|
||||
--- 683,698 ----
|
||||
{ XtNnfsserverAdd, XtCNfsserverAdd, XtRBool, sizeof(Bool),
|
||||
XtOffsetOf(AppData, addG[NFS_SRV]), XtRImmediate, (XtPointer) NULL },
|
||||
{ XtNnfsserverSub, XtCNfsserverSub, XtRBool, sizeof(Bool),
|
||||
|
@ -869,7 +882,7 @@
|
|||
usage()
|
||||
{
|
||||
+ #if __FreeBSD_version >= 300000
|
||||
+ fprintf(stderr, "\nxperfmon++ V3.0 for FreeBSD-3.X\n");
|
||||
+ fprintf(stderr, "\nxperfmon++ V3.1 for FreeBSD-3.X/4.X\n");
|
||||
+ #endif
|
||||
fprintf(stderr, "\nusage: xperfmon++ option option option .....\n");
|
||||
fprintf(stderr, "options:\n");
|
||||
|
@ -894,7 +907,7 @@
|
|||
fprintf(stderr, "NOTE: The default is ALL graphs! A \"-\" option takes away from the default list.\n");
|
||||
fprintf(stderr, " Any \"+\" option resets the default list to empty and then adds the option.\n\n");
|
||||
fprintf(stderr, "ALARMS:\n");
|
||||
--- 712,761 ----
|
||||
--- 709,758 ----
|
||||
fprintf(stderr, " [-fast] (changes interval from seconds to milliseconds)\n");
|
||||
fprintf(stderr, " [-immediate] (background limit alarm color is based on current sample)\n");
|
||||
fprintf(stderr, " [-fill] (output filled graph instead of line graph)\n\n");
|
||||
|
@ -957,7 +970,7 @@
|
|||
fprintf(stderr, "WARNING: It is an error condition to set both a high, and a low, limit warning or alarm.\n");
|
||||
exit(1);
|
||||
}
|
||||
--- 765,785 ----
|
||||
--- 762,782 ----
|
||||
fprintf(stderr, " [-high*Alarm {value}] ( Set High Alarm value for *)\n");
|
||||
fprintf(stderr, " [-high*Warn {value}] ( Set High Warning value for *)\n");
|
||||
fprintf(stderr, " Where \"*\" is one of the following:\n");
|
||||
|
@ -981,7 +994,7 @@
|
|||
}
|
||||
***************
|
||||
*** 386,391 ****
|
||||
--- 801,807 ----
|
||||
--- 798,804 ----
|
||||
time(&timeStamp);
|
||||
return;
|
||||
}
|
||||
|
@ -998,12 +1011,12 @@
|
|||
char eventString[60];
|
||||
switch (event->type) {
|
||||
case Expose:
|
||||
--- 810,817 ----
|
||||
--- 807,814 ----
|
||||
Boolean *contin2disp;
|
||||
{
|
||||
Dimension neww, newh;
|
||||
! Dimension hOverHead, boxH, timeH, newWidgetH;
|
||||
! int i, window_size_changed;
|
||||
! int i, window_size_changed=FALSE;
|
||||
char eventString[60];
|
||||
switch (event->type) {
|
||||
case Expose:
|
||||
|
@ -1022,7 +1035,7 @@
|
|||
strcpy(eventString,"reparent");
|
||||
break;
|
||||
case ConfigureNotify:
|
||||
--- 820,837 ----
|
||||
--- 817,834 ----
|
||||
strcpy(eventString,"expose");
|
||||
break;
|
||||
case MapNotify:
|
||||
|
@ -1056,10 +1069,15 @@
|
|||
if ( appData.debug )
|
||||
printf("Resize Request: type=%d %s, oldw=%hu, oldh=%hu, neww=%hu, newh=%hu\n",
|
||||
(int)event->type, eventString,
|
||||
--- 839,872 ----
|
||||
--- 836,874 ----
|
||||
newh=event->xconfigure.height;
|
||||
strcpy(eventString,"configure");
|
||||
break;
|
||||
+ default:
|
||||
+ neww=MIN_WIDTH;
|
||||
+ newh=w->core.height;
|
||||
+ window_size_changed = TRUE;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
+ if ( neww < MIN_WIDTH ) {
|
||||
|
@ -1104,7 +1122,7 @@
|
|||
if ( oldWidth == neww && oldHeight == newh ) return;
|
||||
|
||||
if ( appData.debug )
|
||||
--- 874,880 ----
|
||||
--- 876,882 ----
|
||||
neww, newh);
|
||||
|
||||
if ( event->type == ConfigureNotify ) {
|
||||
|
@ -1132,7 +1150,7 @@
|
|||
|
||||
char *progname = argv[0];
|
||||
Bool foundAnAdd = FALSE;
|
||||
--- 894,917 ----
|
||||
--- 896,918 ----
|
||||
XFlush(XtDisplay(w));
|
||||
|
||||
}
|
||||
|
@ -1149,7 +1167,6 @@
|
|||
+ /* LK!!! */
|
||||
+ Dimension timeH, newWidgetW, newWidgetH, hOverHead, boxH;
|
||||
+ unsigned int w, h;
|
||||
+ static char *da_str[] = {"da1 da2"};
|
||||
+
|
||||
Arg arg;
|
||||
Pixmap icon_pixmap = None;
|
||||
|
@ -1169,14 +1186,10 @@
|
|||
if (argc != 1) usage();
|
||||
|
||||
if ( appData.toplevel->core.depth == 1 )
|
||||
--- 919,936 ----
|
||||
--- 920,933 ----
|
||||
int i;
|
||||
gprogname = progname;
|
||||
|
||||
!
|
||||
! /* topNames[DA_MB] = da_str[0]; LK!!! */
|
||||
!
|
||||
!
|
||||
! appData.toplevel = XtVaAppInitialize(&appData.app_context, "XPerfmon++",
|
||||
! optionDescList, XtNumber(optionDescList),
|
||||
&argc, argv,
|
||||
|
@ -1189,8 +1202,21 @@
|
|||
|
||||
if ( appData.toplevel->core.depth == 1 )
|
||||
***************
|
||||
*** 488,493 ****
|
||||
--- 941,949 ----
|
||||
*** 488,500 ****
|
||||
XtGetApplicationResources(appData.toplevel, &appData, resources,
|
||||
XtNumber(resources), NULL, 0 );
|
||||
|
||||
/*check resources to make sure they are in range */
|
||||
|
||||
if ( (int)appData.fast ) {
|
||||
short uid = getuid();
|
||||
short euid = geteuid();
|
||||
if ( appData.debug ) fprintf(stderr, "uid = %hd, euid = %hd\n", uid, euid);
|
||||
! if ( uid != 0 & euid != 0 ) {
|
||||
fprintf(stderr, "xperfmon++: ERROR: Must be root to use \"-fast\"\n");
|
||||
exit();
|
||||
}
|
||||
--- 938,953 ----
|
||||
XtGetApplicationResources(appData.toplevel, &appData, resources,
|
||||
XtNumber(resources), NULL, 0 );
|
||||
|
||||
|
@ -1200,6 +1226,13 @@
|
|||
/*check resources to make sure they are in range */
|
||||
|
||||
if ( (int)appData.fast ) {
|
||||
short uid = getuid();
|
||||
short euid = geteuid();
|
||||
if ( appData.debug ) fprintf(stderr, "uid = %hd, euid = %hd\n", uid, euid);
|
||||
! if ( (uid != 0) & (euid != 0) ) {
|
||||
fprintf(stderr, "xperfmon++: ERROR: Must be root to use \"-fast\"\n");
|
||||
exit();
|
||||
}
|
||||
***************
|
||||
*** 512,518 ****
|
||||
|
||||
|
@ -1209,7 +1242,7 @@
|
|||
if ( appData.addG[i] ) {
|
||||
foundAnAdd = appData.graphOn[i] = TRUE;
|
||||
appData.numGraphsOn++;
|
||||
--- 968,974 ----
|
||||
--- 965,971 ----
|
||||
|
||||
/* build graphOn table */
|
||||
|
||||
|
@ -1226,7 +1259,7 @@
|
|||
appData.graphOn[i] = FALSE;
|
||||
else
|
||||
appData.numGraphsOn++;
|
||||
--- 976,982 ----
|
||||
--- 973,979 ----
|
||||
if ( !foundAnAdd ) {
|
||||
for ( i=0; i<NUM_GRAPHS; i++ ) {
|
||||
appData.graphOn[i] = TRUE;
|
||||
|
@ -1258,7 +1291,7 @@
|
|||
XtNjustify, XtJustifyLeft,
|
||||
XtNinternalHeight, 0,
|
||||
XtNtop, XtChainTop,
|
||||
--- 996,1047 ----
|
||||
--- 993,1044 ----
|
||||
xperfmon_width, xperfmon_height));
|
||||
XtSetValues(appData.toplevel, &arg, 1);
|
||||
}
|
||||
|
@ -1275,8 +1308,8 @@
|
|||
|
||||
+ { /* LK!!! handle -geometry option correct, also small changes in handleResize */
|
||||
+ Window rwin;
|
||||
+ int x,y,px,py;
|
||||
+ unsigned int pw,ph,bw,d;
|
||||
+ int x,y;
|
||||
+ unsigned int bw,d;
|
||||
+
|
||||
+ XtRealizeWidget(appData.toplevel);
|
||||
+
|
||||
|
@ -1295,7 +1328,7 @@
|
|||
+ boxH = 22;
|
||||
+ timeH = 12;
|
||||
+ if (h > GRAPH_MIN_HEIGHT * appData.numGraphsOn + hOverHead + (boxH+7) + (timeH+ADD_TO_TIMEH))
|
||||
+ newWidgetH = (h - hOverHead - (boxH+7) - (timeH+ADD_TO_TIMEH) ) / appData.numGraphsOn;
|
||||
+ newWidgetH = (h - hOverHead - (boxH+7) - (timeH+ADD_TO_TIMEH)) / appData.numGraphsOn;
|
||||
+ else
|
||||
+ newWidgetH = GRAPH_MIN_HEIGHT;
|
||||
+
|
||||
|
@ -1347,7 +1380,7 @@
|
|||
- XtRealizeWidget(appData.toplevel);
|
||||
XtAppMainLoop(appData.app_context);
|
||||
}
|
||||
--- 1053,1086 ----
|
||||
--- 1050,1085 ----
|
||||
for ( i=0; i<NUM_GRAPHS; i++ ) {
|
||||
if ( appData.graphOn[i] ) {
|
||||
sprintf(hostname, "perfChart%s", widgetLabels[i]);
|
||||
|
@ -1381,4 +1414,6 @@
|
|||
appData.interval*appData.ms_per_sec, start_graphs, (caddr_t) appData.toplevel);
|
||||
|
||||
XtAppMainLoop(appData.app_context);
|
||||
+
|
||||
+ exit(0);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
*** ../xperfmon++/TimeChart.c Wed Jul 27 22:29:31 1994
|
||||
--- ./TimeChart.c Sun Jan 10 18:08:06 1999
|
||||
--- ./TimeChart.c Tue Apr 10 21:50:32 2001
|
||||
***************
|
||||
*** 1,4 ****
|
||||
! /* $XConsortium: TimeChart.c,v 1.20 91/05/24 17:20:42 converse Exp $ */
|
||||
|
@ -11,7 +11,7 @@
|
|||
! * Enhancement and error correction for FreeBSD-3.X
|
||||
! * COPYRIGHT 1998 by Lars Köller <Lars.Koeller@Uni-Bielefeld.de>
|
||||
! *
|
||||
! * $Id: TimeChart.c,v 1.4 1999/01/10 17:07:57 lkoeller Exp lkoeller $
|
||||
! * $Id: TimeChart.c,v 1.5 2001/04/10 19:50:19 lkoeller Exp lkoeller $
|
||||
! */
|
||||
|
||||
/***********************************************************
|
||||
|
@ -86,7 +86,7 @@
|
|||
******************************************************************/
|
||||
|
||||
+ #ifndef LINT
|
||||
+ static char rcsid[] = "$Id: TimeChart.c,v 1.4 1999/01/10 17:07:57 lkoeller Exp lkoeller $";
|
||||
+ static char rcsid[] = "$Id: TimeChart.c,v 1.5 2001/04/10 19:50:19 lkoeller Exp lkoeller $";
|
||||
+ #endif
|
||||
+
|
||||
#include <stdio.h>
|
||||
|
@ -169,6 +169,43 @@
|
|||
(void) repaint_window ((TimeChartWidget)w, event->xgraphicsexpose.x,
|
||||
event->xgraphicsexpose.width);
|
||||
***************
|
||||
*** 274,280 ****
|
||||
TimeChartWidget w = (TimeChartWidget)client_data;
|
||||
time_t value;
|
||||
Display *dpy = XtDisplay(w);
|
||||
- Window win = XtWindow(w);
|
||||
int x,y;
|
||||
|
||||
/* if (w->time_chart.update > 0)
|
||||
--- 279,284 ----
|
||||
***************
|
||||
*** 342,353 ****
|
||||
TimeChartWidget w;
|
||||
int left, width;
|
||||
{
|
||||
! register int i, j;
|
||||
int oldInterval;
|
||||
register int next = w->time_chart.interval;
|
||||
int scale = w->time_chart.scale;
|
||||
int scalewidth = 0;
|
||||
! int x, x1, x2, y, y1, y2;
|
||||
char numstring[32];
|
||||
#if 0
|
||||
/* Compute the minimum scale required to graph the data, but don't go
|
||||
--- 346,357 ----
|
||||
TimeChartWidget w;
|
||||
int left, width;
|
||||
{
|
||||
! register int i;
|
||||
int oldInterval;
|
||||
register int next = w->time_chart.interval;
|
||||
int scale = w->time_chart.scale;
|
||||
int scalewidth = 0;
|
||||
! int x, y;
|
||||
char numstring[32];
|
||||
#if 0
|
||||
/* Compute the minimum scale required to graph the data, but don't go
|
||||
***************
|
||||
*** 364,388 ****
|
||||
|
||||
SetPoints(w);
|
||||
|
@ -185,7 +222,7 @@
|
|||
!
|
||||
if (XtIsRealized((Widget)w)) {
|
||||
Display *dpy = XtDisplay(w);
|
||||
Window win = XtWindow(w);
|
||||
! Window win = XtWindow(w);
|
||||
!
|
||||
width += left - 1;
|
||||
if (!scalewidth) scalewidth = width;
|
||||
|
@ -195,7 +232,7 @@
|
|||
w->time_chart.next_x = 0;
|
||||
w->time_chart.last_end = 0;
|
||||
w->time_chart.num_timestamps = 0;
|
||||
--- 369,393 ----
|
||||
--- 368,391 ----
|
||||
|
||||
SetPoints(w);
|
||||
|
||||
|
@ -211,7 +248,6 @@
|
|||
!
|
||||
if (XtIsRealized((Widget)w)) {
|
||||
Display *dpy = XtDisplay(w);
|
||||
Window win = XtWindow(w);
|
||||
!
|
||||
width += left - 1;
|
||||
if (!scalewidth) scalewidth = width;
|
||||
|
@ -230,7 +266,7 @@
|
|||
w->time_chart.interval = oldInterval;
|
||||
}
|
||||
return(next);
|
||||
--- 430,436 ----
|
||||
--- 428,434 ----
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -239,6 +275,24 @@
|
|||
}
|
||||
return(next);
|
||||
***************
|
||||
*** 442,449 ****
|
||||
TimeChartWidget w;
|
||||
Boolean blit;
|
||||
{
|
||||
! double old_max;
|
||||
! int left, i, j;
|
||||
register int next = w->time_chart.interval;
|
||||
|
||||
if (!XtIsRealized((Widget) w)) return;
|
||||
--- 445,451 ----
|
||||
TimeChartWidget w;
|
||||
Boolean blit;
|
||||
{
|
||||
! int j;
|
||||
register int next = w->time_chart.interval;
|
||||
|
||||
if (!XtIsRealized((Widget) w)) return;
|
||||
***************
|
||||
*** 461,474 ****
|
||||
next = w->time_chart.interval = j;
|
||||
|
||||
|
@ -254,7 +308,7 @@
|
|||
(unsigned int) w->core.width - j, (unsigned int)w->core.height,
|
||||
FALSE);
|
||||
|
||||
--- 466,479 ----
|
||||
--- 463,476 ----
|
||||
next = w->time_chart.interval = j;
|
||||
|
||||
XCopyArea(XtDisplay((Widget)w), XtWindow((Widget)w), XtWindow((Widget)w),
|
||||
|
@ -281,7 +335,7 @@
|
|||
LABEL_ROOM, (unsigned int)w->core.height,
|
||||
FALSE);
|
||||
for ( j=1; j < w->time_chart.num_timestamps; j++ ) {
|
||||
--- 485,494 ----
|
||||
--- 482,491 ----
|
||||
if ( j > 31 ) break;
|
||||
w->time_chart.timestamp_end[j]--;
|
||||
}
|
||||
|
@ -301,7 +355,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
--- 496,502 ----
|
||||
--- 493,499 ----
|
||||
}
|
||||
w->time_chart.num_timestamps--;
|
||||
}
|
||||
|
@ -328,7 +382,7 @@
|
|||
DestroyGC(old, new_gc);
|
||||
CreateGC(w, new_gc);
|
||||
|
||||
--- 521,537 ----
|
||||
--- 518,534 ----
|
||||
*/
|
||||
if ( w->time_chart.min_scale > (int) ((w->time_chart.max_value) + 1) )
|
||||
ret_val = TRUE;
|
||||
|
@ -355,7 +409,7 @@
|
|||
size = sizeof(XPoint) * (w->time_chart.scale - 1);
|
||||
|
||||
points = (XPoint *) XtRealloc( (XtPointer) w->time_chart.points, size);
|
||||
--- 559,565 ----
|
||||
--- 556,562 ----
|
||||
w->time_chart.points = NULL;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -112,4 +112,3 @@
|
|||
!
|
||||
typedef struct _TimeChartRec *TimeChartWidget;
|
||||
typedef struct _TimeChartClassRec *TimeChartWidgetClass;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
*** ../xperfmon++/system.h Wed Jul 27 22:29:34 1994
|
||||
--- ./system.h Sun Jan 10 18:08:49 1999
|
||||
--- ./system.h Tue Apr 10 21:49:11 2001
|
||||
***************
|
||||
*** 1,4 ****
|
||||
--- 1,11 ----
|
||||
|
@ -7,7 +7,7 @@
|
|||
+ * Enhancement and error correction for FreeBSD-3.X
|
||||
+ * COPYRIGHT 1998 by Lars Köller <Lars.Koeller@Uni-Bielefeld.de>
|
||||
+ *
|
||||
+ * $Id: system.h,v 3.4 1999/01/10 17:08:28 lkoeller Exp lkoeller $
|
||||
+ * $Id: system.h,v 3.5 2001/04/10 19:48:22 lkoeller Exp lkoeller $
|
||||
+ */
|
||||
+
|
||||
+ /*
|
||||
|
@ -74,10 +74,13 @@
|
|||
#define MAX_STATS NUM_POSSIBLE_STATS + 1
|
||||
|
||||
#define LINES_PER_LABEL 2
|
||||
--- 62,72 ----
|
||||
--- 62,75 ----
|
||||
|
||||
/* This file information needed by both system.c and Perfmon.c */
|
||||
|
||||
! #include <time.h>
|
||||
! #include <unistd.h>
|
||||
!
|
||||
! #if __FreeBSD_version >= 300000
|
||||
! # define NUM_POSSIBLE_STATS 25
|
||||
! #else
|
||||
|
@ -105,7 +108,7 @@
|
|||
|
||||
struct statistic {
|
||||
int min_val, max_val;
|
||||
--- 88,132 ----
|
||||
--- 91,137 ----
|
||||
for (stat = 0; stat < num_stats; stat++)
|
||||
|
||||
#define NO_STAT -1
|
||||
|
@ -120,6 +123,8 @@
|
|||
! #define TTY_CHARS_OUT 7
|
||||
! #define INTERRUPTS 8
|
||||
! #define FREE_MEM 9
|
||||
! /* Refresh swap only every FREE_MEM_INT intervals */
|
||||
! #define FREE_MEM_INT 10
|
||||
! #define DISK_TRANSFERS 10
|
||||
! #define DISK_MB 11
|
||||
! #define TAPE_TRANSFERS 12
|
||||
|
@ -153,7 +158,7 @@
|
|||
int min_val, max_val;
|
||||
***************
|
||||
*** 113,118 ****
|
||||
--- 152,197 ----
|
||||
--- 157,202 ----
|
||||
|
||||
#define VALID_UPDATE(x) ((x <= MAX_TIME) && (x > 0))
|
||||
|
||||
|
@ -202,7 +207,7 @@
|
|||
#define IDL_CPU 2
|
||||
***************
|
||||
*** 125,130 ****
|
||||
--- 204,210 ----
|
||||
--- 209,215 ----
|
||||
#define NFS_CLT 9
|
||||
#define NFS_SRV 10
|
||||
#define LAST_ITEM NFS_SRV /* must equal last item above */
|
||||
|
@ -244,7 +249,7 @@
|
|||
"CPU",
|
||||
"CPU",
|
||||
"CPU",
|
||||
--- 226,299 ----
|
||||
--- 231,304 ----
|
||||
}AppData, *AppDataPtr;
|
||||
|
||||
static char *topNames[] = {
|
||||
|
@ -321,7 +326,7 @@
|
|||
"CPU",
|
||||
***************
|
||||
*** 183,186 ****
|
||||
--- 305,351 ----
|
||||
--- 310,356 ----
|
||||
"Packets",
|
||||
"Calls",
|
||||
"Calls",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
*** ../xperfmon++/Imakefile Wed Jul 27 22:29:29 1994
|
||||
--- ./Imakefile Wed Dec 2 23:33:54 1998
|
||||
--- ./Imakefile Tue Apr 10 21:51:28 2001
|
||||
***************
|
||||
*** 17,31 ****
|
||||
SYS_MODULE= sgi_system
|
||||
|
@ -24,7 +24,7 @@
|
|||
! #if defined (FreeBSDArchitecture)
|
||||
! FreeBSDFLAGS= -lkvm -ldevstat
|
||||
! SYS_MODULE= freebsd_system
|
||||
! CC= gcc
|
||||
! CC?= gcc
|
||||
! EXTRA_DEFINES= -DHAVE_SYS_PARAM_H
|
||||
! #endif
|
||||
!
|
||||
|
@ -37,4 +37,3 @@
|
|||
! OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o
|
||||
|
||||
ComplexProgramTarget(xperfmon++)
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
*** ../xperfmon++/README Wed Jul 27 22:29:30 1994
|
||||
--- ./README Thu Oct 15 21:25:22 1998
|
||||
--- ./README Tue Apr 10 22:07:01 2001
|
||||
***************
|
||||
*** 6,12 ****
|
||||
program will compile correctly under X11R5 and/or Motif.
|
||||
|
@ -18,11 +18,12 @@
|
|||
Replaced Perfmon widget with a highly modified StripChart widget. Charts
|
||||
now smooth scroll, scales update immediately, and there is a scrolling timestamp
|
||||
***************
|
||||
*** 18,20 ****
|
||||
--- 18,66 ----
|
||||
*** 17,20 ****
|
||||
--- 17,75 ----
|
||||
1-25-94 Completed port to DEC-Ultrix by Roger Smith, Sterling Software @ NASA-Ames
|
||||
Research Center, rsmith@proteus.arc.nasa.gov. Imake will build for correct
|
||||
O/S if x11r5 is fully installed in all the right places.
|
||||
|
||||
+
|
||||
+
|
||||
+ 3-15-95 Completely new port of systemdependent file (bsd_system.c) for FreeBSD-2.X
|
||||
+ by Lars Köller @University of Rostock, Germany.
|
||||
|
@ -69,3 +70,11 @@
|
|||
+ Compiles on FreeBSD-3.X
|
||||
+ by Lars Köller @University of Bielefeld, Germany.
|
||||
+ E-Mail: Lars.Koeller@Uni-Bielefeld.DE
|
||||
+
|
||||
+ 04-10-01 Correct several bugs in V3.0:
|
||||
+ Calc etime correct for multi CPU machines, show disk stats for new
|
||||
+ "ad" disk devices, count number of network in/out packets correctly,
|
||||
+ get free swapspace only every 10 intervals to limit CPU usage.
|
||||
+ Compiles on FreeBSD-3.X/4.X
|
||||
+ by Lars Köller @University of Bielefeld, Germany.
|
||||
+ E-Mail: Lars.Koeller@Uni-Bielefeld.DE
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
*** ../xperfmon++/xperfmon++.man Wed Jul 27 22:29:39 1994
|
||||
--- ./xperfmon++.man Sun Jan 10 21:28:14 1999
|
||||
--- ./xperfmon++.man Tue Apr 10 22:04:19 2001
|
||||
***************
|
||||
*** 1,5 ****
|
||||
! ./" .TH XPERFMON++ 1 "19 January 1988" "X Version 11"
|
||||
|
@ -8,7 +8,7 @@
|
|||
xperfmon++ - X Window System-based performance monitor
|
||||
.SH SYNOPSIS
|
||||
--- 1,4 ----
|
||||
! .TH XPERFMON++ 1 "10 Oct 1998" "V3.0 for FreeBSD-3.X"
|
||||
! .TH XPERFMON++ 1 "10 Oct 1998" "V3.1 for FreeBSD-3.X/4.X"
|
||||
.SH NAME
|
||||
xperfmon++ - X Window System-based performance monitor
|
||||
.SH SYNOPSIS
|
||||
|
@ -149,7 +149,7 @@
|
|||
Graph \fISystem Interrupts\fP.
|
||||
.TP 26
|
||||
+ .B \-freeswap | \+freeswap
|
||||
+ Graph \fIFree Swap in %\fP.
|
||||
+ Graph \fIFree Swap in %\fP. Calculation is done only every 10 intervals.
|
||||
+ .TP 26
|
||||
+ .B \-diskxfr | \+diskxfr
|
||||
+ Graph \fIDisk Transfers\fP per second.
|
||||
|
@ -580,7 +580,7 @@
|
|||
above address.
|
||||
.PP
|
||||
Enjoy!
|
||||
--- 514,561 ----
|
||||
--- 514,566 ----
|
||||
If you like this program, or if you have difficulties, I would like to hear your comments.
|
||||
E-Mail me at rsmith@proteus.arc.nasa.gov.
|
||||
.PP
|
||||
|
@ -625,6 +625,11 @@
|
|||
+ number of graphs and rescaling the window fixed (hope this was the last time).
|
||||
+ Output of Warn/Alarm values (press L|l in xperfmon++ window) corrected.
|
||||
+ .PP
|
||||
+ .I xperfmon++ V3.1 for FreeBSD 3.X/4.X (several bugfixes)
|
||||
+ Calc etime correct for multi CPU machines, show disk stats for new
|
||||
+ "ad" disk devices, count number of network in/out packets correctly,
|
||||
+ get free swapspace only every 10 intervals to limit CPU usage.
|
||||
+ .PP
|
||||
+ Please E-Mail any bugs or comments with the subject
|
||||
+ "xperfmon++ V3: ..." to Lars.Koeller@Uni-Bielefeld.DE or lkoeller@cc.FH-Lippe.DE.
|
||||
.PP
|
||||
|
|
Loading…
Add table
Reference in a new issue