artdaq_mfextensions  v1_04_00
LogReader_receiver.cc
1 #include "mfextensions/Receivers/LogReader_receiver.hh"
2 #include <iostream>
3 #include "mfextensions/Receivers/ReceiverMacros.hh"
4 
5 mfviewer::LogReader::LogReader(fhicl::ParameterSet pset)
6  : MVReceiver(pset), log_(), pos_(0), filename_(pset.get<std::string>("filename")), counter_(0), metadata_1("\\%MSG-([wide])\\s([^:]*):\\s\\s([^\\s]*)\\s*(\\d\\d-[^-]*-\\d{4}\\s\\d+:\\d+:\\d+)\\s.[DS]T\\s\\s(\\w+)")
7 //, metadata_2
8 // ( "([^\\s]*)\\s([^\\s]*)\\s([^\\s]*)\\s(([^\\s]*)\\s)?([^:]*):(\\d*)" )
9 {
10  std::cout << "LogReader_receiver Constructor" << std::endl;
11 }
12 
14 
16 {
17  while (!stopRequested_)
18  {
19  log_.open(filename_.c_str(), std::fstream::in);
20  log_.seekg(pos_);
21 
22  if (log_.is_open() && log_.good())
23  {
24  bool msgFound = false;
25  while (!msgFound)
26  {
27  if (log_.eof())
28  {
29  break;
30  }
31 
32  std::string line;
33  pos_ = log_.tellg();
34  getline(log_, line);
35  if (line.find("%MSG") != std::string::npos)
36  {
37  msgFound = true;
38  log_.seekg(pos_);
39  }
40  }
41 
42  if (msgFound)
43  {
44  std::cout << "Message found, emitting!" << std::endl;
45  emit NewMessage(read_next());
46  ++counter_;
47  }
48  log_.clear();
49  pos_ = log_.tellg();
50  }
51 
52  log_.clear();
53  log_.close();
54  usleep(500000);
55  // sleep(1);
56  }
57 
58  std::cout << "LogReader_receiver shutting down!" << std::endl;
59 }
60 
61 #include <time.h>
62 #include <iostream>
63 
65 {
66  std::string line;
67 
68  // meta data 1
69  getline(log_, line);
70 
71  std::string category, application, eventID;
72  timeval tv = {0, 0};
73  sev_code_t sev = SERROR;
74 
75  if (boost::regex_search(line, what_, metadata_1))
76  {
77 #if 0
78  std::cout << ">> " << std::string(what_[1].first, what_[1].second) << "\n";
79  std::cout << ">> " << std::string(what_[2].first, what_[2].second) << "\n";
80  std::cout << ">> " << std::string(what_[3].first, what_[3].second) << "\n";
81  std::cout << ">> " << std::string(what_[4].first, what_[4].second) << "\n";
82  std::cout << ">> " << std::string(what_[5].first, what_[5].second) << "\n";
83 #endif
84 
85  std::string value = std::string(what_[1].first, what_[1].second);
86 
87  switch (value[0])
88  {
89  case 'e':
90  sev = SERROR;
91  break;
92  case 'w':
93  sev = SWARNING;
94  break;
95  case 'i':
96  sev = SINFO;
97  break;
98  case 'd':
99  sev = SDEBUG;
100  break;
101  default:
102  break;
103  }
104 
105  struct tm tm;
106  time_t t;
107 
108  value = std::string(what_[4].first, what_[4].second);
109  strptime(value.c_str(), "%d-%b-%Y %H:%M:%S", &tm);
110 
111  tm.tm_isdst = -1;
112  t = mktime(&tm);
113  tv.tv_sec = t;
114  tv.tv_usec = 0;
115 
116  category = std::string(what_[2].first, what_[2].second);
117  application = std::string(what_[3].first, what_[3].second);
118 
119  eventID = std::string(what_[5].first, what_[5].second);
120  // msg.setHostname ( std::string(what_[4].first, what_[4].second) );
121  // msg.setHostaddr ( std::string(what_[5].first, what_[5].second) );
122  }
123  std::string body;
124  getline(log_, line);
125 
126  qt_mf_msg msg("", category, application, 0, tv);
127  msg.setSeverityLevel(sev);
128  msg.setEventID(eventID);
129 
130  while (!log_.eof() && line.find("%MSG") == std::string::npos)
131  {
132  body += line;
133  getline(log_, line);
134  }
135 
136  msg.setMessage(filename_, counter_, body);
137  msg.updateText();
138 
139  return msg;
140 }
141 
142 #include "moc_LogReader_receiver.cpp"
143 
144 DEFINE_MFVIEWER_RECEIVER(mfviewer::LogReader)
void updateText()
Parse fields and create HTML string representing message
Definition: qt_mf_msg.cc:51
void setEventID(std::string eventID)
Set the Event ID of the message
Definition: qt_mf_msg.hh:140
LogReader(fhicl::ParameterSet pset)
LogReader Constructor
qt_mf_msg read_next()
Read the next message from the input stream
virtual ~LogReader()
LogReader Destructor
Qt wrapper around MessageFacility message
Definition: qt_mf_msg.hh:36
void run()
Receiver loop method. Reads messages from file and emits newMessage signal
void setSeverityLevel(sev_code_t sev)
Set the severity code of the message (Viewer levels)
Definition: qt_mf_msg.hh:108
void setMessage(std::string prefix, int iteration, std::string msg)
Set the message
Definition: qt_mf_msg.cc:44
MessageFacility Log Reader Read messagefacility log archive and reemit as messagefacility messages ...
A MVReceiver class listens for messages and raises a signal when one arrives
Definition: MVReceiver.hh:17