Go to the documentation of this file.
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;
126 int 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[])
void close(std::istream *pf)
Close file.
Auxiliary class for time values.
Exception for ControlHost.
Empty structure for specification of parser element that is initialised (i.e.
static const std::string MESSAGE_TAG
Message logging tag.
Utility class to parse command line options.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
void open(const char *name, int open_mode=std::ios::out)
Auxiliary data structure for sequence of same character.
std::string getFullPath(const std::string &path)
Get full path, i.e.
static JStat getFileStatus
Function object for file status.
std::string getFilename(const std::string &file_name)
Get file name part, i.e.
JSubscriptionList & add(const JSubscription &subscription)
Add subscription.
T * open(const std::string &file_name)
Open file.
static void Throw(const bool option)
Enable/disable throw option.
double getElapsedTime(const JDateAndTime &object) const
Get elapsed time since given date and time.
Auxililary class to get date and time.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define DEBUG(A)
Message macros.
int Subscribe(const JSubscription &subscription)
Subscribe to single tag.
int GetFullString(std::string &buffer)
Receive string.
int getHour() const
hours after midnight [0-23]
int SendMeAlways()
Tell server to send messages forever.
int CheckHead(JPrefix &prefix, JTimeval timeout=JTimeval::min())
Check for header, without waiting.
Auxiliary class for all subscription.
void set() const
Set to actual time.