rename-rx-stats-20080925
[openafs.git] / src / libadmin / samples / rxdebug_rx_stats.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  *
9  * Portions Copyright (c) 2003 Apple Computer, Inc.
10  */
11
12 /*
13  * This file contains sample code for the rxstats interface 
14  */
15
16 #include <afsconfig.h>
17 #include <afs/param.h>
18
19 RCSID
20     ("$Header$");
21
22 #ifdef AFS_NT40_ENV
23 #include <winsock2.h>
24 #include <pthread.h>
25 #endif
26 #include <string.h>
27 #include <afs/afs_Admin.h>
28 #include <afs/afs_clientAdmin.h>
29 #include <afs/afs_utilAdmin.h>
30
31 #ifdef AFS_DARWIN_ENV
32 pthread_mutex_t des_init_mutex = PTHREAD_MUTEX_INITIALIZER;
33 pthread_mutex_t des_random_mutex = PTHREAD_MUTEX_INITIALIZER;
34 pthread_mutex_t rxkad_random_mutex = PTHREAD_MUTEX_INITIALIZER;
35 #endif /* AFS_DARWIN_ENV */
36
37 void
38 Usage()
39 {
40     fprintf(stderr, "Usage: rxdebug_rx_stats <host> <port>\n");
41     exit(1);
42 }
43
44 void
45 ParseArgs(int argc, char *argv[], char **srvrName, long *srvrPort)
46 {
47     char **argp = argv;
48
49     if (!*(++argp))
50         Usage();
51     *srvrName = *(argp++);
52     if (!*(argp))
53         Usage();
54     *srvrPort = strtol(*(argp++), NULL, 0);
55     if (*srvrPort <= 0 || *srvrPort >= 65536)
56         Usage();
57     if (*(argp))
58         Usage();
59 }
60
61 static char *packetTypes[] = RX_PACKET_TYPES;
62
63 int
64 main(int argc, char *argv[])
65 {
66     int rc;
67     afs_status_t st = 0;
68     rxdebugHandle_p handle;
69     char *srvrName;
70     long srvrPort;
71     struct rx_statistics stats;
72     afs_uint32 supportedStats;
73     char tstr[32];
74     int i;
75
76     ParseArgs(argc, argv, &srvrName, &srvrPort);
77
78     rc = afsclient_Init(&st);
79     if (!rc) {
80         fprintf(stderr, "afsclient_Init, status %d\n", st);
81         exit(1);
82     }
83
84     rc = afsclient_RXDebugOpenPort(srvrName, srvrPort, &handle, &st);
85     if (!rc) {
86         fprintf(stderr, "afsclient_RXDebugOpenPort, status %d\n", st);
87         exit(1);
88     }
89
90     rc = util_RXDebugRxStats(handle, &stats, &supportedStats, &st);
91     if (!rc) {
92         fprintf(stderr, "util_RXDebugBasicStats, status %d\n", st);
93         exit(1);
94     }
95
96     rc = afsclient_RXDebugClose(handle, &st);
97     if (!rc) {
98         fprintf(stderr, "afsclient_RXDebugClose, status %d\n", st);
99         exit(1);
100     }
101
102     printf("\n");
103     printf("RX stats: host %s (port %d)\n", srvrName, srvrPort);
104     printf("\n");
105     printf("    packetRequests:              %d\n", stats.packetRequests);
106     printf("    receivePktAllocFailures:     %d\n",
107            stats.receivePktAllocFailures);
108     if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
109         printf("    receiveCbufPktAllocFailures: %d\n",
110                stats.receiveCbufPktAllocFailures);
111     }
112     printf("    sendPktAllocFailures:        %d\n",
113            stats.sendPktAllocFailures);
114     if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
115         printf("    sendCbufPktAllocFailures:    %d\n",
116                stats.sendCbufPktAllocFailures);
117     }
118     printf("    specialPktAllocFailures:     %d\n",
119            stats.specialPktAllocFailures);
120     printf("    socketGreedy:                %d\n", stats.socketGreedy);
121     printf("    bogusPacketOnRead:           %d\n", stats.bogusPacketOnRead);
122     printf("    bogusHost:                   %d\n", stats.bogusHost);
123     printf("    noPacketOnRead:              %d\n", stats.noPacketOnRead);
124     printf("    noPacketBuffersOnRead:       %d\n",
125            stats.noPacketBuffersOnRead);
126     printf("    selects:                     %d\n", stats.selects);
127     printf("    sendSelects:                 %d\n", stats.sendSelects);
128     printf("    packetsRead:\n");
129     for (i = 0; i < RX_N_PACKET_TYPES; i++) {
130         strcpy(tstr, packetTypes[i]);
131         printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsRead[i]);
132     }
133     printf("    dataPacketsRead:             %d\n", stats.dataPacketsRead);
134     printf("    ackPacketsRead:              %d\n", stats.ackPacketsRead);
135     printf("    dupPacketsRead:              %d\n", stats.dupPacketsRead);
136     printf("    spuriousPacketsRead:         %d\n",
137            stats.spuriousPacketsRead);
138     printf("    ignorePacketDally:           %d\n", stats.ignorePacketDally);
139     printf("    packetsSent:\n");
140     for (i = 0; i < RX_N_PACKET_TYPES; i++) {
141         strcpy(tstr, packetTypes[i]);
142         printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsSent[i]);
143     }
144     printf("    ackPacketsSent:              %d\n", stats.ackPacketsSent);
145     printf("    dataPacketsSent:             %d\n", stats.dataPacketsSent);
146     printf("    dataPacketsReSent:           %d\n", stats.dataPacketsReSent);
147     printf("    dataPacketsPushed:           %d\n", stats.dataPacketsPushed);
148     printf("    ignoreAckedPacket:           %d\n", stats.ignoreAckedPacket);
149     printf("    netSendFailures:             %d\n", stats.netSendFailures);
150     printf("    fatalErrors:                 %d\n", stats.fatalErrors);
151     printf("    nRttSamples:                 %d\n", stats.nRttSamples);
152     printf("    totalRtt:                    %.6f\n",
153            clock_Float(&stats.totalRtt));
154     printf("    minRtt:                      %.6f\n",
155            clock_Float(&stats.minRtt));
156     printf("    maxRtt:                      %.6f\n",
157            clock_Float(&stats.maxRtt));
158     printf("    nServerConns:                %d\n", stats.nServerConns);
159     printf("    nClientConns:                %d\n", stats.nClientConns);
160     printf("    nPeerStructs:                %d\n", stats.nPeerStructs);
161     printf("    nCallStructs:                %d\n", stats.nCallStructs);
162     printf("    nFreeCallStructs:            %d\n", stats.nFreeCallStructs);
163     printf("\n");
164
165     exit(0);
166 }