func New(host string, config *Config, logger *gosteno.Logger) *Loggregator { cfcomponent.Logger = logger keepAliveInterval := 30 * time.Second listener, incomingLogChan := agentlistener.NewAgentListener(fmt.Sprintf("%s:%d", host, config.IncomingPort), logger) unmarshaller, messageChan := unmarshaller.NewLogMessageUnmarshaller(config.SharedSecret, incomingLogChan) blacklist := blacklist.New(config.BlackListIps) sinkManager, appStoreInputChan := sinkmanager.NewSinkManager(config.MaxRetainedLogMessages, config.SkipCertVerify, blacklist, logger) workerPool := workerpool.NewWorkerPool(config.EtcdMaxConcurrentRequests) storeAdapter := etcdstoreadapter.NewETCDStoreAdapter(config.EtcdUrls, workerPool) appStoreCache := cache.NewAppServiceCache() appStoreWatcher, newAppServiceChan, deletedAppServiceChan := store.NewAppServiceStoreWatcher(storeAdapter, appStoreCache) appStore := store.NewAppServiceStore(storeAdapter, appStoreWatcher) return &Loggregator{ Logger: logger, listener: listener, unmarshaller: unmarshaller, sinkManager: sinkManager, messageChan: messageChan, appStoreInputChan: appStoreInputChan, appStore: appStore, messageRouter: sinkserver.NewMessageRouter(sinkManager, logger), websocketServer: websocketserver.New(fmt.Sprintf("%s:%d", host, config.OutgoingPort), sinkManager, keepAliveInterval, config.WSMessageBufferSize, logger), newAppServiceChan: newAppServiceChan, deletedAppServiceChan: deletedAppServiceChan, appStoreWatcher: appStoreWatcher, storeAdapter: storeAdapter, } }
func init() { logger := gosteno.NewLogger("TestLogger") listener := agentlistener.NewAgentListener("localhost:3456", logger) dataChannel := listener.Start() messageRouter := sinkserver.NewMessageRouter(10, false, nil, logger) go messageRouter.Start() httpServer := sinkserver.NewHttpServer(messageRouter, 30*time.Second, testhelpers.UnmarshallerMaker("secret"), 100, logger) go httpServer.Start(dataChannel, "localhost:8081") time.Sleep(50 * time.Millisecond) }
func init() { dataReadChannel = make(chan *logmessage.Message) logger := loggertesthelper.Logger() cfcomponent.Logger = logger newAppServiceChan := make(chan domain.AppService) deletedAppServiceChan := make(chan domain.AppService) emptyBlacklist := blacklist.New(nil) sinkManager, _ = sinkmanager.NewSinkManager(1024, false, emptyBlacklist, logger) go sinkManager.Start(newAppServiceChan, deletedAppServiceChan) TestMessageRouter = sinkserver.NewMessageRouter(sinkManager, logger) go TestMessageRouter.Start(dataReadChannel) apiEndpoint := "localhost:" + SERVER_PORT TestWebsocketServer = websocketserver.New(apiEndpoint, sinkManager, 10*time.Second, 100, loggertesthelper.Logger()) go TestWebsocketServer.Start() timeoutApiEndpoint := "localhost:" + FAST_TIMEOUT_SERVER_PORT FastTimeoutTestWebsocketServer := websocketserver.New(timeoutApiEndpoint, sinkManager, 10*time.Millisecond, 100, loggertesthelper.Logger()) go FastTimeoutTestWebsocketServer.Start() blackListDataReadChannel = make(chan *logmessage.Message) localhostBlacklist := blacklist.New([]iprange.IPRange{iprange.IPRange{Start: "127.0.0.0", End: "127.0.0.2"}}) blacklistSinkManager, _ := sinkmanager.NewSinkManager(1024, false, localhostBlacklist, logger) go blacklistSinkManager.Start(newAppServiceChan, deletedAppServiceChan) blacklistTestMessageRouter := sinkserver.NewMessageRouter(blacklistSinkManager, logger) go blacklistTestMessageRouter.Start(blackListDataReadChannel) blacklistApiEndpoint := "localhost:" + BLACKLIST_SERVER_PORT blackListTestWebsocketServer = websocketserver.New(blacklistApiEndpoint, blacklistSinkManager, 10*time.Second, 100, loggertesthelper.Logger()) go blackListTestWebsocketServer.Start() time.Sleep(5 * time.Millisecond) }
func init() { logger := gosteno.NewLogger("TestLogger") listener := agentlistener.NewAgentListener("localhost:3456", logger) incomingLogChan := listener.Start() sinkManager := sinkserver.NewSinkManager(1024, false, nil, logger) go sinkManager.Start() messageRouter := sinkserver.NewMessageRouter(incomingLogChan, testhelpers.UnmarshallerMaker("secret"), sinkManager, 2048, logger) go messageRouter.Start() websocketServer := sinkserver.NewWebsocketServer("localhost:8083", sinkManager, 30*time.Second, 100, logger) go websocketServer.Start() time.Sleep(50 * time.Millisecond) }
func main() { seed := time.Now().UnixNano() rand.Seed(seed) flag.Parse() if *version { fmt.Printf("version: %s\ngitSha: %s\nsourceUrl: https://github.com/cloudfoundry/loggregator/tree/%s\n\n", versionNumber, gitSha, gitSha) return } runtime.GOMAXPROCS(runtime.NumCPU()) config, logger := parseConfig(logLevel, configFile, logFilePath) err := config.validate(logger) if err != nil { panic(err) } agentListener := agentlistener.NewAgentListener(fmt.Sprintf("0.0.0.0:%d", config.IncomingPort), logger) incomingLogChan := agentListener.Start() sinkManager := sinkserver.NewSinkManager(config.MaxRetainedLogMessages, config.SkipCertVerify, config.BlackListIps, logger) go sinkManager.Start() unmarshaller := func(data []byte) (*logmessage.Message, error) { return logmessage.ParseEnvelope(data, config.SharedSecret) } messageChannelLength := 2048 messageRouter := sinkserver.NewMessageRouter(incomingLogChan, unmarshaller, sinkManager, messageChannelLength, logger) apiEndpoint := fmt.Sprintf("0.0.0.0:%d", config.OutgoingPort) keepAliveInterval := 30 * time.Second websocketServer := sinkserver.NewWebsocketServer(apiEndpoint, sinkManager, keepAliveInterval, config.WSMessageBufferSize, logger) cfc, err := cfcomponent.NewComponent( logger, "LoggregatorServer", config.Index, &LoggregatorServerHealthMonitor{}, config.VarzPort, []string{config.VarzUser, config.VarzPass}, []instrumentation.Instrumentable{agentListener, sinkManager, messageRouter}, ) if err != nil { panic(err) } cr := collectorregistrar.NewCollectorRegistrar(config.MbusClient, logger) err = cr.RegisterWithCollector(cfc) if err != nil { logger.Warnf("Unable to register with collector. Err: %v.", err) } go func() { err := cfc.StartMonitoringEndpoints() if err != nil { panic(err) } }() go messageRouter.Start() go websocketServer.Start() killChan := make(chan os.Signal) signal.Notify(killChan, os.Kill) for { select { case <-cfcomponent.RegisterGoRoutineDumpSignalChannel(): cfcomponent.DumpGoRoutine() case <-killChan: break } } }
} func (f *fakeSinkManager) drains() [][]string { f.RLock() defer f.RUnlock() return f.receivedDrains } var _ = Describe("Message Router", func() { var fakeManager *fakeSinkManager var messageRouter *sinkserver.MessageRouter BeforeEach(func() { fakeManager = &fakeSinkManager{receivedMessages: make([]*logmessage.Message, 0), receivedDrains: make([][]string, 0)} messageRouter = sinkserver.NewMessageRouter(fakeManager, loggertesthelper.Logger()) }) Describe("Start", func() { Context("With an incoming message", func() { var incomingLogChan chan *logmessage.Message BeforeEach(func() { incomingLogChan = make(chan *logmessage.Message) go messageRouter.Start(incomingLogChan) }) AfterEach(func() { messageRouter.Stop() }) It("sends the message to the sink manager if it is an app message", func() {
func main() { seed := time.Now().UnixNano() rand.Seed(seed) flag.Parse() if *version { fmt.Printf("version: %s\ngitSha: %s\nsourceUrl: https://github.com/cloudfoundry/loggregator/tree/%s\n\n", versionNumber, gitSha, gitSha) return } runtime.GOMAXPROCS(runtime.NumCPU()) config := &Config{IncomingPort: 3456, OutgoingPort: 8080} err := cfcomponent.ReadConfigInto(config, *configFile) if err != nil { panic(err) } logger := cfcomponent.NewLogger(*logLevel, *logFilePath, "loggregator", config.Config) logger.Info("Startup: Setting up the loggregator server") err = config.validate(logger) if err != nil { panic(err) } listener := agentlistener.NewAgentListener(fmt.Sprintf("0.0.0.0:%d", config.IncomingPort), logger) incomingData := listener.Start() messageRouter := sinkserver.NewMessageRouter(config.MaxRetainedLogMessages, logger) unmarshaller := func(data []byte) (*logmessage.Message, error) { return logmessage.ParseEnvelope(data, config.SharedSecret) } httpServer := sinkserver.NewHttpServer(messageRouter, 30*time.Second, unmarshaller, logger) cfc, err := cfcomponent.NewComponent( logger, "LoggregatorServer", config.Index, &LoggregatorServerHealthMonitor{}, config.VarzPort, []string{config.VarzUser, config.VarzPass}, []instrumentation.Instrumentable{listener, messageRouter}, ) if err != nil { panic(err) } cr := collectorregistrar.NewCollectorRegistrar(config.MbusClient, logger) err = cr.RegisterWithCollector(cfc) if err != nil { logger.Warnf("Unable to register with collector. Err: %v.", err) } go func() { err := cfc.StartMonitoringEndpoints() if err != nil { panic(err) } }() go messageRouter.Start() go httpServer.Start(incomingData, fmt.Sprintf("0.0.0.0:%d", config.OutgoingPort)) killChan := make(chan os.Signal) signal.Notify(killChan, os.Kill) for { select { case <-cfcomponent.RegisterGoRoutineDumpSignalChannel(): cfcomponent.DumpGoRoutine() case <-killChan: break } } }