00001 /*****************************************************************************/ 00002 /* */ 00003 /* XrdMonSndDummyXrootd.hh */ 00004 /* */ 00005 /* (c) 2005 by the Board of Trustees of the Leland Stanford, Jr., University */ 00006 /* All Rights Reserved */ 00007 /* Produced by Jacek Becla for Stanford University under contract */ 00008 /* DE-AC02-76SF00515 with the Department of Energy */ 00009 /*****************************************************************************/ 00010 00011 // $Id: XrdMonSndDummyXrootd.hh 24468 2008-06-22 16:47:03Z ganis $ 00012 00013 #ifndef XRDMONSNDDUMMYXROOTD_HH 00014 #define XRDMONSNDDUMMYXROOTD_HH 00015 00016 #include <vector> 00017 #include <string> 00018 #include "XrdMon/XrdMonTypes.hh" 00019 #include "XrdMon/XrdMonSndTraceEntry.hh" 00020 #include "XrdMon/XrdMonSndDictEntry.hh" 00021 #include "XrdMon/XrdMonSndStageEntry.hh" 00022 using std::vector; 00023 using std::string; 00024 00025 class XrdMonSndDummyXrootd { 00026 public: 00027 static kXR_int16 NEWUSERFREQUENCY; 00028 static kXR_int16 NEWPROCFREQUENCY; 00029 static kXR_int16 NEWFILEFREQUENCY; 00030 static kXR_int16 MAXHOSTS; 00031 00032 XrdMonSndDummyXrootd(); 00033 ~XrdMonSndDummyXrootd(); 00034 00035 int initialize(const char* pathFile); 00036 XrdMonSndDictEntry newXrdMonSndDictEntry(); 00037 XrdMonSndStageEntry newXrdMonSndStageEntry(); 00038 XrdMonSndTraceEntry newXrdMonSndTraceEntry(); 00039 kXR_int32 closeOneFile(); 00040 void closeFiles(vector<kXR_int32>& closedFiles); 00041 00042 private: 00043 int readPaths(const char* pathFile); 00044 void createUser(); 00045 void createProcess(); 00046 void createFile(); 00047 string generateUserName(kXR_int16 uid); 00048 string generateHostName(); 00049 00050 struct User { 00051 struct HostAndPid { 00052 string name; 00053 kXR_int16 pid; 00054 vector<kXR_int16> myFiles; // offsets in _paths vector 00055 HostAndPid(string n, kXR_int16 id) 00056 : name(n), pid(id) {}; 00057 }; 00058 00059 kXR_int16 uid; 00060 vector<HostAndPid> myProcesses; 00061 User(kXR_int16 id) : uid(id) {} 00062 }; 00063 00064 vector<User> _users; 00065 00066 kXR_int32 _noCalls2NewUser; 00067 kXR_int32 _noCalls2NewProc; 00068 kXR_int32 _noCalls2NewFile; 00069 00070 kXR_int16 _activeUser; 00071 kXR_int16 _activeProcess; 00072 kXR_int16 _activeFile; 00073 bool _newFile; 00074 00075 struct PathData { 00076 string path; 00077 kXR_int16 fd; 00078 PathData(const char* s, kXR_int16 id) : path(s), fd(id) {} 00079 }; 00080 00081 // input data to pick from, loaded from ascii file 00082 // Yes, this might be a lot of memory 00083 vector<PathData> _paths; 00084 00085 kXR_int32 _firstAvailId; 00086 vector<kXR_unt32> _noTracesPerDict; 00087 00088 vector<bool> _openFiles; // true: open, false: close 00089 }; 00090 00091 #endif /* XRDMONSNDDUMMYXROOTD_HH */