BESDebug.cc

Go to the documentation of this file.
00001 // BESDebug.cc
00002 
00003 // This file is part of bes, A C++ back-end server implementation framework
00004 // for the OPeNDAP Data Access Protocol.
00005 
00006 // Copyright (c) 2004-2009 University Corporation for Atmospheric Research
00007 // Author: Patrick West <pwest@ucar.edu> and Jose Garcia <jgarcia@ucar.edu>
00008 //
00009 // This library is free software; you can redistribute it and/or
00010 // modify it under the terms of the GNU Lesser General Public
00011 // License as published by the Free Software Foundation; either
00012 // version 2.1 of the License, or (at your option) any later version.
00013 // 
00014 // This library is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 // Lesser General Public License for more details.
00018 // 
00019 // You should have received a copy of the GNU Lesser General Public
00020 // License along with this library; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 //
00023 // You can contact University Corporation for Atmospheric Research at
00024 // 3080 Center Green Drive, Boulder, CO 80301
00025  
00026 // (c) COPYRIGHT University Corporation for Atmospheric Research 2004-2005
00027 // Please read the full copyright statement in the file COPYRIGHT_UCAR.
00028 //
00029 // Authors:
00030 //      pwest       Patrick West <pwest@ucar.edu>
00031 //      jgarcia     Jose Garcia <jgarcia@ucar.edu>
00032 
00033 #include <fstream>
00034 #include <iostream>
00035 
00036 using std::ofstream ;
00037 using std::ios ;
00038 using std::cout ;
00039 using std::endl ;
00040 
00041 #include "BESDebug.h"
00042 #include "BESInternalError.h"
00043 
00044 ostream *BESDebug::_debug_strm = NULL ;
00045 bool BESDebug::_debug_strm_created = false ;
00046 string BESDebug::_pid_str = "" ;
00047 map<string,bool> BESDebug::_debug_map ;
00048 
00061 void
00062 BESDebug::SetUp( const string &values )
00063 {
00064     if( values.empty() )
00065     {
00066         string err = "Empty debug options" ;
00067         throw BESInternalError( err, __FILE__, __LINE__ ) ;
00068     }
00069     string::size_type comma = 0 ;
00070     comma = values.find( ',' ) ;
00071     if( comma == string::npos )
00072     {
00073         string err = "Missing comma in debug options: " + values ;
00074         throw BESInternalError( err, __FILE__, __LINE__ ) ;
00075     }
00076     ostream *strm = 0 ;
00077     bool created = false ;
00078     string s_strm = values.substr( 0, comma ) ;
00079     if( s_strm == "cerr" )
00080     {
00081         strm = &cerr ;
00082     }
00083     else
00084     {
00085         strm = new ofstream( s_strm.c_str(), ios::out ) ;
00086         if( strm && !(*strm) )
00087         {
00088                 delete strm ;
00089                 strm = 0 ;
00090             string err = "Unable to open the debug file: " + s_strm ;
00091             throw BESInternalError( err, __FILE__, __LINE__ ) ;
00092         }
00093         created = true ;
00094     }
00095 
00096     BESDebug::SetStrm( strm, created ) ;
00097 
00098     string::size_type new_comma = 0 ;
00099     while( ( new_comma = values.find( ',', comma+1 ) ) != string::npos )
00100     {
00101         string flagName = values.substr( comma+1, new_comma-comma-1 ) ;
00102         if( flagName[0] == '-' )
00103         {
00104             string newflag = flagName.substr( 1, flagName.length() - 1 ) ;
00105             BESDebug::Set( newflag, false ) ;
00106         }
00107         else
00108         {
00109             BESDebug::Set( flagName, true ) ;
00110         }
00111         comma = new_comma ;
00112     }
00113     string flagName = values.substr( comma+1, values.length()-comma-1 ) ;
00114     if( flagName[0] == '-' )
00115     {
00116         string newflag = flagName.substr( 1, flagName.length() - 1 ) ;
00117         BESDebug::Set( newflag, false ) ;
00118     }
00119     else
00120     {
00121         BESDebug::Set( flagName, true ) ;
00122     }
00123 }
00124 
00132 void
00133 BESDebug::Help( ostream &strm )
00134 {
00135     strm << "Debug help:" << endl
00136          << "  Set on the command line with "
00137          << "-d \"file_name|cerr,[-]context1,...,[-]contextn\"" << endl
00138          << "  context with dash (-) in front will be turned off" << endl
00139          << "  context of all will turn on debugging for all context" << endl
00140          << endl
00141          << "Possible context:" << endl ;
00142 
00143     if( _debug_map.size() )
00144     {
00145         BESDebug::_debug_citer i = _debug_map.begin() ;
00146         BESDebug::_debug_citer e = _debug_map.end() ;
00147         for( ; i != e; i++ )
00148         {
00149             strm << "  " << (*i).first << ": " ;
00150             if( (*i).second )
00151                 strm << "on" << endl ;
00152             else
00153                 strm << "off" << endl ;
00154         }
00155     }
00156     else
00157     {
00158         strm << "  none specified" << endl ;
00159     }
00160 }
00161 

Generated on Wed May 12 09:53:07 2010 for OPeNDAP Hyrax Back End Server (BES) by  doxygen 1.4.7