#define REQUEST 0 #define REPLY 1 #define ERROR 2 #define EVENT 3 string_to_action(s) char *s; { if (!strcmp(s, "@@REQUEST")) return REQUEST; if (!strcmp(s, "@@REPLY")) return REPLY; if (!strcmp(s, "@@ERROR")) return ERROR; if (!strcmp(s, "@@EVENT")) return EVENT; } typedef struct { double time; int action; int client; int major; int minor; int len; } ActionRec, *ActionPtr; unsigned long requestCount[256][256]; unsigned long replyCount[256][256]; unsigned long eventCount[256][256]; unsigned long errorCount[256][256]; unsigned long requestBytes[256][256]; unsigned long replyBytes[256][256]; unsigned long eventBytes[256][256]; unsigned long errorBytes[256][256]; unsigned long tRequestBytes; unsigned long tReplyBytes; unsigned long tEventBytes; unsigned long tErrorBytes; unsigned long tRequestCount; unsigned long tReplyCount; unsigned long tEventCount; unsigned long tErrorCount; dump(c, b) unsigned long c[256][256]; unsigned long b[256][256]; { int i, j; unsigned long count, bytes; for (i = 0; i < 256; i++) { for (j = 0; j < 256; j++) { if (count = c[i][j]) { bytes = b[i][j]; printf("%3d %3d count %5d bytes %7d\n", i, j, count, bytes); } } } } main() { ActionRec a; char aname[128]; int i, j; while (scanf("%lf: %s %d %d %d %d\n", &a.time, aname, &a.client, &a.major, &a.minor, &a.len) == 6) { a.action = string_to_action(aname); switch (a.action) { case REQUEST: requestCount[a.major][a.minor]++; requestBytes[a.major][a.minor] += a.len; tRequestCount++; tRequestBytes += a.len; break; case REPLY: replyCount[a.major][a.minor]++; replyBytes[a.major][a.minor] += a.len; tReplyCount++; tReplyBytes += a.len; break; case EVENT: eventCount[a.major][a.minor]++; eventBytes[a.major][a.minor] += a.len; tEventCount++; tEventBytes += a.len; break; case ERROR: errorCount[a.major][a.minor]++; errorBytes[a.major][a.minor] += a.len; tErrorCount++; tErrorBytes += a.len; break; } } printf("requests:\n"); dump(requestCount, requestBytes); printf("replies:\n"); dump(replyCount, replyBytes); printf("events:\n"); dump(eventCount, eventBytes); printf("errors:\n"); dump(errorCount, errorBytes); printf("send count %5d bytes %7d\n", tRequestCount, tRequestBytes); printf("recv count %5d bytes %7d\n", tEventCount + tErrorCount + tReplyCount, tEventBytes + tErrorBytes + tReplyBytes); }