XrdMonCtrMainApp.cc

Go to the documentation of this file.
00001 /*****************************************************************************/
00002 /*                                                                           */
00003 /*                           XrdMonCtrMainApp.cc                             */
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: XrdMonCtrMainApp.cc 24468 2008-06-22 16:47:03Z ganis $
00012 
00013 #include "XrdMon/XrdMonArgParser.hh"
00014 #include "XrdMon/XrdMonArgParserConvert.hh"
00015 #include "XrdMon/XrdMonCommon.hh"
00016 #include "XrdMon/XrdMonTypes.hh"
00017 #include "XrdMon/XrdMonUtils.hh"
00018 #include "XrdMon/XrdMonCtrArchiver.hh"
00019 #include "XrdMon/XrdMonCtrDebug.hh"
00020 #include "XrdMon/XrdMonCtrCollector.hh"
00021 #include "XProtocol/XPtypes.hh"
00022 #include "XrdSys/XrdSysHeaders.hh"
00023 
00024 #include <iomanip>
00025 using std::cerr;
00026 using std::cout;
00027 using std::endl;
00028 using std::setfill;
00029 using std::setw;
00030 using namespace XrdMonArgParserConvert;
00031 
00032 const bool      defaultOnlineDecOn   = true;    // online decoding on
00033 const bool      defaultRTOn          = true;    // real time decoding on
00034 const char*     defaultCtrLogDir     = "./logs/collector";
00035 const char*     defaultDecLogDir     = "./logs/decoder";
00036 const char*     defaultRTLogDir      = "./logs/rt";
00037 const int       defaultDecHDFlushDelay = 600;           // [sec]
00038 const int       defaultDecRTFlushDelay = 5;             // [sec]
00039 const kXR_int64 defaultMaxCtrLogSize = 1024*1024*1024;  // 1GB
00040 const kXR_int32 defaultCtrBufSize    = 64*1024;         // 64 KB
00041 const int       defaultRTBufSize     = 128*1024;        // 128 KB
00042 
00043 void
00044 printHelp()
00045 {
00046     cout << "\nxrdmonCollector\n"
00047          << "    [-onlineDec <on|off>]\n"
00048          << "    [-rt <on|off>]\n"
00049          << "    [-ctrLogDir <path>]\n"
00050          << "    [-decLogDir <path>]\n"
00051          << "    [-rtLogDir <path>]\n"
00052          << "    [-decHDFlushDelay <value>]\n"
00053          << "    [-maxCtrLogSize <value>]\n"
00054          << "    [-ctrBufSize <value>]\n"
00055          << "    [-rtBufSize <value>]\n"
00056          << "    [-port <portNr>]\n"
00057          << "    [-ver]\n"
00058          << "    [-help]\n"
00059          << "\n"
00060          << "-onlineDec <on|off>      Turns on/off online decoding.\n"
00061          << "                         Default value is \"" << (defaultOnlineDecOn?"on":"off") << "\".\n"
00062          << "-rt <on|off>             Turns on/off real time monitoring. Online decoding has to be\n"
00063          << "                         Default value is \"" << (defaultRTOn?"on":"off") << "\".\n"
00064          << "-ctrLogDir <path>        Directory where collector's log file are stored.\n"
00065          << "                         Default value is \"" << defaultCtrLogDir << "\".\n"
00066          << "-decLogDir <path>        Directory where decoder's log file are stored.\n"
00067          << "                         Default value is \"" << defaultDecLogDir << "\".\n"
00068          << "-rtLogDir <path>         Directory where real time log file are stored.\n"
00069          << "                         Default value is \"" << defaultRTLogDir << "\".\n"
00070          << "-decHDFlushDelay <delay> Value in sec specifying how often history data is\n"
00071          << "                         flushed to collector's log files. History data means\n"
00072          << "                         the data corresponding to *closed* sessions and files.\n" 
00073          << "                         Default value is \"" << defaultDecHDFlushDelay << "\".\n"
00074          << "-decRTFlushDelay <delay> Value in sec specifying how often real time data is\n"
00075          << "                         flushed to log file.\n"
00076          << "                         Default value is \"" << defaultDecRTFlushDelay << "\".\n"
00077          << "-maxCtrLogSize <size>    Max size of collector's log file.\n"
00078          << "                         Default value is \"" << defaultMaxCtrLogSize << "\".\n"
00079          << "-ctrBufSize <size>       Size of transient buffer of collected packets. It has to be\n"
00080          << "                         larger than or equal to max page size (64K).\n"
00081          << "                         Default value is \"" << defaultCtrBufSize << "\".\n"
00082          << "-rtBufSize <size>        Size of transient buffer of collected real time data.\n"
00083          << "                         Default value is \"" << defaultRTBufSize << "\".\n"
00084          << "-port <portNr>           Port number to be used.\n"
00085          << "                         Default valus is \"" << DEFAULT_PORT << "\".\n"
00086          << "-ver                     Reports version and exits. Don't specify any other\n"
00087          << "                         option with this one.\n"
00088          << endl;
00089 }
00090 
00091 int main(int argc, char* argv[])
00092 {
00093     XrdMonCtrDebug::initialize();
00094 
00095     if ( argc == 2 && !strcmp(argv[1], "-ver") ) {
00096         cout << "v\t" << setw(3) << setfill('0') << XRDMON_VERSION << endl;
00097         return 0;
00098     }
00099          
00100     XrdMonArgParser::ArgImpl<bool, ConvertOnOff>
00101          arg_onlineDecOn("-onlineDec", defaultOnlineDecOn);
00102     XrdMonArgParser::ArgImpl<bool, ConvertOnOff>
00103          arg_rtOn       ("-rt", defaultRTOn);
00104     XrdMonArgParser::ArgImpl<const char*, Convert2String> 
00105          arg_ctrLogDir  ("-ctrLogDir", defaultCtrLogDir);
00106     XrdMonArgParser::ArgImpl<const char*, Convert2String> 
00107          arg_decLogDir  ("-decLogDir", defaultDecLogDir);
00108     XrdMonArgParser::ArgImpl<const char*, Convert2String>
00109          arg_rtLogDir   ("-rtLogDir", defaultRTLogDir);
00110     XrdMonArgParser::ArgImpl<int, Convert2Int>
00111          arg_decRTFlushDel("-decRTFlushDelay", defaultDecRTFlushDelay);
00112     XrdMonArgParser::ArgImpl<int, Convert2Int>
00113          arg_decHDFlushDel("-decHDFlushDelay", defaultDecHDFlushDelay);
00114     XrdMonArgParser::ArgImpl<kXR_int64, Convert2LL> 
00115         arg_maxFSize   ("-maxCtrLogSize", defaultMaxCtrLogSize);
00116     XrdMonArgParser::ArgImpl<int, Convert2Int> 
00117         arg_ctrBufSize("-ctrBufSize", defaultCtrBufSize);
00118     XrdMonArgParser::ArgImpl<int, Convert2Int> 
00119         arg_port("-port", DEFAULT_PORT);
00120     XrdMonArgParser::ArgImpl<int, Convert2Int> 
00121         arg_rtBufSize   ("-maxCtrLogSize", defaultRTBufSize);
00122 
00123     try {
00124         XrdMonArgParser argParser;
00125         argParser.registerExpectedArg(&arg_onlineDecOn);
00126         argParser.registerExpectedArg(&arg_rtOn);
00127         argParser.registerExpectedArg(&arg_ctrLogDir);
00128         argParser.registerExpectedArg(&arg_decLogDir);
00129         argParser.registerExpectedArg(&arg_rtLogDir);
00130         argParser.registerExpectedArg(&arg_decRTFlushDel);
00131         argParser.registerExpectedArg(&arg_decHDFlushDel);
00132         argParser.registerExpectedArg(&arg_maxFSize);
00133         argParser.registerExpectedArg(&arg_ctrBufSize);
00134         argParser.registerExpectedArg(&arg_port);
00135         argParser.registerExpectedArg(&arg_rtBufSize);
00136         argParser.parseArguments(argc, argv);
00137     } catch (XrdMonException& e) {
00138         e.printIt();
00139         printHelp();
00140         return 1;
00141     }
00142     if ( arg_onlineDecOn.myVal() == false && arg_rtOn.myVal() ) {
00143         cerr << "\nError: you can not turn on rt monitoring if"
00144              << " online decoding is off." << endl;
00145         printHelp();
00146         return 1;
00147     }
00148     if ( arg_ctrBufSize.myVal() < 64*1024 ) {
00149         cerr << "\nError: collector's buffer size too small" << endl;
00150         printHelp();
00151         return 2;
00152     }
00153     if ( arg_port.myVal() < 1 ) {
00154         cerr << "\nError: invalid port number" << endl;
00155         printHelp();
00156         return 3;
00157     }
00158     
00159     cout << "online decoding  is " << (arg_onlineDecOn.myVal()?"on":"off") <<'\n'
00160          << "rt monitoring    is " << (arg_rtOn.myVal()?"on":"off") << '\n'
00161          << "ctrLogDir        is " << arg_ctrLogDir.myVal() << '\n'
00162          << "decLogDir        is " << arg_decLogDir.myVal() << '\n'
00163          << "rtLogDir         is " << arg_rtLogDir.myVal()  << '\n'
00164          << "decRTFlushDelay  is " << arg_decRTFlushDel.myVal() << '\n'
00165          << "decHDFlushDelay  is " << arg_decHDFlushDel.myVal() << '\n'
00166          << "maxCtrLogSize    is " << arg_maxFSize.myVal() << '\n'
00167          << "ctrBufSize       is " << arg_ctrBufSize.myVal() << '\n'
00168          << "rtBufSize        is " << arg_rtBufSize.myVal() << '\n'
00169          << "port             is " << arg_port.myVal()
00170          << endl;
00171 
00172     try {
00173         mkdirIfNecessary(arg_ctrLogDir.myVal());
00174         XrdMonCtrArchiver::_decHDFlushDelay= arg_decHDFlushDel.myVal();
00175         if ( arg_onlineDecOn.myVal() ) {
00176             mkdirIfNecessary(arg_decLogDir.myVal());
00177             if ( arg_rtOn.myVal() ) {
00178                 mkdirIfNecessary(arg_rtLogDir.myVal());
00179                 XrdMonCtrArchiver::_decRTFlushDelay= arg_decRTFlushDel.myVal();
00180             }
00181         }
00182     } catch (XrdMonException& e) {
00183         e.printIt();
00184         return 2;
00185     }
00186     XrdMonCtrCollector::port = arg_port.myVal();
00187     
00188     // start thread for receiving data
00189     pthread_t recThread;
00190     if ( 0 != pthread_create(&recThread, 
00191                              0, 
00192                              receivePackets,
00193                              0) ) {
00194         cerr << "Failed to create a collector thread" << endl;
00195         return 1;
00196     }
00197 
00198     try {
00199         // store received packets until admin packet with sigterm arrives
00200         XrdMonCtrArchiver archiver(arg_ctrLogDir.myVal(), 
00201                                    arg_decLogDir.myVal(),
00202                                    arg_rtLogDir.myVal(),
00203                                    arg_maxFSize.myVal(),
00204                                    arg_ctrBufSize.myVal(),
00205                                    arg_rtBufSize.myVal(),
00206                                    arg_onlineDecOn.myVal(), 
00207                                    arg_rtOn.myVal());
00208         archiver();
00209     } catch (XrdMonException& e) {
00210         e.printIt();
00211         return 2;
00212     }
00213     
00214     return 0;
00215 }
00216 
00217 

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