func (group *firehoseGroup) Exists(sink sinks.Sink) bool { group.Lock() defer group.Unlock() for _, sinkWrapper := range group.sinkWrappers { if sink.Identifier() == sinkWrapper.Sink.Identifier() { return true } } return false }
func (group *GroupedSinks) CloseAndDelete(sink sinks.Sink) bool { group.Lock() defer group.Unlock() appId := sink.AppID() wrapper, ok := group.apps[appId][sink.Identifier()] if ok { close(wrapper.InputChan) delete(group.apps[appId], sink.Identifier()) return true } return false }
func (sm *SinkManager) RegisterSink(sink sinks.Sink) bool { inputChan := make(chan *events.Envelope, 128) ok := sm.sinks.RegisterAppSink(inputChan, sink) if !ok { return false } sm.metrics.Inc(sink) sm.logger.Debugf("SinkManager: Sink with identifier %v requested. Opened it.", sink.Identifier()) go func() { sink.Run(inputChan) sm.UnregisterSink(sink) }() return true }
func (group *GroupedSinks) RegisterAppSink(in chan<- *events.Envelope, sink sinks.Sink) bool { group.Lock() defer group.Unlock() appId := sink.AppID() if appId == "" || sink.Identifier() == "" { return false } sinksForApp := group.apps[appId] if sinksForApp == nil { group.apps[appId] = make(map[string]*sink_wrapper.SinkWrapper) sinksForApp = group.apps[appId] } if _, ok := sinksForApp[sink.Identifier()]; ok { return false } sinksForApp[sink.Identifier()] = &sink_wrapper.SinkWrapper{InputChan: in, Sink: sink} return true }
func (sinkManager *SinkManager) UnregisterSink(sink sinks.Sink) { ok := sinkManager.sinks.CloseAndDelete(sink) if !ok { return } sinkManager.metrics.Dec(sink) if syslogSink, ok := sink.(*syslog.SyslogSink); ok { syslogSink.Disconnect() } sinkManager.logger.Debugf("SinkManager: Sink with identifier %s requested closing. Closed it.", sink.Identifier()) }
func (sinkManager *SinkManager) UnregisterFirehoseSink(sink sinks.Sink) { ok := sinkManager.sinks.CloseAndDeleteFirehose(sink) if !ok { return } sinkManager.metrics.DecFirehose() sinkManager.logger.Debugf("SinkManager: Firehose Sink with identifier %s requested closing. Closed it.", sink.Identifier()) }