1 #ifndef _ots_ConsoleSupervisor_h_
2 #define _ots_ConsoleSupervisor_h_
4 #include "otsdaq-core/CoreSupervisors/CoreSupervisorBase.h"
25 virtual void defaultPage(xgi::Input* in, xgi::Output* out)
override;
26 virtual void request(
const std::string& requestType,
28 HttpXmlDocument& xmlOut,
29 const WebUsers::RequestUserInfo& userInfo)
override;
31 virtual void forceSupervisorPropertyValues(
void)
override;
38 void insertMessageRefresh(HttpXmlDocument* xmldoc,
39 const clock_t lastUpdateClock,
40 const unsigned int lastUpdateIndex);
45 struct ConsoleMessageStruct
47 ConsoleMessageStruct()
49 buffer.resize(BUFFER_SZ);
51 countStamp = (time_t)-1;
56 fields[SEQID].set(
"SequenceID", 2, -1);
57 fields[LEVEL].set(
"Level", 5, -1);
58 fields[LABEL].set(
"Label", 6, -1);
59 fields[SOURCEID].set(
"SourceID", 7, -1);
60 fields[SOURCE].set(
"Source", 9, -1);
64 #if MESSAGEFACILITY_HEX_VERSION >= 0x20201
65 fields[MSG].set(
"Msg", 12, -1);
67 fields[MSG].set(
"Msg", 10, -1);
71 void set(
const std::string& msg,
const time_t count)
73 buffer = (std::string)(msg.substr(0, BUFFER_SZ));
83 if(fields[i].markerCount == 0)
84 fields[i++].posInString = 0;
87 while((p = buffer.find(
'|', p)) != std::string::npos)
91 if(i < (
int)fields.size() &&
92 m == fields[i].markerCount)
93 fields[i++].posInString =
100 if(i == LABEL && p + 1 + strlen(&buffer[p + 1]) != msg.length())
104 fields[i++].posInString = p + 2 + strlen(&buffer[p + 1]);
117 const char* getMsg() {
return (
char*)&buffer[fields[MSG].posInString]; }
118 const char* getLabel() {
return (
char*)&buffer[fields[LABEL].posInString]; }
119 const char* getLevel() {
return (
char*)&buffer[fields[LEVEL].posInString]; }
120 const char* getSourceID() {
return (
char*)&buffer[fields[SOURCEID].posInString]; }
121 const long long getSourceIDAsNumber()
125 sscanf((
char*)&buffer[fields[SOURCEID].posInString],
130 const char* getSource() {
return (
char*)&buffer[fields[SOURCE].posInString]; }
131 const char* getSequenceID() {
return (
char*)&buffer[fields[SEQID].posInString]; }
132 const unsigned int getSequenceIDAsNumber()
134 unsigned long long longSeqid;
135 sscanf((
char*)&buffer[fields[SEQID].posInString],
140 return (
unsigned int)longSeqid;
143 const char* getField(
int i) {
return (
char*)&buffer[fields[i].posInString]; }
144 const time_t getTime() {
return timeStamp; }
145 const time_t getCount() {
return countStamp; }
150 void set(
const std::string& fn,
const int mc,
const int ps)
157 std::string fieldName;
173 const int BUFFER_SZ = 5000;
174 std::array<FieldStruct, 6> fields;
182 std::array<ConsoleMessageStruct, 100> messages_;
183 std::mutex messageMutex_;
184 volatile unsigned int writePointer_;
185 time_t messageCount_;
188 unsigned int refreshReadPointer_;
189 char refreshTempStr_[50];
190 unsigned int refreshIndex_;
191 xercesc::DOMElement* refreshParent_;
192 time_t refreshCurrentLastCount_;