XRootD
XrdStats.hh
Go to the documentation of this file.
1 #ifndef __XRD_STATS_H__
2 #define __XRD_STATS_H__
3 /******************************************************************************/
4 /* */
5 /* X r d S t a t s . h h */
6 /* */
7 /* (c) 2004 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* Produced by Andrew Hanushevsky for Stanford University under contract */
9 /* DE-AC02-76-SFO0515 with the Department of Energy */
10 /* */
11 /* This file is part of the XRootD software suite. */
12 /* */
13 /* XRootD is free software: you can redistribute it and/or modify it under */
14 /* the terms of the GNU Lesser General Public License as published by the */
15 /* Free Software Foundation, either version 3 of the License, or (at your */
16 /* option) any later version. */
17 /* */
18 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21 /* License for more details. */
22 /* */
23 /* You should have received a copy of the GNU Lesser General Public License */
24 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26 /* */
27 /* The copyright holder's institutional names and contributor's names may not */
28 /* be used to endorse or promote products derived from this software without */
29 /* specific prior written permission of the institution or contributor. */
30 /******************************************************************************/
31 
32 #include <cstdlib>
33 #include <vector>
34 
35 #include "XrdSys/XrdSysPthread.hh"
36 
37 #define XRD_STATS_ADON 0x00000200
38 #define XRD_STATS_ALLJ 0x00000300
39 #define XRD_STATS_ALLX 0x000003FF
40 #define XRD_STATS_INFO 0x00000001
41 #define XRD_STATS_BUFF 0x00000002
42 #define XRD_STATS_LINK 0x00000004
43 #define XRD_STATS_PLUG 0x00000100
44 #define XRD_STATS_POLL 0x00000008
45 #define XRD_STATS_PROC 0x00000010
46 #define XRD_STATS_PROT 0x00000020
47 #define XRD_STATS_SCHD 0x00000040
48 #define XRD_STATS_SGEN 0x00000080
49 #define XRD_STATS_SYNC 0x40000000
50 #define XRD_STATS_SYNCA 0x20000000
51 
52 #define XRD_STATS_JSON 0x10000000
53 
54 class XrdOucEnv;
55 class XrdNetMsg;
56 class XrdMonitor;
57 class XrdScheduler;
58 class XrdBuffManager;
59 
60 struct iovec;
61 
62 class XrdStats
63 {
64 public:
65 
66 void Export(XrdOucEnv& env);
67 
68 void Init(char **Dest, int iVal=600, int xOpts=0, int jOpts=0);
69 
70 void Report();
71 
72 class CallBack
73  {public: virtual void Info(const char* data, int dlen) = 0;
74  virtual void Info(struct iovec* ioVec, int iovn) = 0;
75  CallBack() {}
76  virtual ~CallBack() {}
77  };
78 
79 // The following method is virtual only because we need to defer ld's
80 // symbol resolution to avoid reporting a missing symbol in libServer.so.
81 // This class is linked into the executable 'xrootd" so that XrdConfig
82 // class can resolve the symbol that will be passed on to plugins.
83 // This is a packaging issue that needs to get resolved at some point.
84 //
85 virtual
86 void Stats(XrdStats::CallBack *InfoBack, int xOpts, int jOpts=0);
87 
89  const char *hn, int port, const char *in, const char *pn,
90  const char *sn);
91 
92 virtual ~XrdStats() {if (buff) free(buff);}
93 
94 private:
95 
96 const char *GenStats(int &rsz, int opts);
97 void GenStats(std::vector<struct iovec>& ioVec, int opts);
98 int InfoStats(char *buff, int blen, int dosync=0);
99 int ProcStats(char *buff, int blen, int dosync=0);
100 
101 static long tBoot; // Time at boot time
102 
103 XrdNetMsg *netDest[2] = {0,0};
104 XrdScheduler *XrdSched;
105 XrdSysError *XrdLog;
106 XrdBuffManager *BuffPool;
107 XrdMonitor *theMon;
108 XrdSysMutex statsMutex;
109 
110 int blen;
111 char *buff; // Used by all callers
112 char *Head;
113 const char *Hend;
114 char *Jead;
115 int Htln;
116 int Jtln;
117 const char *Jend;
118 
119 int jsonOpts;
120 int xmlOpts;
121 bool autoSync = false;
122 
123 const char *myHost;
124 const char *myName;
125 int myPort;
126 };
127 #endif
struct myOpts opts
virtual ~CallBack()
Definition: XrdStats.hh:76
virtual void Info(struct iovec *ioVec, int iovn)=0
virtual void Info(const char *data, int dlen)=0
void Init(char **Dest, int iVal=600, int xOpts=0, int jOpts=0)
Definition: XrdStats.cc:141
XrdStats(XrdSysError *eP, XrdScheduler *sP, XrdBuffManager *bP, const char *hn, int port, const char *in, const char *pn, const char *sn)
Definition: XrdStats.cc:83
virtual ~XrdStats()
Definition: XrdStats.hh:92
void Report()
Definition: XrdStats.cc:166
void Export(XrdOucEnv &env)
Definition: XrdStats.cc:131
virtual void Stats(XrdStats::CallBack *InfoBack, int xOpts, int jOpts=0)
Definition: XrdStats.cc:224