func listenAndServe(proxy http.Handler, o *Options) error { // create the access log handler loggingHandler := logging.NewHandler(proxy) log.Infof("proxy listener on %v", o.Address) if o.isHTTPS() { return http.ListenAndServeTLS(o.Address, o.CertPathTLS, o.KeyPathTLS, loggingHandler) } log.Infof("certPathTLS or keyPathTLS not found, defaulting to HTTP") return http.ListenAndServe(o.Address, loggingHandler) }
// Run skipper. func Run(o Options) error { // init log err := initLog(o) if err != nil { return err } // init metrics metrics.Init(metrics.Options{ Listener: o.MetricsListener, Prefix: o.MetricsPrefix, EnableDebugGcMetrics: o.EnableDebugGcMetrics, EnableRuntimeMetrics: o.EnableRuntimeMetrics, }) // create authentication for Innkeeper auth := innkeeper.CreateInnkeeperAuthentication(innkeeper.AuthOptions{ InnkeeperAuthToken: o.InnkeeperAuthToken, OAuthCredentialsDir: o.OAuthCredentialsDir, OAuthUrl: o.OAuthUrl, OAuthScope: o.OAuthScope}) // create data client dataClients, err := createDataClients(o, auth) if err != nil { return err } if len(dataClients) == 0 { log.Warning("no route source specified") } // create a filter registry with the available filter specs registered, // and register the custom filters registry := builtin.MakeRegistry() for _, f := range o.CustomFilters { registry.Register(f) } // create routing // create the proxy instance var mo routing.MatchingOptions if o.IgnoreTrailingSlash { mo = routing.IgnoreTrailingSlash } // ensure a non-zero poll timeout if o.SourcePollTimeout <= 0 { o.SourcePollTimeout = defaultSourcePollTimeout } // check for dev mode, and set update buffer of the routes updateBuffer := defaultRoutingUpdateBuffer if o.DevMode { updateBuffer = 0 } // create a routing engine routing := routing.New(routing.Options{ registry, mo, o.SourcePollTimeout, dataClients, o.CustomPredicates, updateBuffer}) // create the proxy proxy := proxy.New(routing, o.ProxyOptions, o.PriorityRoutes...) // create the access log handler loggingHandler := logging.NewHandler(proxy) // start the http server log.Infof("proxy listener on %v", o.Address) return http.ListenAndServe(o.Address, loggingHandler) }