XrdXrootdMonitor.hh

Go to the documentation of this file.
00001 #ifndef __XRDXROOTDMONITOR__
00002 #define __XRDXROOTDMONITOR__
00003 /******************************************************************************/
00004 /*                                                                            */
00005 /*                   X r d X r o o t d M o n i t o r . h h                    */
00006 /*                                                                            */
00007 /* (c) 2004 by the Board of Trustees of the Leland Stanford, Jr., University  */
00008 /*                            All Rights Reserved                             */
00009 /*   Produced by Andrew Hanushevsky for Stanford University under contract    */
00010 /*              DE-AC03-76-SFO0515 with the Department of Energy              */
00011 /******************************************************************************/
00012 
00013 //       $Id: XrdXrootdMonitor.hh 27487 2009-02-18 13:17:34Z ganis $
00014 
00015 #include <inttypes.h>
00016 #include <time.h>
00017 #include <netinet/in.h>
00018 #include <sys/types.h>
00019 
00020 #include "XrdNet/XrdNetPeer.hh"
00021 #include "XrdSys/XrdSysPthread.hh"
00022 #include "XrdXrootd/XrdXrootdMonData.hh"
00023 #include "XProtocol/XPtypes.hh"
00024   
00025 /******************************************************************************/
00026 /*                            X r d M o n i t o r                             */
00027 /******************************************************************************/
00028 
00029 #define XROOTD_MON_ALL      1
00030 #define XROOTD_MON_FILE     2
00031 #define XROOTD_MON_IO       4
00032 #define XROOTD_MON_INFO     8
00033 #define XROOTD_MON_STAGE   16
00034 #define XROOTD_MON_USER    32
00035 #define XROOTD_MON_PATH    (XROOTD_MON_IO   | XROOTD_MON_FILE)
00036 
00037 class XrdScheduler;
00038   
00039 class XrdXrootdMonitor
00040 {
00041 public:
00042 friend class XrdXrootdMonitorDummy; // Avoid stupid gcc warnings
00043 
00044 // All values for Add_xx() must be passed in network byte order
00045 //
00046 inline void              Add_rd(kXR_unt32 dictid,
00047                                 kXR_int32 rlen,
00048                                 kXR_int64 offset)
00049                                {Add_io(dictid, rlen, offset);}
00050 
00051 inline void              Add_wr(kXR_unt32 dictid,
00052                                 kXR_int32 wlen, 
00053                                 kXR_int64 offset)
00054                                {unsigned int temp = ~ntohl(wlen)+1;
00055                                 Add_io(dictid,
00056                                       (kXR_int32)htonl(temp), offset);
00057                                }
00058 
00059        void              appID(char *id);
00060 
00061 static XrdXrootdMonitor *Alloc(int force=0);
00062 
00063        void              Close(kXR_unt32 dictid, long long rTot, long long wTot);
00064 
00065        void              Disc(kXR_unt32 dictid, int csec);
00066 
00067 static void              Defaults(char *dest1, int m1, char *dest2, int m2);
00068 static void              Defaults(int msz, int wsz, int flush);
00069 
00070        void              Dup(XrdXrootdMonTrace *mrec);
00071 
00072 static int               Init(XrdScheduler *sp, XrdSysError *errp);
00073 
00074 static kXR_unt32         Map(const char code,const char *uname,const char *path);
00075 
00076        void              Open(kXR_unt32 dictid, off_t fsize);
00077 
00078 static time_t            Tick();
00079 
00080 static void              unAlloc(XrdXrootdMonitor *monp);
00081 
00082 static XrdXrootdMonitor *altMon;
00083 static char              monIO;
00084 static char              monINFO;
00085 static char              monFILE;
00086 static char              monSTAGE;
00087 static char              monUSER;
00088 
00089                          XrdXrootdMonitor();
00090 
00091 private:
00092                         ~XrdXrootdMonitor(); 
00093 
00094 inline void              Add_io(kXR_unt32 dictid, kXR_int32 buflen,
00095                                 kXR_int64 offset);
00096        unsigned char     do_Shift(long long xTot, unsigned int &xVal);
00097 static void              fillHeader(XrdXrootdMonHeader *hdr,
00098                                     const char id, int size);
00099        void              Flush();
00100        void              Mark();
00101 static int               Send(int mmode, void *buff, int size);
00102 static void              startClock();
00103 
00104 static XrdScheduler      *Sched;
00105 static XrdSysError       *eDest;
00106 static XrdSysMutex        windowMutex;
00107 static int                monFD;
00108 static char              *Dest1;
00109 static int                monMode1;
00110 static struct sockaddr    InetAddr1;
00111 static char              *Dest2;
00112 static int                monMode2;
00113 static struct sockaddr    InetAddr2;
00114        XrdXrootdMonBuff  *monBuff;
00115 static int                monBlen;
00116        int                nextEnt;
00117 static int                lastEnt;
00118 static int                autoFlush;
00119 static int                FlushTime;
00120 static kXR_int32          startTime;
00121        kXR_int32          lastWindow;
00122 static kXR_int32          currWindow;
00123 static kXR_int32          sizeWindow;
00124 static int                isEnabled;
00125 static int                numMonitor;
00126 };
00127 
00128 /******************************************************************************/
00129 /*                      I n l i n e   F u n c t i o n s                       */
00130 /******************************************************************************/
00131 /******************************************************************************/
00132 /*                                A d d _ i o                                 */
00133 /******************************************************************************/
00134   
00135 void XrdXrootdMonitor::Add_io(kXR_unt32 dictid,kXR_int32 blen,kXR_int64 offset)
00136      {if (lastWindow != currWindow) Mark();
00137          else if (nextEnt == lastEnt) Flush();
00138       monBuff->info[nextEnt].arg0.val      = offset;
00139       monBuff->info[nextEnt].arg1.buflen   = blen;
00140       monBuff->info[nextEnt++].arg2.dictid = dictid;
00141      }
00142 #endif

Generated on Tue Jul 5 14:47:04 2011 for ROOT_528-00b_version by  doxygen 1.5.1