xrootd
XrdOfsEvs.hh
Go to the documentation of this file.
1 #ifndef __XRDOFSEVS_H__
2 #define __XRDOFSEVS_H__
3 /******************************************************************************/
4 /* */
5 /* X r d O f s E v s . h h */
6 /* */
7 /* (c) 2005 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* All Rights Reserved */
9 /* Produced by Andrew Hanushevsky for Stanford University under contract */
10 /* DE-AC02-76-SFO0515 with the Department of Energy */
11 /* Based on code developed by Derek Feichtinger, CERN. */
12 /******************************************************************************/
13 
14 // $Id$
15 
16 #include <strings.h>
17 #include "XrdSys/XrdSysPthread.hh"
18 
19 class XrdOfsEvsMsg;
20 class XrdOucEnv;
21 class XrdOucProg;
22 class XrdSysError;
23 
24 /******************************************************************************/
25 /* X r d O f s E v s I n f o */
26 /******************************************************************************/
27 
29 {
30 public:
31 
33 
34 inline long long FSize() {return theFSize;}
35 
36 inline mode_t FMode() {return theFMode;}
37 
38 inline void Set(evArg aNum, const char *aVal) {Arg[aNum] = aVal;}
39 
40 inline const char *Val(evArg aNum) {return Arg[aNum];}
41 
42  XrdOfsEvsInfo(const char *tid,
43  const char *lfn1, const char *cgi1="", XrdOucEnv *env1=0,
44  mode_t mode=0, long long fsize=0,
45  const char *lfn2="$LFN2", const char *cgi2="", XrdOucEnv *env2=0)
46  {Arg[evTID] = tid;
47  Arg[evLFN1] = lfn1;
48  Arg[evCGI1] = (cgi1 ? cgi1 : ""); Env1 = env1;
49  Arg[evLFN2] = (lfn2 ? lfn2 : "$LFN2");
50  Arg[evCGI2] = (cgi2 ? cgi2 : ""); Env2 = env2;
51  theFMode = mode; theFSize = fsize;
52  }
53 
55 
56 private:
57 
58 const char *Arg[evARGS];
61 long long theFSize;
62 mode_t theFMode;
63 };
64 
65 /******************************************************************************/
66 /* X r d O f s E v s F o r m a t */
67 /******************************************************************************/
68 
70 {
71 public:
72 
73 enum evFlags {Null = 0, freeFmt = 1, cvtMode = 2, cvtFSize = 4};
74 
75 const char *Format;
78 
79  int SNP(XrdOfsEvsInfo &Info, char *buff, int blen)
80  {return snprintf(buff,blen,Format, Info.Val(Args[0]),
81  Info.Val(Args[1]), Info.Val(Args[2]),
82  Info.Val(Args[3]), Info.Val(Args[4]),
83  Info.Val(Args[5]), Info.Val(Args[6]));
84  }
85 
86  void Def(evFlags theFlags, const char *Fmt, ...);
87 
88  void Set(evFlags theFlags, const char *Fmt, int *fullArgs)
89  {if (Format && Flags & freeFmt) free((char *)Format);
90  Format = Fmt; Flags = theFlags;
91  memcpy(Args, fullArgs, sizeof(Args));
92  }
93 
96 };
97 
98 /******************************************************************************/
99 /* X r d O f s E v s */
100 /******************************************************************************/
101 
103 {
104 public:
105 
106 enum Event {All = 0x7fffff00, None = 0x00000000,
107  Chmod = 0x00000100, Closer = 0x00000201,
108  Closew = 0x00000402, Close = 0x00000600,
109  Create = 0x00000803, Fwrite = 0x00001004,
110  Mkdir = 0x00002005, Mv = 0x00004006,
111  Openr = 0x00008007, Openw = 0x00010008,
112  Open = 0x00018000, Rm = 0x00020009,
113  Rmdir = 0x0004000a, Trunc = 0x0008000b,
114  nCount = 12,
115  Mask = 0X000000ff, enMask = 0x7fffff00
116  };
117 
118 static const int minMsgSize = 1360; // (16+320+1024)
119 static const int maxMsgSize = 2384; // (16+320+1024+1024);
120 
121 int Enabled(Event theEvents) {return theEvents & enEvents;}
122 
123 int maxSmsg() {return maxMin;}
124 int maxLmsg() {return maxMax;}
125 
126 void Notify(Event eNum, XrdOfsEvsInfo &Info);
127 
128 static int Parse(XrdSysError &Eroute, Event eNum, char *mText);
129 
130 const char *Prog() {return theTarget;}
131 
132 void sendEvents(void);
133 
134 int Start(XrdSysError *eobj);
135 
136  XrdOfsEvs(Event theEvents, const char *Target, int minq=90, int maxq=10);
137  ~XrdOfsEvs();
138 
139 private:
140 const char *eName(int eNum);
141 int Feed(const char *data, int dlen);
142 XrdOfsEvsMsg *getMsg(int bigmsg);
143 void retMsg(XrdOfsEvsMsg *tp);
144 
146 
147 pthread_t tid;
148 char *theTarget;
159 int endIT;
160 int msgFD;
161 int numMax;
162 int maxMax;
163 int numMin;
164 int maxMin;
165 };
166 #endif