DQMServices
StreamerIO
plugins
DQMMonitoringService.cc
Go to the documentation of this file.
1
#include "
DQMMonitoringService.h
"
2
3
#include <boost/algorithm/string.hpp>
4
#include <boost/format.hpp>
5
#include <boost/algorithm/string/predicate.hpp>
6
7
#include <ctime>
8
#include <iostream>
9
10
/*
11
* This service is very similar to the FastMonitoringService in the HLT,
12
* except that it is used for monitoring online DQM applications
13
*/
14
15
namespace
dqmservices
{
16
17
DQMMonitoringService::DQMMonitoringService
(
const
edm::ParameterSet
&
pset
,
edm::ActivityRegistry
& ar) {
18
const
char
* x = std::getenv(
"DQM2_SOCKET"
);
19
if
(x) {
20
std::cerr
<<
"Monitoring pipe: "
<< x << std::endl;
21
mstream_
.connect(boost::asio::local::stream_protocol::endpoint(x));
22
}
else
{
23
std::cerr
<<
"Monitoring file not found, disabling."
<< std::endl;
24
}
25
26
// init counters
27
nevents_
= 0;
28
29
last_lumi_
= 0;
30
last_lumi_nevents_
= 0;
31
last_lumi_time_
=
std::chrono::high_resolution_clock::now
();
32
33
run_
= 0;
34
lumi_
= 0;
35
36
ar.
watchPreGlobalBeginLumi
(
this
, &
DQMMonitoringService::evLumi
);
37
ar.
watchPreSourceEvent
(
this
, &
DQMMonitoringService::evEvent
);
38
}
39
40
DQMMonitoringService::~DQMMonitoringService
() {}
41
42
void
DQMMonitoringService::outputLumiUpdate
() {
43
using
std::chrono::duration_cast;
44
using
std::chrono::milliseconds;
45
46
auto
now
=
std::chrono::high_resolution_clock::now
();
47
48
ptree
doc
;
49
50
// these might be different than the numbers we want to report
51
// rate/stats per lumi are calculated from last_*_ fields
52
doc
.put(
"cmssw_run"
,
run_
);
53
doc
.put(
"cmssw_lumi"
,
lumi_
);
54
doc
.put(
"events_total"
,
nevents_
);
55
56
// do statistics for the last (elapsed) ls
57
auto
lumi_millis = duration_cast<milliseconds>(
now
-
last_lumi_time_
).count();
58
auto
lumi_events =
nevents_
-
last_lumi_nevents_
;
59
auto
lumi_last =
last_lumi_
;
60
61
if
((lumi_last > 0) && (lumi_millis > 0)) {
62
doc
.put(
"lumi_number"
, lumi_last);
63
doc
.put(
"lumi_events"
, lumi_events);
64
doc
.put(
"lumi_duration_ms"
, lumi_millis);
65
66
float
rate
= ((
float
)lumi_events * 1000) / lumi_millis;
67
doc
.put(
"events_rate"
,
rate
);
68
69
// also save the history entry
70
ptree plumi;
71
plumi.put(
"n"
, lumi_last);
72
plumi.put(
"nevents"
, lumi_events);
73
plumi.put(
"nmillis"
, lumi_millis);
74
plumi.put(
"rate"
,
rate
);
75
76
std::time_t hkey =
std::time
(
nullptr
);
77
doc
.add_child(
str
(
boost::format
(
"extra.lumi_stats.%d"
) % hkey), plumi);
78
}
79
80
outputUpdate
(
doc
);
81
}
82
83
void
DQMMonitoringService::evLumi
(
GlobalContext
const
& iContext) {
84
using
std::chrono::duration_cast;
85
using
std::chrono::milliseconds;
86
87
// these might be different than the numbers we want to report
88
// rate/stats per lumi are calculated from last_*_ fields
89
run_
= iContext.
luminosityBlockID
().
run
();
90
lumi_
= iContext.
luminosityBlockID
().
luminosityBlock
();
91
92
outputLumiUpdate
();
93
94
last_lumi_time_
=
std::chrono::high_resolution_clock::now
();
95
last_lumi_nevents_
=
nevents_
;
96
last_lumi_
=
lumi_
;
97
}
98
99
void
DQMMonitoringService::evEvent
(
StreamID
const
& iContext) {
100
nevents_
+= 1;
101
tryUpdate
();
102
}
103
104
void
DQMMonitoringService::outputUpdate
(ptree&
doc
) {
105
using
std::chrono::duration_cast;
106
using
std::chrono::milliseconds;
107
108
if
(!
mstream_
)
109
return
;
110
111
try
{
112
last_update_time_
=
std::chrono::high_resolution_clock::now
();
113
doc
.put(
"update_timestamp"
,
std::time
(
nullptr
));
114
115
write_json(
mstream_
,
doc
,
false
);
116
mstream_
.flush();
117
}
catch
(...) {
118
// pass
119
}
120
}
121
122
void
DQMMonitoringService::keepAlive
() {
123
if
(!
mstream_
)
124
return
;
125
126
mstream_
<<
"\n"
;
127
mstream_
.flush();
128
129
tryUpdate
();
130
}
131
132
void
DQMMonitoringService::tryUpdate
() {
133
using
std::chrono::duration_cast;
134
using
std::chrono::milliseconds;
135
136
if
(!
mstream_
)
137
return
;
138
139
// sometimes we don't see any transition for a very long time
140
// but we still want updates
141
// luckily, keepAlive is called rather often by the input source
142
auto
now
=
std::chrono::high_resolution_clock::now
();
143
auto
millis = duration_cast<milliseconds>(
now
-
last_update_time_
).count();
144
if
(millis >= (25 * 1000)) {
145
outputLumiUpdate
();
146
}
147
}
148
149
}
// namespace dqmservices
150
151
#include "
FWCore/ServiceRegistry/interface/ServiceMaker.h
"
152
153
using
dqmservices::DQMMonitoringService
;
154
DEFINE_FWK_SERVICE
(
DQMMonitoringService
);
edm::GlobalContext::luminosityBlockID
LuminosityBlockID const & luminosityBlockID() const
Definition:
GlobalContext.h:55
edm::StreamID
Definition:
StreamID.h:30
dqmservices::DQMMonitoringService::outputUpdate
void outputUpdate(ptree &doc)
Definition:
DQMMonitoringService.cc:104
common_cff.doc
doc
Definition:
common_cff.py:54
dqmMemoryStats.float
float
Definition:
dqmMemoryStats.py:127
dqmservices
Definition:
DQMFileIterator.cc:18
dqmservices::DQMMonitoringService::keepAlive
void keepAlive()
Definition:
DQMMonitoringService.cc:122
dqmservices::DQMMonitoringService::last_lumi_
unsigned long last_lumi_
Definition:
DQMMonitoringService.h:68
DEFINE_FWK_SERVICE
#define DEFINE_FWK_SERVICE(type)
Definition:
ServiceMaker.h:105
dqmservices::DQMMonitoringService::lumi_
unsigned long lumi_
Definition:
DQMMonitoringService.h:75
RPCpg::rate
double rate(double x)
Definition:
Constants.cc:3
dqmservices::DQMMonitoringService::last_lumi_nevents_
long last_lumi_nevents_
Definition:
DQMMonitoringService.h:72
dqmservices::DQMMonitoringService::run_
unsigned long run_
Definition:
DQMMonitoringService.h:74
fileCollector.now
now
Definition:
fileCollector.py:207
dqmservices::DQMMonitoringService::outputLumiUpdate
void outputLumiUpdate()
Definition:
DQMMonitoringService.cc:42
dqm-mbProfile.format
format
Definition:
dqm-mbProfile.py:16
edm::ActivityRegistry
Definition:
ActivityRegistry.h:132
str
#define str(s)
Definition:
TestProcessor.cc:48
ServiceMaker.h
dqmservices::DQMMonitoringService::evEvent
void evEvent(StreamID const &)
Definition:
DQMMonitoringService.cc:99
edm::GlobalContext
Definition:
GlobalContext.h:29
dqmservices::DQMMonitoringService::~DQMMonitoringService
~DQMMonitoringService()
Definition:
DQMMonitoringService.cc:40
edm::ParameterSet
Definition:
ParameterSet.h:36
visualization-live-secondInstance_cfg.DQMMonitoringService
DQMMonitoringService
Definition:
visualization-live-secondInstance_cfg.py:112
beam_dqm_sourceclient-live_cfg.cerr
cerr
Definition:
beam_dqm_sourceclient-live_cfg.py:17
edm::LuminosityBlockID::luminosityBlock
LuminosityBlockNumber_t luminosityBlock() const
Definition:
LuminosityBlockID.h:42
dqmservices::DQMMonitoringService::mstream_
boost::asio::local::stream_protocol::iostream mstream_
Definition:
DQMMonitoringService.h:61
dqmservices::DQMMonitoringService::DQMMonitoringService
DQMMonitoringService(const edm::ParameterSet &, edm::ActivityRegistry &)
Definition:
DQMMonitoringService.cc:17
edm::ActivityRegistry::watchPreGlobalBeginLumi
void watchPreGlobalBeginLumi(PreGlobalBeginLumi::slot_type const &iSlot)
Definition:
ActivityRegistry.h:333
dqmservices::DQMMonitoringService::last_lumi_time_
std::chrono::high_resolution_clock::time_point last_lumi_time_
Definition:
DQMMonitoringService.h:70
edm::ActivityRegistry::watchPreSourceEvent
void watchPreSourceEvent(PreSourceEvent::slot_type const &iSlot)
Definition:
ActivityRegistry.h:182
edm::LuminosityBlockID::run
RunNumber_t run() const
Definition:
LuminosityBlockID.h:41
dqmservices::DQMMonitoringService::nevents_
long nevents_
Definition:
DQMMonitoringService.h:64
dqmservices::DQMMonitoringService::evLumi
void evLumi(GlobalContext const &)
Definition:
DQMMonitoringService.cc:83
ntuplemaker.time
time
Definition:
ntuplemaker.py:310
dqmservices::DQMMonitoringService::last_update_time_
std::chrono::high_resolution_clock::time_point last_update_time_
Definition:
DQMMonitoringService.h:71
muonDTDigis_cfi.pset
pset
Definition:
muonDTDigis_cfi.py:27
dqmservices::DQMMonitoringService
Definition:
DQMMonitoringService.h:44
DQMMonitoringService.h
dqmservices::DQMMonitoringService::tryUpdate
void tryUpdate()
Definition:
DQMMonitoringService.cc:132
Generated for CMSSW Reference Manual by
1.8.16