XrdMonCtrArchiver.hh

Go to the documentation of this file.
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 */

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