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) IsFirehoseRegistered(sink sinks.Sink) bool { group.RLock() defer group.RUnlock() subscriptionId := sink.AppID() if subscriptionId == "" { return false } fgroup := group.firehoses[subscriptionId] if fgroup == nil { return false } return fgroup.Exists(sink) }
func (group *GroupedSinks) RegisterFirehoseSink(in chan<- *events.Envelope, sink sinks.Sink) bool { group.Lock() defer group.Unlock() subscriptionId := sink.AppID() if subscriptionId == "" { return false } fgroup := group.firehoses[subscriptionId] if fgroup == nil { group.firehoses[subscriptionId] = firehose_group.NewFirehoseGroup() fgroup = group.firehoses[subscriptionId] } return fgroup.AddSink(sink, in) }
func (sinkManager *SinkManager) RegisterSink(sink sinks.Sink) bool { inputChan := make(chan *events.Envelope, 128) ok := sinkManager.sinks.RegisterAppSink(inputChan, sink) if !ok { return false } sinkManager.metrics.Inc(sink) sinkManager.logger.Debugf("SinkManager: Sink with identifier %v requested. Opened it.", sink.Identifier()) go func() { sink.Run(inputChan) sinkManager.UnregisterSink(sink) }() return true }
func (group *GroupedSinks) CloseAndDeleteFirehose(sink sinks.Sink) bool { group.Lock() defer group.Unlock() firehoseSubscriptionId := sink.AppID() fgroup, ok := group.firehoses[firehoseSubscriptionId] if !ok { return false } removed := fgroup.RemoveSink(sink) if removed == false { return false } if fgroup.IsEmpty() == true { delete(group.firehoses, firehoseSubscriptionId) } 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 (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 (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()) }