github.com/aporeto-inc/trireme-lib@v10.358.0+incompatible/monitor/registerer/registerer.go (about) 1 package registerer 2 3 import ( 4 "fmt" 5 6 "go.aporeto.io/enforcerd/trireme-lib/common" 7 "go.aporeto.io/enforcerd/trireme-lib/monitor/processor" 8 ) 9 10 // registerer provides a way for others to register a registerer 11 type registerer struct { 12 handlers map[common.PUType]map[common.Event]common.EventHandler 13 } 14 15 // New returns a new registerer 16 func New() Registerer { 17 18 return ®isterer{ 19 handlers: map[common.PUType]map[common.Event]common.EventHandler{}, 20 } 21 } 22 23 // RegisterProcessor registers an event processor for a given PUTYpe. Only one 24 // processor is allowed for a given PU Type. 25 func (r *registerer) RegisterProcessor(puType common.PUType, ep processor.Processor) error { 26 27 if _, ok := r.handlers[puType]; ok { 28 return fmt.Errorf("Processor already registered for this PU type %d ", puType) 29 } 30 31 r.handlers[puType] = map[common.Event]common.EventHandler{} 32 33 r.addHandler(puType, common.EventStart, ep.Start) 34 r.addHandler(puType, common.EventStop, ep.Stop) 35 r.addHandler(puType, common.EventCreate, ep.Create) 36 r.addHandler(puType, common.EventDestroy, ep.Destroy) 37 r.addHandler(puType, common.EventPause, ep.Pause) 38 r.addHandler(puType, common.EventResync, ep.Resync) 39 40 return nil 41 } 42 43 func (r *registerer) GetHandler(puType common.PUType, eventType common.Event) (common.EventHandler, error) { 44 45 handlers, ok := r.handlers[puType] 46 if !ok { 47 return nil, fmt.Errorf("PUType %d not registered", puType) 48 } 49 50 e, ok := handlers[eventType] 51 if !ok { 52 return nil, fmt.Errorf("PUType %d event type %s not registered", puType, eventType) 53 } 54 55 return e, nil 56 } 57 58 // addHandler adds a handler for a puType/event. 59 func (r *registerer) addHandler(puType common.PUType, event common.Event, handler common.EventHandler) { 60 r.handlers[puType][event] = handler 61 }