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[])
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)
Enable/disable throw 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.