CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
DQMService Class Reference

#include <DQMService.h>

Public Types

typedef dqm::legacy::DQMStore DQMStore
 
typedef dqm::legacy::MonitorElement MonitorElement
 

Public Member Functions

 DQMService (const edm::ParameterSet &pset, edm::ActivityRegistry &ar)
 
void flush (edm::StreamContext const &sc)
 
void flushStandalone ()
 
 ~DQMService ()
 

Private Member Functions

void shutdown ()
 

Private Attributes

double lastFlush_
 
DQMBasicNetnet_
 
double publishFrequency_
 
DQMStorestore_
 

Detailed Description

A bridge to udpate the DQM network layer at the end of every event.

Definition at line 12 of file DQMService.h.

Member Typedef Documentation

◆ DQMStore

Definition at line 14 of file DQMService.h.

◆ MonitorElement

Definition at line 15 of file DQMService.h.

Constructor & Destructor Documentation

◆ DQMService()

DQMService::DQMService ( const edm::ParameterSet pset,
edm::ActivityRegistry ar 
)

Definition at line 25 of file DQMService.cc.

References DQMNet::debug(), flush(), query::host, net_, query::port, muonDTDigis_cfi::pset, publishFrequency_, DQMNet::start(), AlCaHLTBitMon_QueryRunRegistry::string, DQMNet::updateToCollector(), verbose, edm::ActivityRegistry::watchPostEvent(), and edm::ActivityRegistry::watchPostStreamEndLumi().

29 
30  std::string host = pset.getUntrackedParameter<std::string>("collectorHost", "");
31  int port = pset.getUntrackedParameter<int>("collectorPort", 9090);
32  bool verbose = pset.getUntrackedParameter<bool>("verbose", false);
33  publishFrequency_ = pset.getUntrackedParameter<double>("publishFrequency", publishFrequency_);
34 
35  if (!host.empty() && port > 0) {
36  net_ = new DQMBasicNet;
37  net_->debug(verbose);
39  net_->start();
40  }
41 }
DQMBasicNet * net_
Definition: DQMService.h:27
string host
Definition: query.py:115
double publishFrequency_
Definition: DQMService.h:29
bool verbose
void watchPostEvent(PostEvent::slot_type const &iSlot)
double lastFlush_
Definition: DQMService.h:28
void watchPostStreamEndLumi(PostStreamEndLumi::slot_type const &iSlot)
int port
Definition: query.py:116
void debug(bool doit)
Definition: DQMNet.cc:945
DQMStore * store_
Definition: DQMService.h:26
void start()
Definition: DQMNet.cc:1080
void flush(edm::StreamContext const &sc)
Definition: DQMService.cc:123
void updateToCollector(const std::string &host, int port)
Definition: DQMNet.cc:1018

◆ ~DQMService()

DQMService::~DQMService ( )

Definition at line 43 of file DQMService.cc.

References shutdown().

43 { shutdown(); }
void shutdown()
Definition: DQMService.cc:129

Member Function Documentation

◆ flush()

void DQMService::flush ( edm::StreamContext const &  sc)

Definition at line 123 of file DQMService.cc.

References flushStandalone().

Referenced by DQMService().

123  {
124  // Call a function independent to the framework
125  flushStandalone();
126 }
void flushStandalone()
Definition: DQMService.cc:48

◆ flushStandalone()

void DQMService::flushStandalone ( )

Definition at line 48 of file DQMService.cc.

References cms::cuda::assert(), edmScanValgrind::buffer, DQMNet::dqmhash(), MillePedeFileConverter_cfg::e, reco_skim_cfg_mod::fullpath, dqm::implementation::IGetter::getAllContents(), MonitorElementData::INT, lastFlush_, DQMNet::lock(), hlt_dqm_clientPB-live_cfg::me, net_, EcalTangentSkim_cfg::o, DQMNet::packQualityData(), publishFrequency_, MonitorElementData::REAL, DQMBasicNet::removeLocalExcept(), postprocess-scan-build::seen, DQMNet::sendLocalChanges(), store_, MonitorElementData::STRING, AlCaHLTBitMon_QueryRunRegistry::string, DQMNet::unlock(), DQMBasicNet::updateLocalObject(), and BeamSplash_cfg::version.

Referenced by flush().

48  {
49  // Avoid sending updates excessively often.
50  uint64_t version = lat::Time::current().ns();
51  double vtime = version * 1e-9;
52  if (vtime - lastFlush_ < publishFrequency_)
53  return;
54 
55  // OK, send an update.
56  if (net_) {
58  std::set<std::string> seen;
60 
61  // Lock the network layer so we can modify the data.
62  net_->lock();
63  bool updated = false;
64 
65  auto mes = store_->getAllContents("");
66  for (MonitorElement *me : mes) {
67  auto fullpath = me->getFullname();
68  seen.insert(fullpath);
69  if (!me->wasUpdated())
70  continue;
71 
72  o.lastreq = 0;
73  o.hash = DQMNet::dqmhash(fullpath.c_str(), fullpath.size());
74  o.flags = me->data_.flags;
75  o.version = version;
76  o.dirname = me->data_.dirname.substr(0, me->data_.dirname.size() - 1);
77  o.objname = me->data_.objname;
78  assert(o.rawdata.empty());
79  assert(o.scalar.empty());
80  assert(o.qdata.empty());
81 
82  // Pack object and reference, scalar and quality data.
83 
84  switch (me->kind()) {
88  me->packScalarData(o.scalar, "");
89  break;
90  default: {
91  TBufferFile buffer(TBufferFile::kWrite);
92  buffer.WriteObject(me->getTH1());
93  // placeholder for (no longer supported) reference
94  buffer.WriteObjectAny(nullptr, nullptr);
95  o.rawdata.resize(buffer.Length());
96  memcpy(&o.rawdata[0], buffer.Buffer(), buffer.Length());
97  DQMNet::packQualityData(o.qdata, me->data_.qreports);
98  break;
99  }
100  }
101 
103  DQMNet::DataBlob().swap(o.rawdata);
104  std::string().swap(o.scalar);
105  std::string().swap(o.qdata);
106  updated = true;
107  }
108 
109  // Find removed contents and clear the network cache.
111  updated = true;
112 
113  // Unlock the network layer.
114  net_->unlock();
115 
116  // Tell network to flush if we updated something.
117  if (updated)
119  }
120 
121  lastFlush_ = lat::Time::current().ns() * 1e-9;
122 }
DQMBasicNet * net_
Definition: DQMService.h:27
void lock()
Acquire a lock on the DQM net layer.
Definition: DQMNet.cc:1066
double publishFrequency_
Definition: DQMService.h:29
double lastFlush_
Definition: DQMService.h:28
assert(be >=bs)
DQMStore * store_
Definition: DQMService.h:26
virtual std::vector< dqm::harvesting::MonitorElement * > getAllContents(std::string const &path) const
Definition: DQMStore.cc:609
void sendLocalChanges()
Definition: DQMNet.cc:1203
static size_t dqmhash(const void *key, size_t keylen)
Definition: DQMNet.h:196
unsigned long long uint64_t
Definition: Time.h:13
bool removeLocalExcept(const std::set< std::string > &known)
Definition: DQMNet.cc:1241
static void packQualityData(std::string &into, const QReports &qr)
Definition: DQMNet.cc:158
void unlock()
Release the lock on the DQM net layer.
Definition: DQMNet.cc:1072
void updateLocalObject(Object &o)
Definition: DQMNet.cc:1220
std::vector< unsigned char > DataBlob
Definition: DQMNet.h:85

◆ shutdown()

void DQMService::shutdown ( )
private

Definition at line 129 of file DQMService.cc.

References net_, and DQMNet::shutdown().

Referenced by ~DQMService().

129  {
130  // If we have a network, let it go.
131  if (net_)
132  net_->shutdown();
133 }
DQMBasicNet * net_
Definition: DQMService.h:27
void shutdown()
Stop the network layer and wait it to finish.
Definition: DQMNet.cc:1046

Member Data Documentation

◆ lastFlush_

double DQMService::lastFlush_
private

Definition at line 28 of file DQMService.h.

Referenced by flushStandalone().

◆ net_

DQMBasicNet* DQMService::net_
private

Definition at line 27 of file DQMService.h.

Referenced by DQMService(), flushStandalone(), and shutdown().

◆ publishFrequency_

double DQMService::publishFrequency_
private

Definition at line 29 of file DQMService.h.

Referenced by DQMService(), and flushStandalone().

◆ store_

DQMStore* DQMService::store_
private

Definition at line 26 of file DQMService.h.

Referenced by flushStandalone().