CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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

Definition at line 14 of file DQMService.h.

Definition at line 15 of file DQMService.h.

Constructor & Destructor Documentation

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

Definition at line 25 of file DQMService.cc.

References DQMNet::debug(), flush(), edm::ParameterSet::getUntrackedParameter(), query::host, net_, query::port, 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);
38  net_->updateToCollector(host, port);
39  net_->start();
40  }
41 }
T getUntrackedParameter(std::string const &, T const &) const
DQMBasicNet * net_
Definition: DQMService.h:27
double publishFrequency_
Definition: DQMService.h:29
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:937
static constexpr int verbose
DQMStore * store_
Definition: DQMService.h:26
void start()
Definition: DQMNet.cc:1072
void flush(edm::StreamContext const &sc)
Definition: DQMService.cc:123
string host
Definition: query.py:115
void updateToCollector(const std::string &host, int port)
Definition: DQMNet.cc:1010
DQMService::~DQMService ( )

Definition at line 43 of file DQMService.cc.

References shutdown().

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

Member Function Documentation

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
void DQMService::flushStandalone ( )

Definition at line 48 of file DQMService.cc.

References cms::cuda::assert(), edmScanValgrind::buffer, DQMNet::CoreObject::dirname, DQMNet::dqmhash(), alignCSCRings::e, DQMNet::CoreObject::flags, das_client::fullpath(), dqm::implementation::IGetter::getAllContents(), DQMNet::Object::hash, MonitorElementData::INT, lastFlush_, DQMNet::Object::lastreq, DQMNet::lock(), hlt_dqm_clientPB-live_cfg::me, net_, class-composition::o, DQMNet::CoreObject::objname, DQMNet::packQualityData(), publishFrequency_, DQMNet::Object::qdata, DQMNet::Object::rawdata, MonitorElementData::REAL, DQMBasicNet::removeLocalExcept(), DQMNet::Object::scalar, upgradeWorkflowComponents::seen, DQMNet::sendLocalChanges(), store_, MonitorElementData::STRING, AlCaHLTBitMon_QueryRunRegistry::string, DQMNet::unlock(), DQMBasicNet::updateLocalObject(), DQMNet::CoreObject::version, and relval_steps::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.
110  if (net_->removeLocalExcept(seen))
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
uint64_t version
Definition: DQMNet.h:91
void lock()
Acquire a lock on the DQM net layer.
Definition: DQMNet.cc:1058
double publishFrequency_
Definition: DQMService.h:29
uint32_t flags
Definition: DQMNet.h:89
double lastFlush_
Definition: DQMService.h:28
assert(be >=bs)
def fullpath
Definition: das_client.py:267
std::string qdata
Definition: DQMNet.h:106
virtual std::vector< dqm::harvesting::MonitorElement * > getAllContents(std::string const &path) const
Definition: DQMStore.cc:609
uint64_t lastreq
Definition: DQMNet.h:103
DQMStore * store_
Definition: DQMService.h:26
void sendLocalChanges()
Definition: DQMNet.cc:1195
static size_t dqmhash(const void *key, size_t keylen)
Definition: DQMNet.h:194
std::string dirname
Definition: DQMNet.h:96
std::string objname
Definition: DQMNet.h:97
std::string scalar
Definition: DQMNet.h:105
unsigned long long uint64_t
Definition: Time.h:13
bool removeLocalExcept(const std::set< std::string > &known)
Definition: DQMNet.cc:1233
uint64_t hash
Definition: DQMNet.h:102
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:1064
void updateLocalObject(Object &o)
Definition: DQMNet.cc:1212
std::vector< unsigned char > DataBlob
Definition: DQMNet.h:83
DataBlob rawdata
Definition: DQMNet.h:104
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:1038

Member Data Documentation

double DQMService::lastFlush_
private

Definition at line 28 of file DQMService.h.

Referenced by flushStandalone().

DQMBasicNet* DQMService::net_
private

Definition at line 27 of file DQMService.h.

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

double DQMService::publishFrequency_
private

Definition at line 29 of file DQMService.h.

Referenced by DQMService(), and flushStandalone().

DQMStore* DQMService::store_
private

Definition at line 26 of file DQMService.h.

Referenced by flushStandalone().