|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T o
Length: 15520 (0x3ca0) Types: TextFile Names: »osimon.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦e83f91978⟧ »EurOpenD22/isode/osimis-2.0.tar.Z« └─⟦d846658bd⟧ └─⟦this⟧ »osimis/smap/osimon.c«
/* * Copyright (c) 1988 University College London * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the Department of Computer Science, University College London. * The name of the University may not be used to * endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ /* osimon main program */ /* * By George Pavlou, October 1988 */ #include <stdio.h> #include <errno.h> #include <signal.h> #include "isode/psap.h" #include "isode/rosap.h" #include "msap.h" #include "disp.h" #include "recs.h" #include "objectS.h" #include "report.h" #include "config.h" #include "defs.h" /* DATA */ char *progname = "osimon"; static char *tent_hdr1a [] = { "Conns", "TPDUs", "ConnReqs", "CrErrs", "Prot", "Csum" }; static char *tent_hdr1b [] = { "host", "boot time", "actv prev", "sent recv retr", "succ unsc", "cgst cfig", "errs", "errs" }; static char *einv_hdr1a [] = { "Process", "Conns", "CrSucsful", "CrUnscful", "CrErrs", "Prot", "Cksum" }; static char *einv_hdr1b [] = { "id", "since", "active", "in out", "in out", "cgst cfig", "errs", "errs" }; static char *cept_hdr1a [] = { "CeptId", "TPDUs", "Bytes" }; static char *cept_hdr1b [] = { "pid fd", "since", "remote host", "sent recv retr", "sent recv retr", "tprot" }; static char *ttltxt[] = { "Management information for Transport layer activity at host ", "Management information for Transport layer activity on all hosts" }; static char *msgs[] = { "no entity invocations", "no connection endpoints", "no connection", "broken connection, SMA down?" }; /* Global Variables */ int terminate(), setpoll(), setwinchange(); /* signal handlers */ int idcmp(), timecmp(); ManagedSystemS *parseManagedSystem(); T_LayerEntityS *parseTLayerEntity(); T_EntityInvocationS *parseTEntityInvocation(); T_ConnectionEndpointS *parseTConnectionEndpoint(); MO_ID *objid2inst(); FREC *wfrec(); extern int errno; extern int winchange, poll; static char ttlfmt [140]; /* format for printing title */ static char hdr1afmt [140]; /* format for printing hdr 1a */ static char hdr1bfmt [140]; /* format for printing hdr 1b */ static char hdr2afmt [140]; /* format for printing hdr 2a */ static char hdr2bfmt [140]; /* format for printing hdr 2b */ static char title [LNLEN]; /* title buffer */ static DISFL disfl[] = { {NULLIFP, NULLIFP, NULLIFP, idcmp, einv_hdr1a, einv_hdr1b, cept_hdr1a, cept_hdr1b, NULLCP, NULLCP, msgs, title}, {NULLIFP, NULLIFP, NULLIFP, idcmp, tent_hdr1a, tent_hdr1b, NULLVP, NULLVP, NULLCP, NULLCP, msgs, title} }; DISFL *dfp; int msd[MAXHOSTS]; /* management connection fds */ int disptype; int mask, nfds; char host[HOSTLEN+1]; /* local host name */ char *hosts[MAXHOSTS]; /* hosts where SMAs run */ int NofHosts; /* how many */ /* MAIN */ main (argc, argv) int argc; char **argv; { isodesetailor("./smaptailor"); if (getconfig(hosts, &NofHosts) == NOTOK) advise(NULLCP, "Warning: failed to read configuration file"); if ((disptype = parse_args(argc, argv)) == NOTOK) error(NULLCP, "host %s not supported", host); dfp = (disptype == HOST ? &disfl[HOST] : &disfl[ALL]); getfmt(disptype); /* get title and header formats */ mktitle(disptype); /* make title */ if (disptype == HOST) /* get management information */ initialise_host(host, msd); else /* ALL */ initialise_all(hosts, msd); display(disptype, msd); /* maintain the real-time display */ terminate(OK); /* NOTREACHED */ } static terminate (sig) int sig; { if (sig != NOTOK) { unset_reports(msd, disptype); close_connections(msd, NofHosts); } clrup(); exit(sig); } static unset_reports (msd, disptype) int msd[], disptype; { int i; if (disptype == HOST) { ReportSetRequest(TEINV_REP, m_removeValue, msd[0]); ReportSetRequest(TCEPT_REP, m_removeValue, msd[0]); } else for (i = 0; i < NofHosts; i++) if (msd[i] > 0) ReportSetRequest(TENT_REP, m_removeValue, msd[i]); } static int display (disptype, msd) int disptype, msd[]; { struct MSAPindication mis; int ifds, fds; char c; signal (SIGHUP, terminate); signal (SIGINT, terminate); signal (SIGQUIT, terminate); signal (SIGTERM, terminate); signal (SIGALRM, setpoll); if (disptype == ALL) alarm(WAIT); #ifdef SUNWIN signal (SIGWINCH, setwinchange); setupwindow(); #endif startdisplay(dfp, GAP); /* do first page */ mask |= 1; if (!nfds) nfds = 1; /* check stdin and management connection(s) */ for (EVER) { if (poll) do_poll(msd); #ifdef SUNWIN if (winchange) { winchange = NO; getwinsize(); winredraw(); /* redraw screen */ } #endif ifds = mask; switch (fds = xselect(nfds, &ifds, NULLIP, NULLIP, 1)) { case OK: continue; case NOTOK: if (errno != EINTR) { advise(NULLCP, "xselect failed"); terminate(NOTOK); } continue; /* select interrupted by signal */ default: break; } if (ifds & 1) { switch (c = (char) checkcmd(getchar())) { case EOF: terminate(0); case ESCAPE: break; default: docmd(c); /* process input */ } if (fds == 1) continue; /* keyboard activity only */ } if (disptype == HOST) { if (ifds & (1 << msd[0])) { if (M_WaitReq(msd[0], NOTOK, &mis) == NOTOK) { advise(NULLCP, "M_WaitReq failed, SMA down?"); terminate(NOTOK); } if (mis.mi_type != MI_EVENT_REP) { advise(NULLCP, "unknown mi_type = %d, should be \ MI_EVENT_REP", mis.mi_type); continue; } process_evrep_host(&mis.mi_eventrepv); mifree(&mis); redisplay(); } } else { /* ALL */ int i; for (i = 0; i < NofHosts; i++) if (msd[i] > 0 && ifds & (1 << msd[i])) { if (M_WaitReq(msd[i], NOTOK, &mis) == NOTOK) { MO_ID sysid; if (nfds == msd[i] + 1) nfds--; mask &= ~(1 << msd[i]); msd[i] = -1; sysid.rdnlen = i; overwriterec(wfrec(CONN_BROKEN, NULL, &sysid), i+4); redisplay(); continue; } switch (mis.mi_type) { case MI_EVENT_REP: process_evrep_all(&mis.mi_eventrepv, i); redisplay(); break; case MI_GET_RES: if (process_getr_all(&mis.mi_getr) == DONE) redisplay(); break; default: advise(NULLCP, "unknown mi_type = %d", mis.mi_type); continue; } mifree(&mis); } } } } /* construct title and header formats */ static getfmt (disptype) int disptype; { gettitlefmt(disptype); /* title */ gethdrfmt(disptype, HDR1A, hdr1afmt); /* hdr 1a */ gethdrfmt(disptype, HDR1B, hdr1bfmt); /* hdr 1b */ if (disptype == HOST) { gethdrfmt(disptype, HDR2A, hdr2afmt); /* hdr 2a */ gethdrfmt(disptype, HDR2B, hdr2bfmt); /* hdr 2b */ } } static gettitlefmt (disptype) int disptype; { int w; switch (disptype) { case HOST: if ((w = strlen(ttltxt[0])) >= 70) sprintf(ttlfmt, "%%-70.70s%%-8.8s"); else sprintf(ttlfmt, "%%-%d.%ds%%-%d.%ds", w, w, LNLEN-2-w, LNLEN-2-w); break; case ALL: sprintf (ttlfmt, "%%-%d.%ds", LNLEN-2, LNLEN-2); break; default: error(NULLCP, "gettitlefmt: unknown display type %d", disptype); } } static gethdrfmt (disptype, hdrln, hdrfmt) int disptype, hdrln; char hdrfmt[]; { switch (disptype) { case HOST: switch (hdrln) { case HDR1A: strcpy(hdrfmt, "%-8s| |%-6.5s| %-10.9s\ | %-10.9s| %-9.6s| %-5.4s| %.5s"); break; case HDR1B: strcpy(hdrfmt, " %-5.2s| %-9.5s|%.6s| %-9.7s\ | %-9.7s| %-10.9s| %-5.4s| %-5.4s"); break; case HDR2A: strcpy(hdrfmt, " %-7.6s| | \ | %-10.5s| %-10.5s| "); break; case HDR2B: strcpy (hdrfmt, "%-8.7s| %-9.5s| %-12.11s| %-15.14s\ | %-15.14s| %-7.5s"); break; default: error(NULLCP, "gethdrfmt: unknown hdrln %d", hdrln); } break; case ALL: switch (hdrln) { case HDR1A: strcpy(hdrfmt, " | | %-7.5s| \ %-9.5s|%-9.8s| %-8.6s|%.4s|%.4s"); break; case HDR1B: strcpy(hdrfmt, " %-7.4s| %-11.9s|%.9s|%14.14s|%.9s|%.9s\ |%.4s|%.4s"); break; default: error(NULLCP, "gethdrfmt: illegal hdrln %d", hdrln); } break; default: error(NULLCP, "unknown display type %d", disptype); } } /* make title */ static mktitle (disptype) int disptype; { switch (disptype) { case HOST: sprintf (title, ttlfmt, ttltxt[0], host); break; case ALL: sprintf (title, ttlfmt, ttltxt[1]); break; default: error(NULLCP, "unknown display type %d", disptype); } } static FREC frec; static char buf[512]; FREC *wfrec (mode, mobj, objinst) int mode; ManagedObjectS *mobj; MO_ID *objinst; { static char bootTime [MAXHOSTS] [TIMELEN+1]; int i, pid, fd; char *time, *tprot2str(), *cept2rhost(), *utct2disptime(); switch (mode) { case T_EINV: if (objinst2id(objinst, T_EINV, NULLIP, &pid) == NOTOK) { advise(NULLCP, "wfrec: bad objinst"); return ((FREC *) NULL); } time = utct2disptime(&mobj->einv->creationTime); *(time+12) = '\0'; sprintf(buf, "%-8d|%.12s|%4d |%4d%5d |%4d%5d |%4d%5d |%4d \ |%4d ", pid, time, mobj->einv->activeConnections, mobj->einv->crTPDUSuccessfulIn, mobj->einv->crTPDUSuccessfulOut, mobj->einv->crTPDUUnsuccessfulIn, mobj->einv->crTPDUUnsuccessfulOut, mobj->einv->crTPDUCongestion, mobj->einv->crTPDUConfigurationError, mobj->einv->tProtocolError, mobj->einv->tPDUChecksumError); frec.f_compid.id1 = pid; frec.f_compid.id2 = GRP1; break; case T_CEPT: if (objinst2id(objinst, T_CEPT, NULLIP, &pid, &fd) == NOTOK) { advise(NULLCP, "wfrec: bad objinst"); return ((FREC *) NULL); } time = utct2disptime(&mobj->cept->creationTime); *(time+15) = '\0'; sprintf(buf, "%-5d%2d | %-10.8s| %-12.12s|%5d%5d%5d \ |%5d%5d%5d | %-6.5s", pid, fd, time+7, cept2rhost(mobj->cept, host), mobj->cept->numberTPDUSent, mobj->cept->numberTPDUReceived, mobj->cept->numberTPDURetransmitted, mobj->cept->numberBytesSent, mobj->cept->numberBytesReceived, mobj->cept->numberBytesRetransmitted, tprot2str(mobj->cept->tProtocol)); frec.f_compid.id1 = pid; frec.f_compid.id2 = fd; break; case M_SYSTEM: /* it only saves system boot time here */ time = utct2disptime(&mobj->einv->creationTime); *(time+12) = '\0'; strncpy (bootTime[objinst->rdnlen], time, TIMELEN); bootTime[objinst->rdnlen][TIMELEN] = '\0'; return ((FREC *) NULL); case T_ENTITY: i = objinst->rdnlen; sprintf(buf, "%-10.10s|%.12s|%3d%5d |%4d %4d %4d|%4d%4d |%4d%4d \ |%3d |%3d ", hosts[i], bootTime[objinst->rdnlen], mobj->tent->activeConnections, mobj->tent->previousConnections, mobj->tent->numberTPDUSent, mobj->tent->numberTPDUReceived, mobj->tent->numberTPDURetransmitted, mobj->tent->crTPDUSuccessfulIn + mobj->tent->crTPDUSuccessfulOut, mobj->tent->crTPDUUnsuccessfulIn + mobj->tent->crTPDUUnsuccessfulOut, mobj->tent->crTPDUCongestion, mobj->tent->crTPDUConfigurationError, mobj->tent->tProtocolError, mobj->tent->tPDUChecksumError); frec.f_compid.id1 = i; frec.f_compid.id2 = GRP1; break; case NO_EINVS: sprintf(buf, "%-78.78s", dfp->df_msg[0]); frec.f_compid.id1 = 0; /* 'pid' = 0 */ frec.f_compid.id2 = GRP1; break; case NO_CEPTS: sprintf(buf, "%-78.78s", dfp->df_msg[1]); frec.f_compid.id1 = 0; /* 'pid' = 0 */ frec.f_compid.id2 = 0; /* 'fd' = 0 */ break; case NO_CONN: i = objinst->rdnlen; /* sysid */ sprintf(buf, "%-10.10s|%-68.68s", hosts[i], dfp->df_msg[2]); frec.f_compid.id1 = i; frec.f_compid.id2 = GRP1; break; case CONN_BROKEN: i = objinst->rdnlen; /* sysid */ sprintf(buf, "%-8.8s| %-68.68s", hosts[i], dfp->df_msg[3]); frec.f_compid.id1 = i; frec.f_compid.id2 = GRP1; break; default: error(NULLCP, "wfrec: bad mode %d", mode); } frec.f_len = strlen(buf); frec.f_text = buf; /* frec.f_time not used */ return (&frec); } FREC *whdr (mode, hdrline) int mode, hdrline; { register char *bp = buf; int i; switch (hdrline) { case HDR1A: frec.f_compid.id2 = HDR1A; switch (mode) { case T_EINV: sprintf(buf, hdr1afmt, dfp->df_hdr1a[0], dfp->df_hdr1a[1], dfp->df_hdr1a[2], dfp->df_hdr1a[3], dfp->df_hdr1a[4], dfp->df_hdr1a[5], dfp->df_hdr1a[6]); break; case T_ENTITY: sprintf(buf, hdr1afmt, dfp->df_hdr1a[0], dfp->df_hdr1a[1], dfp->df_hdr1a[2], dfp->df_hdr1a[3], dfp->df_hdr1a[4], dfp->df_hdr1a[5]); break; default: error(NULLCP, "whdr: illegal mode %d", mode); } break; case HDR1B: frec.f_compid.id2 = HDR1B; switch (mode) { case T_EINV: sprintf(buf, hdr1bfmt, dfp->df_hdr1b[0], dfp->df_hdr1b[1], dfp->df_hdr1b[2], dfp->df_hdr1b[3], dfp->df_hdr1b[4], dfp->df_hdr1b[5], dfp->df_hdr1b[6], dfp->df_hdr1b[7]); break; case T_ENTITY: sprintf(buf, hdr1bfmt, dfp->df_hdr1b[0], dfp->df_hdr1b[1], dfp->df_hdr1b[2], dfp->df_hdr1b[3], dfp->df_hdr1b[4], dfp->df_hdr1b[5], dfp->df_hdr1b[6], dfp->df_hdr1b[7]); break; default: error(NULLCP, "whdr: illegal mode %d", mode); } break; case HDR2A: frec.f_compid.id2 = HDR2A; switch (mode) { case T_CEPT: sprintf(buf, hdr2afmt, dfp->df_hdr2a[0], dfp->df_hdr2a[1], dfp->df_hdr2a[2]); break; default: error(NULLCP, "whdr: illegal mode %d", mode); } break; case HDR2B: frec.f_compid.id2 = HDR2B; switch (mode) { case T_CEPT: sprintf(buf, hdr2bfmt, dfp->df_hdr2b[0], dfp->df_hdr2b[1], dfp->df_hdr2b[2], dfp->df_hdr2b[3], dfp->df_hdr2b[4], dfp->df_hdr2b[5]); break; default: error(NULLCP, "whdr: illegal mode %d", mode); } break; case BLANK: for (i = 0; i < LNLEN-2; i++) *bp++ = ' '; *bp = '\0'; frec.f_compid.id2 = (mode == T_CEPT ? HDR2_BLANK : HDR1_BLANK); break; case UNDLN: for (i = 0; i < LNLEN-2; i++) *bp++ = '-'; *bp = '\0'; frec.f_compid.id2 = (mode == T_CEPT ? HDR2_UNDLN : HDR1_UNDLN); break; default: error(NULLCP, "whdr: illegal hdrline %d", hdrline); } frec.f_compid.id1 = (mode == T_CEPT ? HDR2 : HDR1); frec.f_len = strlen(buf); frec.f_text = buf; /* frec.f_time not used */ return (&frec); }