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 &registerer{
    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  }