func (r *redirector) generateRedirectUrl(req *http.Request) string { req.ParseForm() server, _ := r.h.getLoggregatorServerForAppId(req.Form.Get("app")) uri := servernamer.ServerName(server, req.Host) + req.URL.RequestURI() var proto string if proto = req.Header.Get("X-Forwarded-Proto"); proto != "" { // X-Forwarded-Proto is set for all https and http requests proto = proto + "://" r.logger.Debugf("Using X-Forwarded-Proto value %v for redirect protocol", proto) } else if strings.Contains(req.Host, ":4443") { proto = "wss://" r.logger.Debug("Using wss protocol because request port was 4443") } else { proto = "ws://" r.logger.Debug("Falling back to ws protocol") } return proto + uri }
func main() { flag.Parse() if *version { fmt.Printf("\n\nversion: %s\ngitSha: %s\n\n", versionNumber, gitSha) return } runtime.GOMAXPROCS(runtime.NumCPU()) logger := cfcomponent.NewLogger(*logLevel, *logFilePath, "loggregator") config := &Config{SourcePort: 3456, WebPort: 8080, UaaVerificationKeyFile: *uaaVerificationKeyFile} err := cfcomponent.ReadConfigInto(config, *configFile) if err != nil { panic(err) } err = config.validate(logger) if err != nil { panic(err) } listener := agentlistener.NewAgentListener(fmt.Sprintf("0.0.0.0:%d", config.SourcePort), logger) incomingData := listener.Start() authorizer := authorization.NewLogAccessAuthorizer(config.decoder, config.ApiHost) sinkServer := sinkserver.NewSinkServer( messagestore.NewMessageStore(config.MaxRetainedLogMessages), logger, authorizer, 30*time.Second, ) cfc, err := cfcomponent.NewComponent( config.WebPort, "LoggregatorServer", config.Index, &LoggregatorServerHealthMonitor{}, config.VarzPort, []string{config.VarzUser, config.VarzPass}, []instrumentation.Instrumentable{listener, sinkServer}, ) if err != nil { panic(err) } rr := routerregistrar.NewRouterRegistrar(config.MbusClient, logger) uri := servernamer.ServerName( net.JoinHostPort(cfc.IpAddress, strconv.Itoa(int(config.SourcePort))), "loggregator."+config.SystemDomain) err = rr.RegisterWithRouter(cfc.IpAddress, config.WebPort, []string{uri}) if err != nil { logger.Fatalf("Did not get response from router when greeting. Using default keep-alive for now. Err: %v.", 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 sinkServer.Start(incomingData, fmt.Sprintf("0.0.0.0:%d", config.WebPort)) killChan := make(chan os.Signal) signal.Notify(killChan, os.Kill) for { select { case <-cfcomponent.RegisterGoRoutineDumpSignalChannel(): cfcomponent.DumpGoRoutine() case <-killChan: rr.UnregisterFromRouter(cfc.IpAddress, cfc.WebPort, []string{uri}) break } } }