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() 107 auto& llist = *itMap->second;
114 DEBMSG <<
"Adding [" << type <<
"] listener '" << getListenerName( lis ) <<
"' with priority " << prio <<
endmsg;
115 llist.emplace( i, lis, prio, rethrow, singleShot );
121 auto match = [&]( ListenerList::const_reference j ) {
return !item || item == j.iListener; };
123 auto&
c = *( i->second );
124 if ( !scheduleRemoval ) {
127 debug() <<
"Removing [" << i->first <<
"] listener '" << getListenerName( j.iListener ) <<
"'" <<
endmsg;
143 if ( type.empty() ) {
157 constexpr
struct isSingleShot_t {
172 if ( incident.
type() == IncidentType::FailInputFile || incident.
type() == IncidentType::CorruptedInputFile ) {
187 bool firedSingleShot =
false;
189 auto& listeners = *ilisteners->second;
191 for (
auto& listener : listeners ) {
193 VERMSG <<
"Calling '" << getListenerName( listener.iListener ) <<
"' for incident [" << incident.
type() <<
"]" 198 listener.iListener->handle( incident );
200 error() <<
"Exception with tag=" << exc.
tag() <<
" is caught" 201 " handling incident " 204 if ( listener.rethrow ) {
208 error() <<
"Standard std::exception is caught" 209 " handling incident " 212 if ( listener.rethrow ) {
216 error() <<
"UNKNOWN Exception is caught" 217 " handling incident " 219 if ( listener.rethrow ) {
224 firedSingleShot |= listener.singleShot;
226 if ( firedSingleShot ) {
244 if ( incident.
type() !=
"ALL" ) {
253 auto ctx = incident->
context();
255 res.first->second.push( incident.
release() );
269 l.
reserve( i->second->size() );
271 [](
const Listener& j ) { return j.iListener; } );
285 DEBMSG <<
"Collecting listeners fired on context " << *ctx <<
endmsg;
286 while ( incs->second.try_pop( inc ) ) {
StatusCode initialize() override
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)
This class represents an entry point to all the event specific data.
IncidentSvc(const std::string &name, ISvcLocator *svc)
constexpr int CorruptedInput
std::vector< std::unique_ptr< Incident > > incidents
#define DECLARE_COMPONENT(type)
std::pair< iterator, bool > insert(ValueType &&val)
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.
constexpr static const auto SUCCESS
tbb::concurrent_queue< Incident * > IncQueue_t
tbb::concurrent_unordered_map< EventContext, IncQueue_t, EventContextHash, EventContextHash > m_firedIncidents
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).
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.