00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef XRDMONCTRARCHIVER_HH
00014 #define XRDMONCTRARCHIVER_HH
00015
00016 #include "XrdMon/XrdMonTypes.hh"
00017 #include "pthread.h"
00018 #include <vector>
00019 using std::vector;
00020
00021 class XrdMonCtrPacket;
00022 class XrdMonCtrWriter;
00023 class XrdMonDecPacketDecoder;
00024
00025
00026
00027
00028
00029 extern "C" void* decHDFlushHeartBeat(void* arg);
00030 extern "C" void* decRTFlushHeartBeat(void* arg);
00031
00032 class XrdMonCtrArchiver {
00033 public:
00034 XrdMonCtrArchiver(const char* cBaseDir,
00035 const char* dBaseDir,
00036 const char* rtLogDir,
00037 kXR_int64 maxFileSize,
00038 int ctrBufSize,
00039 int rtBufSize,
00040 bool onlineDec,
00041 bool rtDec);
00042 ~XrdMonCtrArchiver();
00043 void operator()();
00044
00045 static int _decHDFlushDelay;
00046
00047 static int _decRTFlushDelay;
00048
00049
00050 private:
00051 void check4InactiveSenders();
00052 void archivePacket(XrdMonCtrPacket* p);
00053 friend void* decHDFlushHeartBeat(void* arg);
00054 friend void* decRTFlushHeartBeat(void* arg);
00055
00056 private:
00057 enum { TIMESTAMP_FREQ = 10000,
00058 MAX_INACTIVITY = 60*60*24
00059 };
00060
00061 vector<XrdMonCtrWriter*> _writers;
00062
00063 XrdMonDecPacketDecoder* _decoder;
00064 pthread_t _decHDFlushThread;
00065 pthread_t _decRTFlushThread;
00066
00067 long _currentTime;
00068 int _heartbeat;
00069 };
00070
00071 #endif