27  const std::string  save   =   
"save";    
 
   28  const std::string  stop   =   
"stop";    
 
   31  const int    MINIMUM_NUMBER_OF_MESSAGES  =  100;
 
   32  const double MINIMUM_ELAPSED_TIME_S      =  60*60;
 
   42    static const int MAXIMUM_FILE_NUMBER  = 100;
 
   49    JLoggerFile(
const std::string& path) :
 
   74      for (
int i = 0; !this->is_open() && i != MAXIMUM_FILE_NUMBER; ++i) {
 
   80           << 
"_"  << this->getYear() << 
'-' << 
FILL(2,
'0') << this->getMonth() << 
'-' << 
FILL(2,
'0') << this->getDay();
 
  111    std::string file_name;
 
  126int main(
int argc, 
const char *argv[])
 
  142    JParser<> zap(
"Auxiliary program to save logger messages from ControlHost server.");
 
  144    zap[
'H'] = 
make_field(hostname)        = 
"localhost";
 
  153  catch(
const exception &error) {
 
  154    FATAL(error.what() << endl);
 
  157  if (happy_hour.empty()) {
 
  159    WARNING(
"No happy hours (option -W); set to midnight." << endl);
 
  161    happy_hour.insert(0);
 
  183    JLoggerFile out(path);
 
  187    DEBUG(
"Open file  " << out.getFilename() << endl);
 
  194    for (
int number_of_messages; buffer.size() != stop.size() || 
string(buffer.data(), stop.size()) != stop; ) {
 
  196      const int check = in.
CheckHead(prefix, timeout);
 
  198      DEBUG(
"Check head " << check << endl);
 
  202        FATAL(
"Error at JControlHost::CheckHead " << check << endl);
 
  204      } 
else if (check == 1) {
 
  208        DEBUG(
"Message <" << buffer << 
">" << endl);
 
  210        if        (buffer == stop) {
 
  214        } 
else if (buffer == save) {
 
  216          DEBUG(
"Close file " << out.getFilename() << endl);
 
  221          DEBUG(
"Open file  " << out.getFilename() << endl);
 
  225          ++number_of_messages;
 
  227          if ( ! (out << buffer << endl)) {
 
  228            FATAL(
"Error writing to file " << out.getFilename() << endl);
 
  233      if (check == 0 || number_of_messages > MINIMUM_NUMBER_OF_MESSAGES) {
 
  235        number_of_messages = 0;
 
  243          DEBUG(
"Close file " << out.getFilename() << endl);
 
  248          DEBUG(
"Open file " << out.getFilename() << endl);
 
  256    ERROR(error << endl);
 
 
int main(int argc, const char *argv[])
 
General purpose message reporting.
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Exception for ControlHost.
 
static void Throw(const bool option)
 
Auxiliary class for time values.
 
int GetFullString(std::string &buffer)
Receive string.
 
int CheckHead(JPrefix &prefix, JTimeval timeout=JTimeval::min())
Check for header, without waiting.
 
int SendMeAlways()
Tell server to send messages forever.
 
int Subscribe(const JSubscription &subscription)
Subscribe to single tag.
 
JSubscriptionList & add(const JSubscription &subscription)
Add subscription.
 
Utility class to parse command line options.
 
void open(const char *name, int open_mode=std::ios::out)
 
std::string getFullPath(const std::string &path)
Get full path, i.e. add JEEP::PATHNAME_SEPARATOR if necessary.
 
void close(std::istream *pf)
Close file.
 
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any.
 
T * open(const std::string &file_name)
Open file.
 
static const std::string MESSAGE_TAG
Message logging tag.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
static JStat getFileStatus
Function object for file status.
 
Auxiliary data structure for sequence of same character.
 
Auxiliary class for all subscription.
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary class for date and time.
 
double getElapsedTime(const JDateAndTime &object) const
Get elapsed time to given date and time.
 
int getHour() const
hours after midnight [0-23]
 
void set(const bool utc=false)
Set to current local time.