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" ){
265 res.first->second.push(incident.
release());
284 [](
const Listener& j) { return j.iListener; });
297 DEBMSG <<
"Collecting listeners fired on context " << *ctx <<
endmsg;
298 while(incs->second.try_pop(inc)){
tbb::concurrent_unordered_map< EventContext, IncQueue_t, EventContextHash, EventContextHash > m_firedIncidents
StatusCode initialize() override
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
IIncidentSvc::IncidentPack getIncidents(const EventContext *ctx) override
ListenerMap::iterator removeListenerFromList(ListenerMap::iterator, IIncidentListener *item, bool scheduleRemoval)
std::list< Listener > ListenerList
This class represents an entry point to all the event specific data.
bool isFailure() const
Test for a status code of FAILURE.
IncidentSvc(const std::string &name, ISvcLocator *svc)
constexpr int CorruptedInput
#define DECLARE_COMPONENT(type)
std::vector< std::unique_ptr< Incident > > incidents
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< std::vector< IIncidentListener * > > listeners
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.
tbb::concurrent_queue< Incident * > IncQueue_t
std::string outputUserTime() const
print the chrono ;
void getListeners(std::vector< IIncidentListener * > &lis, const std::string &type="") const override
map_type::iterator iterator
Helper object, useful for measurement of CPU-performance of highly-recursive structures, e.g.
virtual Out operator()(const vector_of_const_< In > &inputs) const =0
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...
EventContext context() const
Access to the EventContext of the source of the incident.
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.