00001 /*****************************************************************************/ 00002 /* */ 00003 /* XrdMonCtrArchiver.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: XrdMonCtrArchiver.hh 22437 2008-03-04 14:35:16Z rdm $ 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 // Class responsible for archiving packets in log files. 00026 // Manages heartbeat for writers (writers inactive for 24 hours 00027 // are closed). It does not interpret data inside packet. 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; // number of sec between flushes of decoded 00046 // history data to disk 00047 static int _decRTFlushDelay; // number of sec between flushes of decoded 00048 // "current" data to disk 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, // re-take time every X packets 00058 MAX_INACTIVITY = 60*60*24 // kill writer if no activity for 24 hours 00059 }; 00060 00061 vector<XrdMonCtrWriter*> _writers; 00062 00063 XrdMonDecPacketDecoder* _decoder; 00064 pthread_t _decHDFlushThread; // history data 00065 pthread_t _decRTFlushThread; // real time data 00066 00067 long _currentTime; 00068 int _heartbeat; // number of packets since the last time check 00069 }; 00070 00071 #endif /* XRDMONCTRARCHIVER_HH */