ATLAS Offline Software
Loading...
Searching...
No Matches
TrigErrorMonTool Class Reference

Retrieves and monitors all non-success status codes returned by algorithms. More...

#include <TrigErrorMonTool.h>

Inheritance diagram for TrigErrorMonTool:
Collaboration diagram for TrigErrorMonTool:

Public Member Functions

 TrigErrorMonTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual std::unordered_map< std::string_view, StatusCode > algExecErrors (const EventContext &eventContext) const override
 Produce a subset of IAlgExecStateSvc::algExecStates with only non-success StatusCodes and fill relevant histograms.

Private Attributes

ServiceHandle< ITrigCostSvcm_trigCostSvcHandle {this, "TrigCostSvc", ""}
ToolHandle< GenericMonitoringToolm_monTool {this, "MonTool", "", "Monitoring tool"}
ToolHandle< TrigCompositeUtils::AlgToChainToolm_algToChainTool {this, "AlgToChainTool", "", "Tool to retrieve chains for algorithm"}

Detailed Description

Retrieves and monitors all non-success status codes returned by algorithms.

Definition at line 19 of file TrigErrorMonTool.h.

Constructor & Destructor Documentation

◆ TrigErrorMonTool()

TrigErrorMonTool::TrigErrorMonTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 12 of file TrigErrorMonTool.cxx.

13: base_class(type, name, parent) {}

Member Function Documentation

◆ algExecErrors()

std::unordered_map< std::string_view, StatusCode > TrigErrorMonTool::algExecErrors ( const EventContext & eventContext) const
overridevirtual

Produce a subset of IAlgExecStateSvc::algExecStates with only non-success StatusCodes and fill relevant histograms.

Definition at line 39 of file TrigErrorMonTool.cxx.

39 {
40 std::unordered_map<std::string_view, StatusCode> algErrors;
41 bool wasTimeout = false;
42 SmartIF<IAlgManager> algMgr{serviceLocator()->as<IAlgManager>()};
43 for (const IAlgorithm* alg : algMgr->getAlgorithms()) {
44 auto state = alg->execState(eventContext);
45 if (!state.execStatus().isSuccess() && state.state()!=AlgExecState::State::None) {
46
47 ATH_MSG_DEBUG("Algorithm " << alg->name() << " returned StatusCode " << state.execStatus().message()
48 << " in event " << eventContext.eventID());
49 algErrors[alg->name()] = state.execStatus();
50 auto monErrorAlgName = Monitored::Scalar<std::string>("ErrorAlgName", alg->name());
51 auto monErrorCode = Monitored::Scalar<std::string>("ErrorCode", state.execStatus().message());
52 auto mon = Monitored::Group(m_monTool, monErrorAlgName, monErrorCode);
53
54 if (m_algToChainTool.isEnabled()) {
55 std::set<std::string> chainNames = m_algToChainTool->getActiveChainsForAlg(alg->name(), eventContext);
56 // Monitored::Collection requires operator[]
57 std::vector<std::string> chainNamesVec(chainNames.begin(), chainNames.end());
58
59 auto monErrorChainNames= Monitored::Collection<std::vector<std::string>>("ErrorChainName", chainNamesVec);
60 Monitored::Group(m_monTool, monErrorChainNames, monErrorCode);
61 }
62
63 if (state.execStatus() == Athena::Status::TIMEOUT) {
64 // Print report of most time consuming algorithms
65 wasTimeout = true;
66 }
67 }
68 }
69
70 if (wasTimeout && !m_trigCostSvcHandle.empty()){
71 std::string timeoutReport;
72 if (m_trigCostSvcHandle->generateTimeoutReport(eventContext, timeoutReport) == StatusCode::FAILURE){
73 ATH_MSG_ERROR("Generating timeout algorithm report failed.");
74 }
75 else if (timeoutReport.empty()){
76 ATH_MSG_INFO("CostMonitoring not active in this event. A list of slow algorithms is not available.");
77 }
78 else {
79 ATH_MSG_ERROR(timeoutReport);
80 }
81 }
82
83 return algErrors;
84}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
ToolHandle< GenericMonitoringTool > m_monTool
ToolHandle< TrigCompositeUtils::AlgToChainTool > m_algToChainTool
ServiceHandle< ITrigCostSvc > m_trigCostSvcHandle
@ TIMEOUT
Timeout during event processing.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.

◆ finalize()

StatusCode TrigErrorMonTool::finalize ( )
overridevirtual

Definition at line 30 of file TrigErrorMonTool.cxx.

30 {
31 ATH_CHECK(m_monTool.release());
32 ATH_CHECK(m_algToChainTool.release());
33 return StatusCode::SUCCESS;
34}
#define ATH_CHECK
Evaluate an expression and check for errors.

◆ initialize()

StatusCode TrigErrorMonTool::initialize ( )
overridevirtual

Definition at line 18 of file TrigErrorMonTool.cxx.

18 {
19 ATH_CHECK(m_monTool.retrieve(DisableTool{m_monTool.name().empty()}));
20 ATH_CHECK(m_algToChainTool.retrieve(DisableTool{m_algToChainTool.name().empty()}));
21
22 if (!m_trigCostSvcHandle.empty()) ATH_CHECK(m_trigCostSvcHandle.retrieve());
23
24 return StatusCode::SUCCESS;
25}

Member Data Documentation

◆ m_algToChainTool

ToolHandle<TrigCompositeUtils::AlgToChainTool> TrigErrorMonTool::m_algToChainTool {this, "AlgToChainTool", "", "Tool to retrieve chains for algorithm"}
private

Definition at line 34 of file TrigErrorMonTool.h.

34{this, "AlgToChainTool", "", "Tool to retrieve chains for algorithm"};

◆ m_monTool

ToolHandle<GenericMonitoringTool> TrigErrorMonTool::m_monTool {this, "MonTool", "", "Monitoring tool"}
private

Definition at line 33 of file TrigErrorMonTool.h.

33{this, "MonTool", "", "Monitoring tool"};

◆ m_trigCostSvcHandle

ServiceHandle<ITrigCostSvc> TrigErrorMonTool::m_trigCostSvcHandle {this, "TrigCostSvc", ""}
private

Definition at line 32 of file TrigErrorMonTool.h.

32{this, "TrigCostSvc", ""};

The documentation for this class was generated from the following files: