This is tmon.c in view mode; [Download] [Up]
/* From hendrick@edmund.cs.andrews.edu Tue Dec 29 10:02:07 1992 Return-Path: <hendrick@edmund.cs.andrews.edu> Received: from edmund.cs.andrews.edu by tartarus.uwa.edu.au (5.65c/SMI-4.1) id AA07713; Tue, 29 Dec 1992 10:02:02 +0800 Received: by edmund.cs.andrews.edu (5.57/Ultrix3.0-C) id AA11714; Mon, 28 Dec 92 21:01:39 -0500 From: hendrick@edmund.cs.andrews.edu (John Hendrickson) Message-Id: <9212290201.AA11714@edmund.cs.andrews.edu> Subject: tmon To: oreillym Date: Mon, 28 Dec 92 21:01:37 EST X-Mailer: ELM [version 2.3 PL11] Status: O */ #include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <sys/times.h> #include <sys/time.h> #include <sys/param.h> #include <sys/stat.h> #include <ctype.h> #include <signal.h> #if !defined(NeXT) && !defined(__NetBSD__) # include <termio.h> #endif #if defined(__NetBSD__) # include <termios.h> #endif #include <memory.h> #define I_SYS #include "includes.h" #include "client.h" #ifndef HZ #define HZ 60 #endif #define STAT(local, st) \ if (send_command(s, C_STATS, local, "%d",st)< 0) { \ fprintf(stderr,"C_STATS command failed. Abort.\n"); \ exit(1); \ } #define NULLS ((char *)0) int LI, /* One less than screen length in termcap entry */ CO; /* Screen width */ int debug = 0; static char tc[2048]; /* termcap buffer */ static char tbuf[128], PC, *CD, *CE, *CF, *CL, *CM, *CN, *SO, *SE; char *tgetstr (); char *tgoto (); int tgetent (); int tgetnum (); char *getenv (); void tputs(); #define Tgetstr(code) (char *)((s = (char *)tgetstr(code,&p)) ? s : "") /* initialize termcap stuff */ void get_ttype() { char *ttytype; char *p = tbuf; char *s; if ((ttytype = getenv("TERM")) == NULLS) { printf ("TERM not set\n"); exit(6); } if (tgetent(tc, ttytype) != 1) { printf("Can't load %s", ttytype); exit(7); } LI = tgetnum("li") - 1; CO = tgetnum("co"); if ((s=Tgetstr("pc")) == NULLS) PC = '\0'; else PC = (char)*s; CD = Tgetstr("cd"); /* clear display after cursor */ CE = Tgetstr("ce"); /* clear to end of line */ CL = Tgetstr("cl"); /* clear screen */ CM = Tgetstr("cm"); /* move cursor sequence */ SE = Tgetstr("se"); /* standout mode off */ SO = Tgetstr("so"); /* standout mode on */ CF = Tgetstr("vi"); /* cursor off string */ CN = Tgetstr("ve"); /* cursor on string */ } void putchr ( c ) char c; { fputc ( c, stdout ); } void cls() { tputs(CL,LI,putchr); } void cur_on() { tputs(CN,1,putchr); } void cur_off() { tputs(CF,1,putchr); } void cl_line() { tputs(CE,1,putchr); } void cl_end() { tputs(CD,LI,putchr); } void ttgoto(row, col) int row, col; { tputs(tgoto(CM, col, row),1,putchr); } void drawline(row, col, len) int row, col, len; { ttgoto(row, col); while (len--) fputc('-', stdout); } void main(int argc, char *argv[]) { struct timeval timeout; int first; int last_in = -1, last_out = -1, d1, d2, i, x, y, ihist[33],ohist[33]; int scale=0, timer=5; int s, done, stim, ttim; int cooked_out=0; fd_set reads; char line[35]; float lcomp,rcomp,dtim; struct tms Tbuf; timeout.tv_sec = 0; timeout.tv_usec = 0; /* set_nonblock(0); */ priority = 3; first = client_options(argc, argv,"",NULL); s = connect_server(term_server); terminal_save(0); terminal_raw(0); STAT ( 1, -5); scale = atoi(command_result) / 10 + 10; STAT ( 1, -3); sscanf ( command_result, "%d %d", &last_in, &last_out ); stim=times(&Tbuf); STAT ( 1, -8); cooked_out = atoi(command_result); memset ( line, 0, sizeof (line) ); memset ( ihist, 0, sizeof (ihist) ); memset ( ohist, 0, sizeof (ohist) ); get_ttype (); cls (); ttgoto ( 1, 1 ); printf ( "TERM link statistics monitor v.01" ); for (i=3;i<22;i++){ ttgoto(i,1); putchr('|'); } for (i=3;i<22;i++){ ttgoto(i,41); putchr('|'); } for (i=3;i<22;i++){ ttgoto(i,35); putchr('|'); } for (i=3;i<22;i++){ ttgoto(i,75); putchr('|'); } drawline ( 3,1,35 ); drawline ( 3,41,35 ); drawline ( 21,1,35 ); drawline ( 21,41,35 ); done = 0; while ( !done ) { /* Get the local compression stats. */ STAT ( 1, -2 ); sscanf ( command_result, "%d %d", &d1, &d2 ); if (d1 != 0) lcomp = ((float) d1 - d2) / ((float) d1) * 100.0; else lcomp = 0; /* Get the remote compression stats. */ STAT ( 0, -2 ); sscanf ( command_result, "%d %d", &d1, &d2 ); if (d1!=0) rcomp=((float) d1-d2)/((float)d1) * 100.0; else rcomp = 0; ttgoto ( 1, 41); printf ( "Local %5.2f%% Remote %5.2f%%", lcomp, rcomp ); /* Get the number of local clients */ /* waiting to send. */ STAT (1, -1); ttgoto ( 2, 4); printf ( "Clients waiting %s.", command_result); STAT (0, -1); ttgoto ( 2, 40 ); printf ( " Remote clients waiting %s.", command_result); STAT ( 1, -3); sscanf ( command_result, "%d %d", &d1, &d2 ); for (i=1;i<33;i++) { ihist[i-1]=ihist[i]; ohist[i-1]=ohist[i]; } ttim=times(&Tbuf); dtim=((float)(ttim-stim) * HZ ) / 10000.0; stim=ttim; ttgoto(2, 60); if(last_in == -1) last_in=d1; if(last_out == -1) last_out=d2; ihist[32]=(d1-last_in)/dtim; ohist[32]=(d2-last_out)/dtim; if(ihist[32]>scale) scale = ihist[32]+112; if(ohist[32]>scale) scale = ohist[32]+112; i=scale/18; for (y=20;y>3;y--) { for (x=0;x<33;x++) { if ( ihist[x] > i ) line[x]='#'; else line[x]=' '; } ttgoto(y,2); printf ( "%s", line ); i += (scale/18); } i=scale/18; for (y=20;y>3;y--) { for (x=0;x<33;x++) if ( ohist[x] > i ) line[x]='#'; else line[x]=' '; ttgoto(y,42); printf ( "%s", line ); i += (scale/18); } ttgoto ( 22, 1 ); printf ( "Incoming CPS : %4d %8dk", (int)((d1-last_in)/dtim),((int)d1)/1024); ttgoto ( 22, 41 ); printf ( "Outgoing CPS : %4d %8dk\n", (int)((d2-last_out)/dtim),((int)d2)/1024); last_in=d1;last_out=d2; timeout.tv_sec = timer; timeout.tv_usec = 0; FD_ZERO ( &reads ); FD_SET ( 0, &reads ); select ( 1, &reads, 0, 0, &timeout); if ( FD_ISSET ( 0, &reads ) ) done=1; } /* set_block(0); */ close(s); read(0, (char *) &s, 1); terminal_restore(0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.