"StoreData"
};
+static char *CbCounterStrings[] = {
+ "DeleteFiles",
+ "DeleteCallBacks",
+ "BreakCallBacks",
+ "AddCallBack",
+ "GotSomeSpaces",
+ "DeleteAllCallBacks",
+ "nFEs",
+ "nCBs",
+ "nblks",
+ "CBsTimedOut",
+ "nbreakers",
+ "GSS1",
+ "GSS2",
+ "GSS3",
+ "GSS4",
+ "GSS5"
+};
+
/*________________________________________________________________________
FS STATS ROUTINES
*_______________________________________________________________________*/
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))