EventLog.C
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef COMPONENT_EVENTLOG_C_DEFINED
00039 #define COMPONENT_EVENTLOG_C_DEFINED
00040
00041 #include "Component/EventLog.H"
00042 #include "Component/OptionManager.H"
00043 #include "Component/ComponentOpts.H"
00044 #include "Util/sformat.H"
00045 #include <fstream>
00046
00047
00048 EventLog::EventLog(OptionManager& mgr, const std::string& descrName,
00049 const std::string& tagName) :
00050 ModelComponent(mgr, descrName, tagName),
00051 itsFileName(&OPT_EventLogFileName, this),
00052 itsEvents(), itsTimer(1000000)
00053 {
00054 pthread_mutex_init(&itsMutex, NULL);
00055 }
00056
00057
00058 EventLog::~EventLog()
00059 {
00060 pthread_mutex_destroy(&itsMutex);
00061 }
00062
00063
00064 void EventLog::start1()
00065 {
00066 pthread_mutex_lock(&itsMutex);
00067
00068
00069 itsEvents.clear();
00070
00071
00072 itsTimer.reset();
00073
00074 pthread_mutex_unlock(&itsMutex);
00075 }
00076
00077
00078 void EventLog::stop2()
00079 {
00080 pthread_mutex_lock(&itsMutex);
00081
00082
00083 if (itsEvents.empty() == false && itsFileName.getVal().length() > 1)
00084 {
00085 const char *fname = itsFileName.getVal().c_str();
00086 std::ofstream ofs(fname);
00087 if (!ofs.is_open())
00088 LERROR("Couldn't open file '%s' for writing.", fname);
00089 else
00090 {
00091 std::list<LogEvent>::const_iterator itr = itsEvents.begin();
00092 while (itr != itsEvents.end())
00093 {
00094 const uint64 t = itr->tim;
00095 const int usec = int(t % 1000ULL);
00096 const int msec = int((t / 1000ULL) % 1000ULL);
00097 const int sec = int((t / 1000000ULL) % 60ULL);
00098 const int minu = int((t / 60000000ULL) % 60ULL);
00099 const int hour = int(t / 3600000000ULL);
00100
00101 ofs << sformat("%03d:%02d:%02d.%03d.%03d",
00102 hour, minu, sec, msec, usec)
00103 << " " << itr->descrip << std::endl;
00104 ++ itr;
00105 }
00106 ofs.close();
00107 LINFO("Saved log to '%s'", fname);
00108 }
00109 }
00110
00111 pthread_mutex_unlock(&itsMutex);
00112 }
00113
00114
00115 void EventLog::pushEvent(const std::string& msg)
00116 {
00117 LogEvent evt; evt.tim = itsTimer.get(); evt.descrip = msg;
00118
00119 pthread_mutex_lock(&itsMutex);
00120 itsEvents.push_back(evt);
00121 pthread_mutex_unlock(&itsMutex);
00122 }
00123
00124
00125 void EventLog::pushEventBegin(const std::string& msg)
00126 { pushEvent(std::string("Begin: ") + msg); }
00127
00128
00129 void EventLog::pushEventEnd(const std::string& msg)
00130 { pushEvent(std::string("End : ") + msg); }
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 #endif // COMPONENT_EVENTLOG_C_DEFINED