summaryrefslogtreecommitdiff
path: root/xstats.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2001-06-08 00:32:52 +0000
committerAlan Coopersmith <alan.coopersmith@sun.com>2009-05-04 18:13:07 -0700
commit062412a066cc62635c1d1eb99999ee774775ca6f (patch)
tree3a72f748e101900c292cf242055862ecce4bccb7 /xstats.c
parent306057f2475b216fb73686bcb0003355cf88944a (diff)
downloadxscope-062412a066cc62635c1d1eb99999ee774775ca6f.tar.gz
Import xscope bits into keithp.com CVS
Diffstat (limited to 'xstats.c')
-rw-r--r--xstats.c114
1 files changed, 114 insertions, 0 deletions
diff --git a/xstats.c b/xstats.c
new file mode 100644
index 0000000..33ec4c7
--- /dev/null
+++ b/xstats.c
@@ -0,0 +1,114 @@
+#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);
+}