#include <afs/param.h>
#include <string.h>
-RCSID
- ("$Header$");
#include <afs/xstat_fs.h>
#include <afs/xstat_cm.h>
"StoreData"
};
+static char *CbCounterStrings[] = {
+ "DeleteFiles",
+ "DeleteCallBacks",
+ "BreakCallBacks",
+ "AddCallBack",
+ "GotSomeSpaces",
+ "DeleteAllCallBacks",
+ "nFEs",
+ "nCBs",
+ "nblks",
+ "CBsTimedOut",
+ "nbreakers",
+ "GSS1",
+ "GSS2",
+ "GSS3",
+ "GSS4",
+ "GSS5"
+};
+
/*________________________________________________________________________
FS STATS ROUTINES
*_______________________________________________________________________*/
{ /*Print_fs_OpTiming */
fprintf(fs_outFD,
- "%15s: %d ops (%d OK); sum=%d.%06d, min=%d.%06d, max=%d.%06d\n",
+ "%15s: %d ops (%d OK); sum=%ld.%06ld, min=%ld.%06ld, max=%ld.%06ld\n",
fsOpNames[a_opIdx], a_opTimeP->numOps, a_opTimeP->numSuccesses,
- a_opTimeP->sumTime.tv_sec, a_opTimeP->sumTime.tv_usec,
- a_opTimeP->minTime.tv_sec, a_opTimeP->minTime.tv_usec,
- a_opTimeP->maxTime.tv_sec, a_opTimeP->maxTime.tv_usec);
+ (long)a_opTimeP->sumTime.tv_sec, (long)a_opTimeP->sumTime.tv_usec,
+ (long)a_opTimeP->minTime.tv_sec, (long)a_opTimeP->minTime.tv_usec,
+ (long)a_opTimeP->maxTime.tv_sec, (long)a_opTimeP->maxTime.tv_usec);
} /*Print_fs_OpTiming */
{ /*Print_fs_XferTiming */
fprintf(fs_outFD,
- "%s: %d xfers (%d OK), time sum=%d.%06d, min=%d.%06d, max=%d.%06d\n",
+ "%s: %d xfers (%d OK), time sum=%ld.%06ld, min=%ld.%06ld, max=%ld.%06ld\n",
xferOpNames[a_opIdx], a_xferP->numXfers, a_xferP->numSuccesses,
- a_xferP->sumTime.tv_sec, a_xferP->sumTime.tv_usec,
- a_xferP->minTime.tv_sec, a_xferP->minTime.tv_usec,
- a_xferP->maxTime.tv_sec, a_xferP->maxTime.tv_usec);
+ (long)a_xferP->sumTime.tv_sec, (long)a_xferP->sumTime.tv_usec,
+ (long)a_xferP->minTime.tv_sec, (long)a_xferP->minTime.tv_usec,
+ (long)a_xferP->maxTime.tv_sec, (long)a_xferP->maxTime.tv_usec);
fprintf(fs_outFD, "\t[bytes: sum=%d, min=%d, max=%d]\n",
a_xferP->sumBytes, a_xferP->minBytes, a_xferP->maxBytes);
fprintf(fs_outFD,
int currIdx; /*Loop variable */
- fprintf(fs_outFD, "\t%10d epoch\n", a_detP->epoch);
+ fprintf(fs_outFD, "\t%10ld epoch\n", (long)a_detP->epoch.tv_sec);
for (currIdx = 0; currIdx < FS_STATS_NUM_RPC_OPS; currIdx++)
Print_fs_OpTiming(currIdx, &(a_detP->rpcOpTimes[currIdx]));
char *printableTime; /*Ptr to printable time string */
time_t probeTime;
- numLongs = a_fs_Results->data.AFS_CollData_len;
- if (numLongs != fullPerfLongs) {
- fprintf(fs_outFD,
- " ** Data size mismatch in full performance collection!\n");
- fprintf(fs_outFD, " ** Expecting %d, got %d\n", fullPerfLongs,
- numLongs);
- return;
- }
probeTime = a_fs_Results->probeTime;
printableTime = ctime(&probeTime);
a_fs_Results->collectionNumber, a_fs_Results->connP->hostName,
a_fs_Results->probeNum, printableTime);
- Print_fs_OverallPerfInfo(&(fullPerfP->overall));
- Print_fs_DetailedPerfInfo(&(fullPerfP->det));
+ numLongs = a_fs_Results->data.AFS_CollData_len;
+ if (numLongs != fullPerfLongs) {
+ fprintf(fs_outFD,
+ " ** Data size mismatch in full performance collection!\n");
+ fprintf(fs_outFD, " ** Expecting %d, got %d\n", fullPerfLongs,
+ numLongs);
+
+ /* Unfortunately, the full perf stats contain timeval structures which
+ * do not have the same size everywhere. At least try to print
+ * the overall stats.
+ */
+ if (numLongs >= (sizeof(struct afs_stats_CMPerf) / sizeof(afs_int32))) {
+ Print_fs_OverallPerfInfo(&(fullPerfP->overall));
+ }
+ } else {
+ Print_fs_OverallPerfInfo(&(fullPerfP->overall));
+ Print_fs_DetailedPerfInfo(&(fullPerfP->det));
+ }
} /*Print_fs_FullPerfInfo */
+/*------------------------------------------------------------------------
+ * Print_fs_CallbackStats
+ *
+ * Description:
+ * Print out the AFS_XSTATSCOLL_CBSTATS collection we just
+ * received.
+ *
+ * Arguments:
+ * None.
+ *
+ * Returns:
+ * Nothing.
+ *
+ * Environment:
+ * All the info we need is nestled into xstat_fs_Results.
+ *
+ * Side Effects:
+ * As advertised.
+ *------------------------------------------------------------------------*/
+void
+Print_fs_CallBackStats(struct xstat_fs_ProbeResults *a_fs_Results)
+{
+ char *printableTime;
+ time_t probeTime;
+ int numInt32s = xstat_fs_Results.data.AFS_CollData_len;
+ afs_int32 *val = xstat_fs_Results.data.AFS_CollData_val;
+ int i;
+
+ probeTime = a_fs_Results->probeTime;
+ printableTime = ctime(&probeTime);
+ printableTime[strlen(printableTime) - 1] = '\0';
+ fprintf(fs_outFD,
+ "AFS_XSTATSCOLL_CBSTATS (coll %d) for FS %s\n[Probe %d, %s]\n\n",
+ a_fs_Results->collectionNumber, a_fs_Results->connP->hostName,
+ a_fs_Results->probeNum, printableTime);
+
+ numInt32s = min(numInt32s, sizeof(CbCounterStrings)/sizeof(*CbCounterStrings));
+ for (i=0; i<numInt32s; i++) {
+ fprintf(fs_outFD, "\t%10u %s\n", val[i], CbCounterStrings[i]);
+ }
+} /*Print_fs_CallbackStats */
/*------------------------------------------------------------------------
* afsmon_fsOutput()
/* print detailed information */
if (a_detOutput) {
- Print_fs_FullPerfInfo(&xstat_fs_Results);
- fflush(fs_outFD);
+ if (xstat_fs_Results.collectionNumber ==
+ AFS_XSTATSCOLL_FULL_PERF_INFO) {
+ Print_fs_FullPerfInfo(&xstat_fs_Results);
+ fflush(fs_outFD);
+ } else if (xstat_fs_Results.collectionNumber ==
+ AFS_XSTATSCOLL_CBSTATS) {
+ Print_fs_CallBackStats(&xstat_fs_Results);
+ fflush(fs_outFD);
+ }
}
if (fclose(fs_outFD))
{ /*Print_cm_OpTiming */
fprintf(cm_outFD,
- "%15s: %d ops (%d OK); sum=%d.%06d, min=%d.%06d, max=%d.%06d\n",
+ "%15s: %d ops (%d OK); sum=%ld.%06ld, min=%ld.%06ld, max=%ld.%06ld\n",
a_opNames[a_opIdx], a_opTimeP->numOps, a_opTimeP->numSuccesses,
- a_opTimeP->sumTime.tv_sec, a_opTimeP->sumTime.tv_usec,
- a_opTimeP->minTime.tv_sec, a_opTimeP->minTime.tv_usec,
- a_opTimeP->maxTime.tv_sec, a_opTimeP->maxTime.tv_usec);
+ (long)a_opTimeP->sumTime.tv_sec, (long)a_opTimeP->sumTime.tv_usec,
+ (long)a_opTimeP->minTime.tv_sec, (long)a_opTimeP->minTime.tv_usec,
+ (long)a_opTimeP->maxTime.tv_sec, (long)a_opTimeP->maxTime.tv_usec);
} /*Print_cm_OpTiming */
{ /*Print_cm_XferTiming */
fprintf(cm_outFD,
- "%s: %d xfers (%d OK), time sum=%d.%06d, min=%d.%06d, max=%d.%06d\n",
+ "%s: %d xfers (%d OK), time sum=%ld.%06ld, min=%ld.%06ld, max=%ld.%06ld\n",
a_opNames[a_opIdx], a_xferP->numXfers, a_xferP->numSuccesses,
- a_xferP->sumTime.tv_sec, a_xferP->sumTime.tv_usec,
- a_xferP->minTime.tv_sec, a_xferP->minTime.tv_usec,
- a_xferP->maxTime.tv_sec, a_xferP->maxTime.tv_usec);
+ (long)a_xferP->sumTime.tv_sec, (long)a_xferP->sumTime.tv_usec,
+ (long)a_xferP->minTime.tv_sec, (long)a_xferP->minTime.tv_usec,
+ (long)a_xferP->maxTime.tv_sec, (long)a_xferP->maxTime.tv_usec);
fprintf(cm_outFD, "\t[bytes: sum=%d, min=%d, max=%d]\n",
a_xferP->sumBytes, a_xferP->minBytes, a_xferP->maxBytes);
fprintf(cm_outFD,