CMS 3D CMS Logo

FastMonitor.cc
Go to the documentation of this file.
1 /*
2  * FastMonitor.cc
3  *
4  * Created on: Nov 27, 2012
5  * Author: aspataru
6  */
7 
12 
13 #include <fstream>
14 #include <iostream>
15 #include <sstream>
16 #include <cassert>
17 #include <sys/types.h>
18 #include <unistd.h>
19 
20 using namespace jsoncollector;
21 
23  std::string const& defPath, std::string const defGroup, bool strictChecking, bool useSource, bool useDefinition)
24  : defPath_(defPath),
25  strictChecking_(strictChecking),
26  useSource_(useSource),
27  useDefinition_(useDefinition),
28  nStreams_(1),
29  deleteDef_(true) {
30  //get host and PID info
31  if (useSource)
33 
34  //load definition file
35  auto temp = new DataPointDefinition();
37  dpd_ = temp;
38 }
39 
40 FastMonitor::FastMonitor(DataPointDefinition const* dpd, bool strictChecking, bool useSource, bool useDefinition)
41  : strictChecking_(strictChecking), useSource_(useSource), useDefinition_(useDefinition), nStreams_(1), dpd_(dpd) {
42  //get host and PID info
43  if (useSource)
45 }
46 
48  for (auto dp : dataPoints_)
49  delete dp;
50  if (deleteDef_)
51  delete dpd_;
52  if (deleteDefFast_)
53  delete dpdFast_;
54 }
55 
56 void FastMonitor::addFastPathDefinition(std::string const& defPathFast, std::string const defGroupFast, bool strict) {
57  haveFastPath_ = true;
58  defPathFast_ = defPathFast;
59  auto temp = new DataPointDefinition();
61  dpdFast_ = temp;
62  fastPathStrictChecking_ = strict;
63  deleteDefFast_ = true;
64 }
65 
66 //per-process variables
68  bool NAifZeroUpdates,
69  unsigned int* nBins) {
71  dp->trackMonitorable(newMonitorable, NAifZeroUpdates);
72  dp->setNBins(nBins);
73  dataPoints_.push_back(dp);
74  dpNameMap_[newMonitorable->getName()] = dataPoints_.size() - 1;
75 
76  //checks if the same name is registered twice
77  assert(uids_.insert(newMonitorable->getName()).second);
78 }
79 
80 //fast path: no merge operation is performed
83  dp->trackMonitorable(newMonitorable, false);
84  dataPointsFastOnly_.push_back(dp);
85 }
86 
87 //per-stream variables
89  std::vector<unsigned int>* inputs,
90  bool NAifZeroUpdates,
91  unsigned int* nBins) {
93  dp->trackVectorUInt(name, inputs, NAifZeroUpdates);
94  dp->setNBins(nBins);
95  dataPoints_.push_back(dp);
96  dpNameMap_[name] = dataPoints_.size() - 1;
97  assert(uids_.insert(name).second);
98 }
99 
100 //atomic variables with guaranteed updates at the time of reading
102  std::vector<AtomicMonUInt*>* inputs,
103  bool NAifZeroUpdates,
104  unsigned int* nBins) {
105  std::string definitionToPass;
106  if (useDefinition_)
107  definitionToPass = defPath_;
108  DataPoint* dp = new DataPoint(definitionToPass, sourceInfo_);
109  dp->trackVectorUIntAtomic(name, inputs, NAifZeroUpdates);
110  dp->setNBins(nBins);
111  dataPoints_.push_back(dp);
112  dpNameMap_[name] = dataPoints_.size() - 1;
113  assert(uids_.insert(name).second);
114 }
115 
116 void FastMonitor::commit(std::vector<unsigned int>* streamLumisPtr) {
117  std::vector<std::string> const& jsonNames = dpd_->getNames();
118  regDpCount_ = dataPoints_.size();
119  if (strictChecking_)
120  assert(jsonNames.size() == regDpCount_);
121 
122  std::map<unsigned int, bool> hasJson;
123  for (unsigned int i = 0; i < jsonNames.size(); i++) {
124  bool notFoundVar = true;
125  for (unsigned int j = 0; j < regDpCount_; j++) {
126  if (dataPoints_[j]->getName() == jsonNames[i]) {
127  dataPoints_[j]->setOperation(dpd_->getOperationFor(i));
128  jsonDpIndex_.push_back(j);
129  hasJson[j] = true;
130  notFoundVar = false;
131  break;
132  }
133  }
134  if (notFoundVar) {
136  //push dummy DP if not registered by the service so that we output required JSON/CSV
137  DataPoint* dummyDp = new DataPoint(sourceInfo_, defPath_);
138  dummyDp->trackDummy(jsonNames[i], true);
139  dataPoints_.push_back(dummyDp);
140  jsonDpIndex_.push_back(dataPoints_.size() - 1);
141  }
142  }
143  for (unsigned int i = 0; i < regDpCount_; i++) {
144  dataPoints_[i]->setStreamLumiPtr(streamLumisPtr);
145  }
146 
147  //fast path:
148  if (haveFastPath_) {
149  std::vector<std::string> const& fjsonNames = dpdFast_->getNames();
151  assert(!(fastPathStrictChecking_ && fjsonNames.size() == fregDpCount_));
152  std::map<unsigned int, bool> fhasJson;
153  for (unsigned int i = 0; i < fjsonNames.size(); i++) {
154  bool notFoundVar = true;
155  for (unsigned int j = 0; j < fregDpCount_; j++) {
156  if (dataPointsFastOnly_[j]->getName() == fjsonNames[i]) {
158  fhasJson[j] = true;
159  notFoundVar = false;
160  break;
161  }
162  }
163  if (notFoundVar) {
164  //try to find variable among slow variables
165 
166  bool notFoundVarSlow = true;
167  for (unsigned int j = 0; j < regDpCount_; j++) {
168  if (dataPoints_[j]->getName() == fjsonNames[i]) {
169  jsonDpIndexFast_.push_back(dataPoints_[j]);
170  //fhasJson[j]=true;
171  notFoundVarSlow = false;
172  break;
173  }
174  }
175 
176  assert(!(fastPathStrictChecking_ && !notFoundVarSlow));
177  //push dummy DP if not registered by the service so that we output required JSON/CSV
178  if (notFoundVarSlow) {
179  DataPoint* dummyDp = new DataPoint(sourceInfo_, defPathFast_);
180  dummyDp->trackDummy(fjsonNames[i], true);
181  dataPointsFastOnly_.push_back(dummyDp);
182  jsonDpIndexFast_.push_back(dummyDp);
183  }
184  }
185  }
186  }
187 }
188 
189 //update everything
190 void FastMonitor::snap(unsigned int ls) {
191  recentSnaps_++;
193  for (unsigned int i = 0; i < regDpCount_; i++) {
194  dataPoints_[i]->snap(ls);
195  }
196 }
197 
198 //update for global variables as most of them are correct only at global EOL
199 void FastMonitor::snapGlobal(unsigned int ls) {
200  recentSnaps_++;
201  for (unsigned int i = 0; i < regDpCount_; i++) {
202  dataPoints_[i]->snapGlobal(ls);
203  }
204 }
205 
206 //update atomic per-stream vars(e.g. event counters) not updating time-based measurements (mini/microstate)
207 void FastMonitor::snapStreamAtomic(unsigned int ls, unsigned int streamID) {
208  recentSnaps_++;
209  for (unsigned int i = 0; i < regDpCount_; i++) {
210  dataPoints_[i]->snapStreamAtomic(ls, streamID);
211  }
212 }
213 
215  //output what was specified in JSON in the same order (including dummies)
216  unsigned int monSize = jsonDpIndexFast_.size();
217  std::stringstream ss;
218  if (monSize) {
219  for (unsigned int j = 0; j < monSize; j++) {
220  ss << jsonDpIndexFast_[j]->fastOutCSV(sid);
221  if (j < monSize - 1)
222  ss << ",";
223  }
224  }
225  return ss.str();
226 }
227 
228 void FastMonitor::outputCSV(std::string const& path, std::string const& csvString) {
229  std::ofstream outputFile;
231  outputFile << defPathFast_ << std::endl;
232  outputFile << csvString << std::endl;
233  outputFile.close();
234 }
235 
236 //get one variable (caller must delete it later)
238  auto it = dpNameMap_.find(name);
239  assert(it != dpNameMap_.end());
240  return dataPoints_[it->second]->mergeAndRetrieveValue(forLumi);
241 }
242 
243 bool FastMonitor::outputFullJSONs(std::string const& pathstem, std::string const& ext, unsigned int lumi, bool output) {
244  LogDebug("FastMonitor") << "SNAP updates -: " << recentSnaps_ << " (by timer: " << recentSnapsTimer_
245  << ") in lumisection ";
246 
248  for (unsigned int i = 0; i < nStreams_; i++) {
249  //merge even if no output
250  Json::Value serializeRoot;
251  for (unsigned int j = 0; j < jsonDpIndex_.size(); j++) {
252  dataPoints_[jsonDpIndex_[j]]->mergeAndSerialize(serializeRoot, lumi, true, i);
253  }
254  if (!output)
255  continue;
256  //get extension
257  std::stringstream tidext;
258  tidext << "_tid" << i;
259  std::string path = pathstem + tidext.str() + ext;
260 
262  std::string&& result = writer.write(serializeRoot);
264  }
265  return output;
266 }
267 
268 bool FastMonitor::outputFullJSON(std::string const& path, unsigned int lumi, bool output) {
269  LogDebug("FastMonitor") << "SNAP updates -: " << recentSnaps_ << " (by timer: " << recentSnapsTimer_
270  << ") in lumisection ";
271 
273  Json::Value serializeRoot;
274  for (unsigned int j = 0; j < jsonDpIndex_.size(); j++) {
275  dataPoints_[jsonDpIndex_[j]]->mergeAndSerialize(serializeRoot, lumi, j == 0, -1);
276  }
277  if (!output)
278  return false;
279 
281  std::string&& result = writer.write(serializeRoot);
283  return true;
284 }
285 
286 void FastMonitor::discardCollected(unsigned int forLumi) {
287  for (auto dp : dataPoints_)
288  dp->discardCollected(forLumi);
289 }
290 
292  std::stringstream hpid;
293  int pid = (int)getpid();
294  char hostname[128];
295  gethostname(hostname, sizeof hostname);
296  hpid << hostname << "_" << pid;
297  sHPid = hpid.str();
298 }
eostools.ls
def ls(path, rec=False)
Definition: eostools.py:349
ext
Definition: memstream.h:15
mps_fire.i
i
Definition: mps_fire.py:428
jsoncollector::FastMonitor::uids_
std::unordered_set< std::string > uids_
Definition: FastMonitor.h:124
MessageLogger.h
jsoncollector::FastMonitor::recentSnapsTimer_
unsigned int recentSnapsTimer_
Definition: FastMonitor.h:120
jsoncollector::FastMonitor::dataPoints_
std::vector< DataPoint * > dataPoints_
Definition: FastMonitor.h:112
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:72
jsoncollector::FastMonitor::commit
void commit(std::vector< unsigned int > *streamLumisPtr)
Definition: FastMonitor.cc:116
jsoncollector::FastMonitor::outputFullJSON
bool outputFullJSON(std::string const &path, unsigned int lumi, bool output=true)
Definition: FastMonitor.cc:268
jsoncollector::FastMonitor::deleteDefFast_
bool deleteDefFast_
Definition: FastMonitor.h:110
jsoncollector::FastMonitor::getMergedIntJForLumi
JsonMonitorable * getMergedIntJForLumi(std::string const &name, unsigned int forLumi)
Definition: FastMonitor.cc:237
cms::cuda::assert
assert(be >=bs)
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
cscNeutronWriter_cfi.writer
writer
Definition: cscNeutronWriter_cfi.py:6
jsoncollector::FastMonitor::recentSnaps_
unsigned int recentSnaps_
Definition: FastMonitor.h:119
jsoncollector::FastMonitor::sourceInfo_
std::string sourceInfo_
Definition: FastMonitor.h:106
jsoncollector::FastMonitor::getHostAndPID
void getHostAndPID(std::string &sHPid)
Definition: FastMonitor.cc:291
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
jsoncollector::FastMonitor::jsonDpIndexFast_
std::vector< DataPoint * > jsonDpIndexFast_
Definition: FastMonitor.h:115
FileIO.h
jsoncollector::FastMonitor::registerGlobalMonitorable
void registerGlobalMonitorable(JsonMonitorable *newMonitorable, bool NAifZeroUpdates, unsigned int *nBins=nullptr)
Definition: FastMonitor.cc:67
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
jsoncollector::FastMonitor::fregDpCount_
unsigned int fregDpCount_
Definition: FastMonitor.h:122
jsoncollector::FastMonitor::registerStreamMonitorableUIntVec
void registerStreamMonitorableUIntVec(std::string const &name, std::vector< unsigned int > *inputs, bool NAifZeroUpdates, unsigned int *nBins=nullptr)
Definition: FastMonitor.cc:88
download_sqlite_cfg.outputFile
outputFile
Definition: download_sqlite_cfg.py:5
jsoncollector::DataPointDefinition::getDataPointDefinitionFor
static bool getDataPointDefinitionFor(std::string &defFilePath, DataPointDefinition *dpd, const std::string *defaultGroup=nullptr)
Definition: DataPointDefinition.cc:32
jsoncollector::FastMonitor::nStreams_
unsigned int nStreams_
Definition: FastMonitor.h:104
jsoncollector::FastMonitor::addFastPathDefinition
void addFastPathDefinition(std::string const &defPathFast, std::string const defGroupFast, bool strict)
Definition: FastMonitor.cc:56
Calorimetry_cff.dp
dp
Definition: Calorimetry_cff.py:158
jsoncollector::FastMonitor::defPath_
std::string defPath_
Definition: FastMonitor.h:96
jsoncollector::FastMonitor::outputCSV
void outputCSV(std::string const &path, std::string const &csvString)
Definition: FastMonitor.cc:228
getName
TString getName(TString structure, int layer, TString geometry)
Definition: DMRtrends.cc:235
jsoncollector::FastMonitor::deleteDef_
bool deleteDef_
Definition: FastMonitor.h:109
seedmultiplicitymonitor_newtracking_cfi.nBins
nBins
Definition: seedmultiplicitymonitor_newtracking_cfi.py:8
Json::StyledWriter
Writes a Value in JSON format in a human friendly way.
Definition: writer.h:63
jsoncollector::FastMonitor::haveFastPath_
bool haveFastPath_
Definition: FastMonitor.h:102
jsoncollector::DataPointDefinition::getNames
std::vector< std::string > const & getNames() const
Definition: DataPointDefinition.h:44
funct::true
true
Definition: Factorize.h:173
jsoncollector::FastMonitor::snapGlobal
void snapGlobal(unsigned int ls)
Definition: FastMonitor.cc:199
jsoncollector::FastMonitor::outputFullJSONs
bool outputFullJSONs(std::string const &pathstem, std::string const &ext, unsigned int lumi, bool output=true)
Definition: FastMonitor.cc:243
JsonSerializable.h
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
jsoncollector::FastMonitor::fastPathStrictChecking_
bool fastPathStrictChecking_
Definition: FastMonitor.h:99
jsoncollector::DataPointDefinition::getOperationFor
OperationType getOperationFor(unsigned int index) const
Definition: DataPointDefinition.cc:78
jsoncollector::FastMonitor::regDpCount_
unsigned int regDpCount_
Definition: FastMonitor.h:121
createfilelist.int
int
Definition: createfilelist.py:10
jsoncollector::FastMonitor::registerStreamMonitorableUIntVecAtomic
void registerStreamMonitorableUIntVecAtomic(std::string const &name, std::vector< AtomicMonUInt * > *inputs, bool NAifZeroUpdates, unsigned int *nBins=nullptr)
Definition: FastMonitor.cc:101
jsoncollector::FileIO::writeStringToFile
static void writeStringToFile(std::string const &filename, std::string &content)
Definition: FileIO.cc:21
PixelMapPlotter.inputs
inputs
Definition: PixelMapPlotter.py:490
jsoncollector::FastMonitor::~FastMonitor
virtual ~FastMonitor()
Definition: FastMonitor.cc:47
jsoncollector::DataPoint
Definition: DataPoint.h:36
jsoncollector::FastMonitor::registerFastGlobalMonitorable
void registerFastGlobalMonitorable(JsonMonitorable *newMonitorable)
Definition: FastMonitor.cc:81
jsoncollector::FastMonitor::useDefinition_
bool useDefinition_
Definition: FastMonitor.h:101
jsoncollector::DataPoint::trackDummy
void trackDummy(std::string const &name, bool setNAifZeroUpdates)
Definition: DataPoint.h:82
jsoncollector::FastMonitor::dpd_
DataPointDefinition const * dpd_
Definition: FastMonitor.h:107
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
jsoncollector::JsonMonitorable
Definition: JsonMonitorable.h:24
jsoncollector
Definition: DataPoint.h:26
jsoncollector::DataPointDefinition
Definition: DataPointDefinition.h:20
jsoncollector::FastMonitor::snapStreamAtomic
void snapStreamAtomic(unsigned int ls, unsigned int streamID)
Definition: FastMonitor.cc:207
jsoncollector::JsonMonitorable::getName
virtual std::string const & getName() const
Definition: JsonMonitorable.h:40
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
jsoncollector::FastMonitor::dpNameMap_
std::map< std::string, unsigned int > dpNameMap_
Definition: FastMonitor.h:117
jsoncollector::FastMonitor::snap
void snap(unsigned int ls)
Definition: FastMonitor.cc:190
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
jsoncollector::FastMonitor::strictChecking_
bool strictChecking_
Definition: FastMonitor.h:98
mps_fire.result
result
Definition: mps_fire.py:311
castor_dqm_sourceclient_file_cfg.path
path
Definition: castor_dqm_sourceclient_file_cfg.py:37
jsoncollector::FastMonitor::FastMonitor
FastMonitor(std::string const &defPath, std::string const defGroup, bool strictChecking, bool useSource=true, bool useDefinition=true)
Definition: FastMonitor.cc:22
jsoncollector::FastMonitor::getCSVString
std::string getCSVString(int sid=-1)
Definition: FastMonitor.cc:214
jsoncollector::FastMonitor::jsonDpIndex_
std::vector< unsigned int > jsonDpIndex_
Definition: FastMonitor.h:114
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
jsoncollector::FastMonitor::discardCollected
void discardCollected(unsigned int forLumi)
Definition: FastMonitor.cc:286
lumi
Definition: LumiSectionData.h:20
pileupReCalc_HLTpaths.trunc
trunc
Definition: pileupReCalc_HLTpaths.py:143
jsoncollector::FastMonitor::defPathFast_
std::string defPathFast_
Definition: FastMonitor.h:97
FastMonitor.h
Json::Value
Represents a JSON value.
Definition: value.h:99
jsoncollector::FastMonitor::dpdFast_
DataPointDefinition const * dpdFast_
Definition: FastMonitor.h:108
jsoncollector::FastMonitor::dataPointsFastOnly_
std::vector< DataPoint * > dataPointsFastOnly_
Definition: FastMonitor.h:113