XrdOfsEvs.hh

Go to the documentation of this file.
00001 #ifndef __XRDOFSEVS_H__
00002 #define __XRDOFSEVS_H__
00003 /******************************************************************************/
00004 /*                                                                            */
00005 /*                          X r d O f s E v s . h h                           */
00006 /*                                                                            */
00007 /* (c) 2005 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-AC02-76-SFO0515 with the Department of Energy              */
00011 /*             Based on code developed by Derek Feichtinger, CERN.            */
00012 /******************************************************************************/
00013   
00014 //         $Id: XrdOfsEvs.hh 24468 2008-06-22 16:47:03Z ganis $
00015 
00016 #include <strings.h>
00017 #include "XrdSys/XrdSysPthread.hh"
00018 
00019 class XrdOfsEvsMsg;
00020 class XrdOucEnv;
00021 class XrdOucProg;
00022 class XrdSysError;
00023 
00024 /******************************************************************************/
00025 /*                         X r d O f s E v s I n f o                          */
00026 /******************************************************************************/
00027   
00028 class XrdOfsEvsInfo
00029 {
00030 public:
00031 
00032 enum evArg {evTID=0, evLFN1, evCGI1, evLFN2, evCGI2, evFMODE, evFSIZE, evARGS};
00033 
00034 inline long long   FSize() {return theFSize;}
00035 
00036 inline mode_t      FMode() {return theFMode;}
00037 
00038 inline void        Set(evArg aNum, const char *aVal) {Arg[aNum] = aVal;}
00039 
00040 inline const char *Val(evArg aNum) {return Arg[aNum];}
00041 
00042  XrdOfsEvsInfo(const char *tid,
00043                const char *lfn1,         const char *cgi1="", XrdOucEnv *env1=0,
00044                mode_t      mode=0,       long long   fsize=0,
00045                const char *lfn2="$LFN2", const char *cgi2="", XrdOucEnv *env2=0)
00046               {Arg[evTID]  = tid;
00047                Arg[evLFN1] = lfn1;
00048                Arg[evCGI1] = (cgi1 ? cgi1  : ""); Env1 = env1;
00049                Arg[evLFN2] = (lfn2 ? lfn2 : "$LFN2");
00050                Arg[evCGI2] = (cgi2  ? cgi2  : ""); Env2 = env2;
00051                theFMode = mode; theFSize = fsize;
00052               }
00053 
00054 ~XrdOfsEvsInfo() {}
00055 
00056 private:
00057 
00058 const char *Arg[evARGS];
00059 XrdOucEnv  *Env1;
00060 XrdOucEnv  *Env2;
00061 long long   theFSize;
00062 mode_t      theFMode;
00063 };
00064 
00065 /******************************************************************************/
00066 /*                       X r d O f s E v s F o r m a t                        */
00067 /******************************************************************************/
00068 
00069 class XrdOfsEvsFormat
00070 {
00071 public:
00072 
00073 enum evFlags {Null = 0, freeFmt = 1, cvtMode = 2, cvtFSize = 4};
00074 
00075 const char                *Format;
00076       evFlags              Flags;
00077       XrdOfsEvsInfo::evArg Args[XrdOfsEvsInfo::evARGS];
00078 
00079       int     SNP(XrdOfsEvsInfo &Info, char *buff, int blen)
00080                      {return snprintf(buff,blen,Format, Info.Val(Args[0]),
00081                                      Info.Val(Args[1]), Info.Val(Args[2]),
00082                                      Info.Val(Args[3]), Info.Val(Args[4]),
00083                                      Info.Val(Args[5]), Info.Val(Args[6]));
00084                      }
00085 
00086       void    Def(evFlags theFlags, const char *Fmt, ...);
00087 
00088       void    Set(evFlags theFlags, const char *Fmt, int *fullArgs)
00089                  {if (Format && Flags & freeFmt) free((char *)Format);
00090                   Format = Fmt; Flags = theFlags;
00091                   memcpy(Args, fullArgs, sizeof(Args));
00092                  }
00093 
00094       XrdOfsEvsFormat() : Format(0), Flags(Null) {}
00095      ~XrdOfsEvsFormat() {}
00096 };
00097 
00098 /******************************************************************************/
00099 /*                             X r d O f s E v s                              */
00100 /******************************************************************************/
00101   
00102 class XrdOfsEvs
00103 {
00104 public:
00105 
00106 enum Event {All    = 0x7fffff00, None   = 0x00000000,
00107             Chmod  = 0x00000100, Closer = 0x00000201,
00108             Closew = 0x00000402, Close  = 0x00000600,
00109             Create = 0x00000803, Fwrite = 0x00001004,
00110             Mkdir  = 0x00002005, Mv     = 0x00004006,
00111             Openr  = 0x00008007, Openw  = 0x00010008,
00112             Open   = 0x00018000, Rm     = 0x00020009,
00113             Rmdir  = 0x0004000a, Trunc  = 0x0008000b,
00114             nCount = 12,
00115             Mask   = 0X000000ff, enMask = 0x7fffff00
00116            };
00117 
00118 static const int   minMsgSize = 1360; // (16+320+1024)
00119 static const int   maxMsgSize = 2384; // (16+320+1024+1024);
00120 
00121 int         Enabled(Event theEvents) {return theEvents & enEvents;}
00122 
00123 int         maxSmsg() {return maxMin;}
00124 int         maxLmsg() {return maxMax;}
00125 
00126 void        Notify(Event eNum, XrdOfsEvsInfo &Info);
00127 
00128 static int  Parse(XrdSysError &Eroute, Event eNum, char *mText);
00129 
00130 const char *Prog() {return theTarget;}
00131 
00132 void        sendEvents(void);
00133 
00134 int         Start(XrdSysError *eobj);
00135 
00136       XrdOfsEvs(Event theEvents, const char *Target, int minq=90, int maxq=10);
00137      ~XrdOfsEvs();
00138 
00139 private:
00140 const char     *eName(int eNum);
00141 int             Feed(const char *data, int dlen);
00142 XrdOfsEvsMsg   *getMsg(int bigmsg);
00143 void            retMsg(XrdOfsEvsMsg *tp);
00144 
00145 static XrdOfsEvsFormat MsgFmt[XrdOfsEvs::nCount];
00146 
00147 pthread_t       tid;
00148 char           *theTarget;
00149 Event           enEvents;
00150 XrdSysError    *eDest;
00151 XrdOucProg     *theProg;
00152 XrdSysMutex     qMut;
00153 XrdSysSemaphore qSem;
00154 XrdOfsEvsMsg   *msgFirst;
00155 XrdOfsEvsMsg   *msgLast;
00156 XrdSysMutex     fMut;
00157 XrdOfsEvsMsg   *msgFreeMax;
00158 XrdOfsEvsMsg   *msgFreeMin;
00159 int             endIT;
00160 int             msgFD;
00161 int             numMax;
00162 int             maxMax;
00163 int             numMin;
00164 int             maxMin;
00165 };
00166 #endif

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