func (gc *GroupedSinks) Delete(sink sinks.Sink) bool { gc.Lock() defer gc.Unlock() wrapper, ok := gc.apps[sink.AppId()][sink.Identifier()] if ok { close(wrapper.inputChan) delete(gc.apps[sink.AppId()], sink.Identifier()) return true } return false }
func (gc *GroupedSinks) Register(s sinks.Sink) bool { gc.Lock() defer gc.Unlock() appId := s.AppId() if appId == "" || s.Identifier() == "" { return false } if gc.apps[appId] == nil { gc.apps[appId] = make(map[string]sinks.Sink) } if gc.apps[appId][s.Identifier()] != nil { return false } gc.apps[appId][s.Identifier()] = s return true }
func (gc *GroupedSinks) Register(in chan<- *logmessage.Message, s sinks.Sink) bool { gc.Lock() defer gc.Unlock() appId := s.AppId() if appId == "" || s.Identifier() == "" { return false } sinksForApp := gc.apps[appId] if sinksForApp == nil { gc.apps[appId] = make(map[string]*sinkWrapper) sinksForApp = gc.apps[appId] } if _, ok := sinksForApp[s.Identifier()]; ok { return false } sinksForApp[s.Identifier()] = &sinkWrapper{inputChan: in, s: s} 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() } else if _, ok := sink.(*dump.DumpSink); ok { sinkManager.appStoreUpdateChan <- domain.AppServices{AppId: sink.AppId()} } sinkManager.logger.Debugf("SinkManager: Sink with identifier %s requested closing. Closed it.", sink.Identifier()) }
func (sinkManager *SinkManager) RegisterSink(sink sinks.Sink) bool { inputChan := make(chan *logmessage.Message) ok := sinkManager.sinks.Register(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 (gc *GroupedSinks) Delete(sink sinks.Sink) { gc.Lock() defer gc.Unlock() delete(gc.apps[sink.AppId()], sink.Identifier()) }
func (sinkManager *SinkManager) UnregisterSink(sink sinks.Sink) { sinkManager.sinks.Delete(sink) close(sink.Channel()) sinkManager.Metrics.Dec(sink) if syslogSink, ok := sink.(*sinks.SyslogSink); ok { syslogSink.Disconnect() } sinkManager.logger.Infof("SinkManager: Sink with channel %v and identifier %s requested closing. Closed it.", sink.Channel(), sink.Identifier()) }
func (sinkManager *SinkManager) RegisterSink(sink sinks.Sink, block ...bool) bool { inputChan := make(chan *logmessage.Message) ok := sinkManager.sinks.Register(inputChan, sink) if !ok { return false } sinkManager.Metrics.Inc(sink) sinkManager.logger.Infof("SinkManager: Sink with identifier %v requested. Opened it.", sink.Identifier()) if len(block) > 0 { sink.Run(inputChan) sinkManager.unregisterSink(sink) } else { go func() { sink.Run(inputChan) sinkManager.unregisterSink(sink) }() } return true }
func (messageRouter *messageRouter) unregisterSink(s sinks.Sink, activeSinks *groupedsinks.GroupedSinks) { messageRouter.Lock() defer messageRouter.Unlock() activeSinks.Delete(s) close(s.Channel()) switch s.(type) { case *sinks.DumpSink: messageRouter.activeDumpSinksCounter-- case *sinks.SyslogSink: syslogSink, _ := s.(*sinks.SyslogSink) syslogSink.Disconnect() messageRouter.activeSyslogSinksCounter-- case *sinks.WebsocketSink: messageRouter.activeWebsocketSinksCounter-- } messageRouter.logger.Infof("MessageRouter: Sink with channel %v and identifier %s requested closing. Closed it.", s.Channel(), s.Identifier()) }