37 return iNamed ? iNamed->name() : s_unknown ;
42 #define ON_DEBUG if (msgLevel(MSG::DEBUG))
43 #define ON_VERBOSE if (msgLevel(MSG::VERBOSE))
45 #define DEBMSG ON_DEBUG debug()
46 #define VERMSG ON_VERBOSE verbose()
96 long prio,
bool rethrow,
bool singleShot)
111 auto& llist = *itMap->second;
118 DEBMSG <<
"Adding [" << type <<
"] listener '" << getListenerName(lis)
119 <<
"' with priority " << prio <<
endmsg;
120 llist.emplace(
i, lis, prio, rethrow, singleShot);
126 bool scheduleRemoval )
128 auto match = [&](ListenerList::const_reference j )
129 {
return !item || item == j.iListener; };
131 auto&
c = *(i->second);
132 if (!scheduleRemoval) {
134 [&](ListenerList::const_reference j) {
135 if (match(j))
debug() <<
"Removing [" << i->first <<
"] listener '"
136 << getListenerName(j.iListener) <<
"'" <<
endmsg;
168 constexpr
struct isSingleShot_t {
185 if ( incident.
type() == IncidentType::FailInputFile ||
186 incident.
type() == IncidentType::CorruptedInputFile ) {
189 incident.
type() == IncidentType::FailInputFile ?
202 bool firedSingleShot =
false;
204 auto& listeners = *ilisteners->second;
206 for(
auto& listener : listeners )
209 VERMSG <<
"Calling '" << getListenerName(listener.iListener)
210 <<
"' for incident [" << incident.
type() <<
"]" <<
endmsg;
214 listener.iListener->handle(incident);
217 error() <<
"Exception with tag=" << exc.
tag() <<
" is caught"
220 if ( listener.rethrow ) {
throw exc; }
223 error() <<
"Standard std::exception is caught"
226 if ( listener.rethrow ) {
throw exc; }
229 error() <<
"UNKNOWN Exception is caught"
231 if ( listener.rethrow ) {
throw; }
234 firedSingleShot |= listener.singleShot;
236 if (firedSingleShot) {
254 if ( incident.
type() !=
"ALL" ){
275 [](
const Listener& j) { return j.iListener; });
StatusCode initialize() override
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
int ALL
message levels --------------------------------------------------------—
ChronoEntity m_timer
timer & it's lock
Define general base for Gaudi exception.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
const std::string & type() const
Access to the incident type.
StatusCode finalize() override
StatusCode finalize() override
T partition_point(T...args)
void addListener(IIncidentListener *lis, const std::string &type="", long priority=0, bool rethrow=false, bool singleShot=false) override
ListenerMap::iterator removeListenerFromList(ListenerMap::iterator, IIncidentListener *item, bool scheduleRemoval)
bool isFailure() const
Test for a status code of FAILURE.
IncidentSvc(const std::string &name, ISvcLocator *svc)
constexpr int CorruptedInput
#define DECLARE_COMPONENT(type)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
The interface implemented by any class wanting to listen to Incidents.
std::recursive_mutex m_listenerMapMutex
Mutex to synchronize access to m_listenerMap.
This class is used for returning status codes from appropriate routines.
void removeListener(IIncidentListener *l, const std::string &type="") override
iterator find(const key_type &key)
virtual const std::string & tag() const
name tag for the exception, or exception type
StatusCode initialize() override
std::vector< Listener > ListenerList
const std::string * m_currentIncidentType
Incident being fired.
StatusCode setAppReturnCode(SmartIF< IProperty > &appmgr, int value, bool force=false)
Set the application return code.
StatusCode setProperties()
Method for setting declared properties to the values specified for the job.
void getListeners(std::vector< IIncidentListener * > &lis, const std::string &type="") const override
std::string outputUserTime() const
print the chrono ;
map_type::iterator iterator
Helper object, useful for measurement of CPU-performance of highly-recursive structures, e.g.
iterator erase(const_iterator pos)
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
void i_fireIncident(const Incident &incident, const std::string &type)
Internal function to allow incidents listening to all events.
T back_inserter(T...args)
Base class for all Incidents (computing events).
std::pair< iterator, bool > insert(ValueType &&val)
void fireIncident(const Incident &incident) override
ListenerMap m_listenerMap
List of auditor names.
Default implementation of the IIncidentSvc interface.
The IProperty is the basic interface for all components which have properties that can be set or get...
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.