From harvard!uucp Mon Nov 18 19:29:59 1985 Received: from harvard.HARVARD.EDU by seismo.CSS.GOV with SMTP; Mon, 18 Nov 85 19:28:45 EST Received: by harvard.HARVARD.EDU; Mon, 18 Nov 85 19:29:53 EST From: harvard!uucp (Black Hole) Return-Path: Received: by panda.LOCAL on Mon, 18 Nov 85 18:40:17 est Date: Mon, 18 Nov 85 18:40:17 est Message-Id: <8511182340.AA22156@panda.LOCAL> To: talcott!seismo!rick Subject: uucpanz.V7 Status: R From: allegra!ihnp4!bradley!brad@genrad.UUCP Newsgroups: mod.sources Subject: another uucp status program: uucpanz Date: 2 Nov 84 01:48:12 GMT Organization: GenRad, Inc., Bolton, Mass. The uuque program as posted doesn't work on the rti version of uucp, i.e. all the files in one directory. But for your enjoyment here is a program I wrote to monitor uucp useage. Included is just a sample of my LOGFILE & SYSLOG, to show how mine is set up. Bradley Smith UUCP: {cepu,ihnp4,noao,uiucdcs}!bradley!brad Text Processing ARPA: cepu!bradley!brad@UCLA-LOCUS Bradley University PH: (309) 676-7611 Ext. 446 Peoria, IL 61625 ======cut here====== : The rest of this file is a shell script which will extract: : uucpanz.c LOGFILE SYSLOG echo x - uucpanz.c cat >uucpanz.c <<'!End!Of!Stuff!' /* * uucpanz.c * program to print out stats about uucp usage. * * Permission is given by me for the use, * modification, and distribution of this program * exception: It may not be sold for profit individually nor as part of any * software package, regardless of modifications. * * * Bradley Smith * Bradley University * {ihnp4,cepu,uiucdcs,noao}!bradley!brad */ #include #include char *getfield(); #define SYSLOG "/usr/spool/uucp/SYSLOG" #define LOGFILE "/usr/spool/uucp/LOGFILE" #define MAXSYS 5 struct dayrec { int used; /* used */ long recv; /* bytes recv */ long sent; /* bytes sent */ long trecv; /* seconds spent rec */ long tsent; /* seconds spent sending */ }; struct sys1 { char sname[9]; /* system name */ long bbsent; /* bytes sent */ long brec; /* bytes rec. */ long btsent; /* time spen sending */ long btrec; /* time spent rec */ int suc; /* succesfull calls */ int fail; /* calls fail */ int ugot; /* number of files we got */ int lock; /* times of locked */ int usent; /* number of files we sent */ int okstr; /* number of conversations started */ int okstop; /* number of conversations stop */ }; struct users { char *name; /* login name */ long bsent; /* bytes sent */ long utim; /* time spent */ long nsent; /* number sent */ struct users *nuser; }; struct call { int times; char *cname; struct call *ncall; }; struct dayrec dayacc[13] [32]; struct sys1 sysacc[MAXSYS]; struct call *cmd, *tcall(); struct users *usage; struct users *tree(); char *malloc(), *strsave(); long byt, tim, atol(); int cmdcount; long hour, min,second, hourtmp; FILE *fpin; main() { char line[512], field[128], date[10], cx[128],*cp, *c; char sysname[9], username[9]; register int i,j,k; int d, m; /* intialize */ usage = NULL; cmdcount = 0; cmd = NULL; for(i = 1; i <= 12; i++) for(j = 1; j <= 31; j++) { dayacc[i][j].recv= 0L; dayacc[i][j].used= 0; dayacc[i][j].trecv= 0L; dayacc[i][j].sent= 0L; dayacc[i][j].tsent =0L; } /* lets do SYSLOG first */ if((fpin = fopen(SYSLOG,"r")) == NULL) error("Can't open SYSLOG"); while(fgets(line,512,fpin) != NULL) { strcpy(cx,getfield(2,line,' ')); cp = cx; cp++; /* puts at first number */ c = cp; cp++; if(isdigit(*cp)) cp++; *cp = '\0'; m = atoi(c); cp++; c = cp; cp++; if(isdigit(*cp)) cp++; *cp = '\0'; d = atoi(c); strcpy(sysname, getfield(1,line,' ')); byt = atol(getfield(6,line,' ')); tim = atol(getfield(8,line,' ')); strcpy(username, getfield(0,line,' ')); strcpy(field,getfield(4,line,' ')); if(tindex(field,"sent") != -1) { for(i = 0;i < MAXSYS;i ++) { if(strlen(sysacc[i].sname) <= 0) { strcpy(sysacc[i].sname, sysname); sysacc[i].bbsent = byt; sysacc[i].btsent = tim; break; } else if(strcmp(sysacc[i].sname, sysname) == 0) { sysacc[i].bbsent += byt; sysacc[i].btsent += tim; break; } } usage = tree(usage, username); dayacc[m][d].sent += byt; dayacc[m][d].tsent += tim; dayacc[m][d].used = 1; } else { dayacc[m][d].recv += byt; dayacc[m][d].trecv += tim; dayacc[m][d].used = 1; for(i=0;i< MAXSYS; i++) { if(strlen(sysacc[i].sname) <= 0) { strcpy(sysacc[i].sname, sysname); sysacc[i].brec = byt; sysacc[i].btrec = tim; break; } else if(strcmp(sysacc[i].sname, sysname) == 0) { sysacc[i].brec += byt; sysacc[i].btrec += tim; break; } } } } fclose(fpin); if((fpin = fopen(LOGFILE,"r")) == NULL ) error("Can't open LOGFILE"); while(fgets(line,512,fpin) != NULL) { c = getfield(4,line,' '); if(strcmp(c,"XQT") == 0) { strcpy(field,getfield(1,line,';')); field[strlen(field)-4] = '\0'; cmd = tcall(cmd,field); } else if(tindex(c,"call") != -1) { cp = getfield(3,line,' '); if(strcmp(cp,"SUCCEEDED") == 0) { for(i=0;i< MAXSYS;i++) if(strcmp(sysacc[i].sname,getfield(1,line,' ')) == 0) sysacc[i].suc++; } else if(strcmp(cp,"FAILED") == 0) { for(i=0;i< MAXSYS;i++) if(strcmp(sysacc[i].sname,getfield(1,line,' ')) == 0) sysacc[i].fail++; } else if(strcmp(cp,"LOCKED") == 0) { for(i=0;i< MAXSYS;i++) if(strcmp(sysacc[i].sname,getfield(1,line,' ')) == 0) sysacc[i].lock++; } } cp = getfield(3,line,' '); if(strcmp(cp,"REQUEST") == 0) { for(i=0;i< MAXSYS;i++) if(strcmp(sysacc[i].sname,getfield(1,line,' ')) == 0) sysacc[i].usent++; } else if(strcmp(cp,"COPY") == 0) { for(i=0;i< MAXSYS;i++) { if(strcmp(sysacc[i].sname,getfield(1,line,' ')) == 0) sysacc[i].ugot++; } } else if(strcmp(cp,"OK") == 0) { if(tindex(getfield(4,line,' '),"startup") != -1 ) { for(i=0;i 0) { printf("%10s%s\n", "", sysacc[i].sname); hourtmp = sysacc[i].btsent / 60; /* gives interger min */ second = sysacc[i].btsent - ( hourtmp * 60); /* seconds */ hour = hourtmp / 60; /* gives integer hour */ min = hourtmp - ( hour * 60); printf("%15ssent %10ld bytes %5stime ", "", sysacc[i].bbsent,""); printf("%02ld:%02ld:%02ld\n", hour, min, second); printf("%15srecieved %10ld bytes %5stime ","",sysacc[i].brec,""); hourtmp = sysacc[i].btrec / 60; /* gives interger min */ second = sysacc[i].btrec - ( hourtmp * 60); /* seconds */ hour = hourtmp / 60; /* gives integer hour */ min = hourtmp - ( hour * 60); printf("%02ld:%02ld:%02ld\n", hour, min, second); printf("%15s# of files %10d sent %5s %5d recieved\n", "",sysacc[i].usent, "",sysacc[i].ugot); printf("%15s# of calls %10d suc %10d fail %10d lock\n", "", sysacc[i].suc, sysacc[i].fail, sysacc[i].lock); printf("%15sConversations OK %5d (startup) %5d (completed)\n", "", sysacc[i].okstr, sysacc[i].okstop); /* next do total */ hour = sysacc[i].bbsent - sysacc[i].brec; if(hour < 0) { /* means we rec more */ hour *= -1; printf("%15srecieved %ld bytes more than sent\n", "", hour); } else if(hour > 0) /* means we sent more */ printf("%15ssent %ld bytes more that recieved\n", "", hour); else printf("%15ssent the same amount as recieved\n",""); hourtmp = (sysacc[i].btrec + sysacc[i].btsent) / 60; second = (sysacc[i].btrec + sysacc[i].btsent) - ( hourtmp * 60); /* seconds */ hour = hourtmp / 60; /* gives integer hour */ min = hourtmp - ( hour * 60); printf("%15stotal connect time %02ld:%02ld:%02ld\n", "", hour, min, second); } } printf("\n%5sBy user:\n", ""); treeprint(usage); printf("\n%5sBy commands:\n", ""); trsort(); tcallpr(cmd); printf("\n%5sBy day:\n",""); for(i = 1; i <= 12; i++) for(j = 1; j <= 31; j++) { if(dayacc[i][j].used) { hourtmp = dayacc[i][j].trecv / 60; second = dayacc[i][j].trecv - ( hourtmp * 60); hour = hourtmp / 60; /* gives integer hour */ min = hourtmp - ( hour * 60); printf("%5s%2d/%02d ", "", i,j); printf("recieved %8ld bytes in ", dayacc[i][j].recv); printf("%02ld:%02ld:%02ld/sent %8ld bytes in ", hour,min,second, dayacc[i][j].sent); hourtmp = dayacc[i][j].tsent / 60; second = dayacc[i][j].tsent - ( hourtmp * 60); hour = hourtmp / 60; /* gives integer hour */ min = hourtmp - ( hour * 60); printf("%02ld:%02ld:%02ld\n", hour,min,second); } } exit(0); } error(s) char *s; { fprintf(stderr,"%s\n", s); exit(1); } tindex(s,t) char s[], t[]; { register int j,k,i; for(i=0;s[i] != '\0'; i++) { for(j=i,k=0;t[k] != '\0' && s[j]== t[k]; j++, k++) ; if(t[k] == '\0') return(i); } return(-1); } char *strsave(s) /* save string s somewhere */ char *s; { char *p; if((p = malloc(strlen(s)+1)) != NULL) strcpy(p,s); else { error("strsave: out of mem"); } return(p); } struct users *tree(p,w) struct users *p; char *w; { if(p == NULL) { /* new word */ p = (struct users *) malloc (sizeof(struct users)); p->name = strsave(w); p->bsent = byt; p->utim = tim; p->nsent = 1; p->nuser = NULL; } else if(strcmp(w,p->name) == 0) { p->bsent += byt; p->utim += tim; p->nsent++; } else { p->nuser = tree(p->nuser,w); } return(p); } struct call *tcall(p,w) struct call *p; char *w; { if(p == NULL) { /* new cmd */ p = (struct call *) malloc (sizeof(struct call)); if(p == NULL) error("tcall out of Mem"); p->ncall = NULL; p->cname = strsave(w); p->times = 1; cmdcount++; } else if(strcmp(w,p->cname) == 0) { p->times++; } else { p->ncall = tcall(p->ncall,w); } return(p); } treeprint(p) struct users *p; { if(p != NULL) { printf("%10s%10s ", "", p->name); printf("sent %4ld files & %10ld bytes ", p->nsent, p->bsent); hourtmp = p->utim /60; second = p->utim - ( hourtmp * 60 ); hour = hourtmp / 60; min = hourtmp - (hour * 60); printf("%02ld:%02ld:%02ld\n", hour,min,second); treeprint(p->nuser); } } tcallpr(p) struct call *p; { if(p != NULL ) { printf("%10d %s\n", p->times, p->cname); tcallpr(p->ncall); } } trsort() { struct call *q; struct call *p; register int i, sw, n,m; char *c; char *d; loop: p = cmd; sw = 0; for(i=0;i< cmdcount-1; i++) { q = p->ncall; if(p->times < q->times) { /* switch */ c = p->cname; n = p->times; d = q->cname; m = q->times; p->cname = d; p->times = m; q->cname = c; q->times = n; sw = 1; } p = p->ncall; } if(sw) goto loop; } #define NULLP "" char * getfield(field,buffer,separator) char separator; char buffer[]; int field; { register int i; char *bp, *p, buff[512]; int sht; sht = 0; strcpy(buff,buffer); p = &buff[0]; i = 0; if((*p == separator) && (field != 0)) { field -= 1; sht = 1; } while( i != field) { for(++p; *p != separator; p++) { if (*p == '\0') { return(NULLP); } } i++; } if(sht) field += 1; if(field != 0) p++; bp =p; for (; *p != separator; p++) if(*p == '\0') return(bp); *p = '\0'; return(bp); } !End!Of!Stuff! echo x - LOGFILE cat >LOGFILE <<'!End!Of!Stuff!' root uiucdcs (11/1-7:01-28696) notes XQT (PATH=/usr/ucb:/bin:/usr/bin:/etc;nfrcv net.news.group uiucdcs ) root uiucdcs (11/1-7:01-28696) notes XQT (PATH=/usr/ucb:/bin:/usr/bin:/etc;nfrcv net.rec.photo uiucdcs ) uucp cepu (11/1-7:07-28717) OK (startup) uucp cepu (11/1-7:07-28717) OK (conversation complete) brad ihnp4 (11/1-8:013-29001) WRONG TIME TO CALL (ihnp4) brad ihnp4 (11/1-8:013-29001) FAILED (call to ihnp4 ) brad ihnp4 (11/1-8:020-29043) WRONG TIME TO CALL (ihnp4) brad ihnp4 (11/1-8:020-29043) FAILED (call to ihnp4 ) brad uiucdcs (11/1-8:025-29072) WRONG TIME TO CALL (uiucdcs) brad uiucdcs (11/1-8:025-29072) FAILED (call to uiucdcs ) brad ihnp4 (11/1-8:042-29152) WRONG TIME TO CALL (ihnp4) brad ihnp4 (11/1-8:042-29152) FAILED (call to ihnp4 ) root ihnp4 (11/1-8:054-29298) SUCCEEDED (call to ihnp4 ) root ihnp4 (11/1-8:054-29298) OK (startup) brad ihnp4 (11/1-8:054-29298) REQUEST (S D.ihnp4B23lu D.ihnp4B23lu brad) brad ihnp4 (11/1-8:055-29298) REQUESTED (CY) brad ihnp4 (11/1-8:055-29298) REQUEST (S D.bradleyX23ls X.bradleyX23ls brad) brad ihnp4 (11/1-8:055-29298) REQUESTED (CY) !End!Of!Stuff! echo x - SYSLOG cat >SYSLOG <<'!End!Of!Stuff!' brad ihnp4 (11/1-8:055) (468168935) sent data 433 bytes 4 secs brad ihnp4 (11/1-8:055) (468168943) sent data 75 bytes 1 secs uucp ihnp4 (11/1-8:055) (468168959) received data 771 bytes 10 secs uucp ihnp4 (11/1-8:056) (468168964) received data 166 bytes 3 secs euucp ihnp4 (11/1-8:056) (468168994) received data 2629 bytes 26 secs euucp ihnp4 (11/1-8:056) (468169001) received data 160 bytes 3 secs uucp ihnp4 (11/1-8:056) (468169019) received data 1312 bytes 15 secs uucp ihnp4 (11/1-8:057) (468169025) received data 141 bytes 4 secs brad uiucdcs (11/1-8:058) (468169104) sent data 183 bytes 1 secs brad uiucdcs (11/1-8:058) (468169110) sent data 73 bytes 0 secs !End!Of!Stuff! exit