00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 const char *XrdXrootdStatsCVSID = "$Id: XrdXrootdStats.cc 29874 2009-08-21 16:56:04Z ganis $";
00014
00015 #include <stdio.h>
00016
00017 #include "Xrd/XrdStats.hh"
00018 #include "XrdSfs/XrdSfsInterface.hh"
00019 #include "XrdXrootd/XrdXrootdResponse.hh"
00020 #include "XrdXrootd/XrdXrootdStats.hh"
00021
00022
00023
00024
00025
00026 XrdXrootdStats::XrdXrootdStats(XrdStats *sp)
00027 {
00028
00029 xstats = sp;
00030
00031 Count = 0;
00032 errorCnt = 0;
00033 redirCnt = 0;
00034 stallCnt = 0;
00035 getfCnt = 0;
00036 putfCnt = 0;
00037 openCnt = 0;
00038 readCnt = 0;
00039 prerCnt = 0;
00040 writeCnt = 0;
00041 syncCnt = 0;
00042 miscCnt = 0;
00043 AsyncNum = 0;
00044 AsyncMax = 0;
00045 AsyncRej = 0;
00046 AsyncNow = 0;
00047 Refresh = 0;
00048 }
00049
00050
00051
00052
00053
00054 int XrdXrootdStats::Stats(char *buff, int blen, int do_sync)
00055 {
00056 static const char statfmt[] = "<stats id=\"xrootd\"><num>%d</num>"
00057 "<ops><open>%d</open><rf>%d</rf><rd>%d</rd><pr>%d</pr><wr>%d</wr>"
00058 "<sync>%d</sync><getf>%d</getf><putf>%d</putf><misc>%d</misc></ops>"
00059 "<aio><num>%d</num><max>%d</max><rej>%d</rej></aio></stats>";
00060 int len;
00061
00062
00063
00064 if (!buff) return sizeof(statfmt) + (16*13) + (fsP ? fsP->getStats(0,0) : 0);
00065
00066
00067
00068 statsMutex.Lock();
00069 len = snprintf(buff, blen, statfmt, Count, openCnt, Refresh, readCnt,
00070 prerCnt, writeCnt, syncCnt, getfCnt, putfCnt, miscCnt,
00071 AsyncNum, AsyncMax, AsyncRej);
00072 statsMutex.UnLock();
00073
00074
00075
00076 if (fsP) len += fsP->getStats(buff+len, blen-len);
00077 return len;
00078 }
00079
00080
00081
00082
00083
00084 int XrdXrootdStats::Stats(XrdXrootdResponse &resp, const char *opts)
00085 {
00086 int i, xopts = 0;
00087
00088 while(*opts)
00089 {switch(*opts)
00090 {case 'a': xopts |= XRD_STATS_ALL; break;
00091 case 'b': xopts |= XRD_STATS_BUFF; break;
00092 case 'i': xopts |= XRD_STATS_INFO; break;
00093 case 'l': xopts |= XRD_STATS_LINK; break;
00094 case 'd': xopts |= XRD_STATS_POLL; break;
00095 case 'u': xopts |= XRD_STATS_PROC; break;
00096 case 'p': xopts |= XRD_STATS_PROT; break;
00097 case 's': xopts |= XRD_STATS_SCHD; break;
00098 default: break;
00099 }
00100 opts++;
00101 }
00102
00103 if (!xopts) return resp.Send();
00104
00105 xstats->Lock();
00106 i = resp.Send(xstats->Stats(xopts));
00107 xstats->UnLock();
00108 return i;
00109 }