57 , updatedStats (
false )
59 , printAtTermination(
true )
62 #ifdef ELstatisticsCONSTRUCTOR_TRACE 63 std::cerr <<
"Constructor for ELstatistics()\n";
78 #ifdef ELstatisticsCONSTRUCTOR_TRACE 79 std::cerr <<
"Constructor for ELstatistics(osp)\n";
94 #ifdef ELstatisticsCONSTRUCTOR_TRACE 95 std::cerr <<
"Constructor for ELstatistics(spaceLimit)\n";
110 #ifdef ELstatisticsCONSTRUCTOR_TRACE 111 std::cerr <<
"Constructor for ELstatistics(spaceLimit,osp)\n";
126 #ifdef ELstatisticsCONSTRUCTOR_TRACE 127 std::cerr <<
"Copy constructor for ELstatistics()\n";
140 #ifdef ELstatisticsCONSTRUCTOR_TRACE 141 std::cerr <<
"Destructor for ELstatistics\n";
156 if ( c.substr (0,4) !=
"Run:" )
return c;
157 std::istringstream is (c);
160 is >> runWord >>
run;
162 if (runWord !=
"Run:")
return c;
165 is >> eventWord >>
event;
167 if (eventWord !=
"Event:")
return c;
168 std::ostringstream os;
169 os << run <<
"/" <<
event;
176 #ifdef ELstatsLOG_TRACE 177 std::cerr <<
" =:=:=: Log to an ELstatistics\n";
187 ELmap_stats::iterator
s =
stats.find( msg.
xid() );
188 if ( s ==
stats.end() ) {
194 #ifdef ELstatsLOG_TRACE 195 std::cerr <<
" =:=:=: Message accounted for in stats \n";
197 if ( s !=
stats.end() ) {
201 #ifdef ELstatsLOG_TRACE 211 #ifdef ELstatsLOG_TRACE 212 std::cerr <<
" =:=:=: log(msg) done (stats) \n";
224 ELmap_stats::iterator
s;
227 (*s).second.context1 = (*s).second.context2 = (*s).second.contextLast =
"";
257 std::ostringstream
s;
262 bool ftnote(
false );
266 part3() :
n(0
L),
t(0
L) { ; }
271 for ( ELmap_stats::const_iterator
i = stats.begin();
i != stats.end(); ++
i ) {
284 s <<
" type category sev module " 285 "subroutine count total\n" 286 <<
" ---- -------------------- -- ---------------- " 287 "---------------- ----- -----\n" 292 s << right << std::setw( 5) << ++n <<
' ' 293 << left << std::setw(20) << (*i).first.id.substr(0,20) <<
' ' 294 << left << std::setw( 2) << (*i).first.severity.getSymbol() <<
' ' 295 << left << std::setw(16) << (*i).first.module.substr(0,16) <<
' ' 296 << left << std::setw(16) << (*i).first.subroutine.substr(0,16)
297 << right << std::setw( 7) << (*i).second.n
298 << left << std::setw( 1) << ( (*i).second.ignoredFlag ?
'*' :
' ' )
299 << right << std::setw( 8) << (*i).second.aggregateN <<
'\n' 301 ftnote = ftnote || (*i).second.ignoredFlag;
313 int groupAggregateN = 0;
315 bool groupIgnored =
true;
316 for ( ELmap_stats::const_iterator
i = stats.begin();
i != stats.end(); ++
i ) {
317 if ( (*i).first.id == *
g ) {
318 if (groupTotal==0) severityLevel = (*i).first.severity;
319 groupIgnored &= (*i).second.ignoredFlag;
320 groupAggregateN += (*i).second.aggregateN;
324 if (groupTotal > 0) {
327 s << right << std::setw( 5) << ++n <<
' ' 328 << left << std::setw(20) << (*g).substr(0,20) <<
' ' 329 << left << std::setw( 2) << severityLevel.
getSymbol() <<
' ' 330 << left << std::setw(16) <<
" <Any Module> " <<
' ' 331 << left << std::setw(16) <<
"<Any Function>" 332 << right << std::setw( 7) << groupTotal
333 << left << std::setw( 1) << ( groupIgnored ?
'*' :
' ' )
334 << right << std::setw( 8) << groupAggregateN <<
'\n' 336 ftnote = ftnote || groupIgnored;
341 p3[lev].n += groupTotal;
342 p3[lev].t += groupAggregateN;
349 s <<
"\n* Some occurrences of this message" 350 " were suppressed in all logs, due to limits.\n" 356 for ( ELmap_stats::const_iterator
i = stats.begin();
i != stats.end(); ++
i ) {
364 <<
" type category Examples: " 365 "run/evt run/evt run/evt\n" 366 <<
" ---- -------------------- ----" 367 "------------ ---------------- ----------------\n" 370 s << right << std::setw( 5) << ++n <<
' ' 371 << left << std::setw(20) << (*i).first.id.c_str() <<
' ' 372 << left << std::setw(16) << (*i).second.context1.c_str() <<
' ' 373 << left << std::setw(16) << (*i).second.context2.c_str() <<
' ' 374 << (*i).second.contextLast.c_str() <<
'\n' 380 s <<
"\nSeverity # Occurrences Total Occurrences\n" 381 <<
"-------- ------------- -----------------\n";
383 if (
p3[
k].n != 0 ||
p3[
k].
t != 0 ) {
385 << right << std::setw(17) <<
p3[
k].n
386 << right << std::setw(20) <<
p3[
k].t
406 termStream <<
"\n=============================================\n\n" 407 <<
"MessageLogger Summary" << std::endl
409 <<
"dropped waiting message count "<<overfullWaitCount
410 << std::endl << std::flush;
418 return std::map<ELextendedID , StatsCount> (
stats );
427 part3() :
n(0
L),
t(0
L) { ; }
434 for ( ELmap_stats::const_iterator
i =
stats.begin();
i !=
stats.end(); ++
i ) {
445 std::ostringstream
s;
447 std::string sevSymbol = (*i).first.severity.getSymbol();
448 if ( sevSymbol[0] ==
'-' ) sevSymbol = sevSymbol.substr(1);
449 s << sevSymbol <<
"_" << (*i).first.id;
450 int n = (*i).second.aggregateN;
452 if (sm.find(catstr) != sm.end()) {
467 int groupAggregateN = 0;
469 for ( ELmap_stats::const_iterator
i =
stats.begin();
i !=
stats.end(); ++
i ) {
470 if ( (*i).first.id == *
g ) {
471 if (groupTotal==0) severityLevel = (*i).first.severity;
472 groupAggregateN += (*i).second.aggregateN;
476 if (groupTotal > 0) {
479 std::ostringstream
s;
482 if ( sevSymbol[0] ==
'-' ) sevSymbol = sevSymbol.substr(1);
483 s << sevSymbol <<
"_" << *
g;
484 int n = groupAggregateN;
486 if (sm.find(catstr) != sm.end()) {
495 p3[lev].n += groupTotal;
496 p3[lev].t += groupAggregateN;
509 if (sevName ==
"Severe") sevName =
"System";
510 if (sevName ==
"Success") sevName =
"Debug";
513 if (sevName !=
"UnusedSeverity") {
514 sm[sevName] =
p3[
k].t;
523 if (s==
"LogDebug")
return "LogDebug_LogTrace";
524 if (s==
"LogInfo")
return "LogInfo_LogVerbatim";
525 if (s==
"LogWarning")
return "LogWarnng_LogPrint";
526 if (s==
"LogError")
return "LogError_LogProblem";
527 if (s==
"LogSystem")
return "LogSystem_LogAbsolute";
528 return "UnusedSeverity";
static std::set< std::string > groupedCategories
static std::string summarizeContext(const std::string &c)
std::unordered_set< std::string > ignoreThese
std::map< ELextendedID, StatsCount > statisticsMap() const
std::string dualLogName(std::string const &s)
virtual bool thisShouldBeIgnored(const ELstring &s) const
ELseverityLevel threshold
std::ostream & termStream
void noTerminationSummary()
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
static ELstring formSummary(ELmap_stats &stats)
const ELstring getSymbol() const
void summary(unsigned long overfullWaitCount)
const ELextendedID & xid() const
const ELstring getName() const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
static void noteGroupedCategory(std::string const &cat)
std::unordered_set< std::string > respondToThese
virtual void wipe() override
virtual bool log(const edm::ErrorObj &msg) override
std::map< ELextendedID, StatsCount > ELmap_stats
bool respondToMostModules
void summaryForJobReport(std::map< std::string, double > &sm)
virtual void zero() override