diff --git a/Dockerfile b/Dockerfile index bcefa00..703ef8c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,6 +14,7 @@ ENV GOPROXY_DEBUG 0 ENV GOPROXY_REDIRECT_HTTP 1 EXPOSE 80 +EXPOSE 8080 EXPOSE 443 EXPOSE 8443 diff --git a/bin/go-proxy b/bin/go-proxy index bb48d19..e34c4b7 100755 Binary files a/bin/go-proxy and b/bin/go-proxy differ diff --git a/src/go-proxy/constants.go b/src/go-proxy/constants.go index 9000863..3c36de0 100644 --- a/src/go-proxy/constants.go +++ b/src/go-proxy/constants.go @@ -69,30 +69,35 @@ const ( ) // TODO: default + per proxy -var transport = &http.Transport{ - Proxy: http.ProxyFromEnvironment, - DialContext: (&net.Dialer{ - Timeout: 60 * time.Second, - KeepAlive: 60 * time.Second, - }).DialContext, - MaxIdleConns: 1000, - MaxIdleConnsPerHost: 1000, -} +var ( + transport = &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 60 * time.Second, + KeepAlive: 60 * time.Second, + }).DialContext, + MaxIdleConns: 1000, + MaxIdleConnsPerHost: 1000, + } -var transportNoTLS = func() *http.Transport { - var clone = transport.Clone() - clone.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} - return clone -}() + transportNoTLS = func() *http.Transport { + var clone = transport.Clone() + clone.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} + return clone + }() +) + +const wildcardLabelPrefix = "proxy.*." const clientUrlFromEnv = "FROM_ENV" -const configPath = "config.yml" +const ( + configPath = "config.yml" + templatePath = "templates/panel.html" +) const StreamStopListenTimeout = 1 * time.Second -const templateFile = "templates/panel.html" - const udpBufferSize = 1500 var logLevel = func() logrus.Level { diff --git a/src/go-proxy/docker_provider.go b/src/go-proxy/docker_provider.go index 5f8a80e..c2b7249 100755 --- a/src/go-proxy/docker_provider.go +++ b/src/go-proxy/docker_provider.go @@ -51,7 +51,7 @@ func (p *Provider) getContainerProxyConfigs(container types.Container, clientIP if err != nil { l.Error(err) } - err = p.setConfigField(&config, label, value, wildcardPrefix) + err = p.setConfigField(&config, label, value, wildcardLabelPrefix) if err != nil { l.Error(err) } @@ -196,5 +196,3 @@ func selectPortInternal(c types.Container, getPort func(types.Port) uint16) uint } return 0 } - -const wildcardPrefix = "proxy.*." diff --git a/src/go-proxy/http_lbpool.go b/src/go-proxy/http_lbpool.go index 332be8f..352a20a 100755 --- a/src/go-proxy/http_lbpool.go +++ b/src/go-proxy/http_lbpool.go @@ -20,3 +20,10 @@ func (p *httpLoadBalancePool) Add(route *HTTPRoute) { func (p *httpLoadBalancePool) Iterator() []*HTTPRoute { return p.pool } + +func (p *httpLoadBalancePool) Pick() *HTTPRoute { + // round-robin + index := int(p.curentIndex.Load()) + defer p.curentIndex.Add(1) + return p.pool[index%len(p.pool)] +} \ No newline at end of file diff --git a/src/go-proxy/http_route.go b/src/go-proxy/http_route.go index be71dc2..f6445d3 100755 --- a/src/go-proxy/http_route.go +++ b/src/go-proxy/http_route.go @@ -68,7 +68,7 @@ func NewHTTPRoute(config *ProxyConfig) (*HTTPRoute, error) { route.Proxy.ModifyResponse = func(r *http.Response) error { contentType, ok := r.Header["Content-Type"] if !ok || len(contentType) == 0 { - route.l.Debug("unknown content type for", r.Request.URL.String()) + route.l.Debug("unknown content type for ", r.Request.URL.String()) return nil } // disable cache @@ -110,13 +110,6 @@ func NewHTTPRoute(config *ProxyConfig) (*HTTPRoute, error) { return route, nil } -func (p *httpLoadBalancePool) Pick() *HTTPRoute { - // round-robin - index := int(p.curentIndex.Load()) - defer p.curentIndex.Add(1) - return p.pool[index%len(p.pool)] -} - func (r *HTTPRoute) RemoveFromRoutes() { httpRoutes.Delete(r.Alias) } diff --git a/src/go-proxy/main.go b/src/go-proxy/main.go index 4b99a10..6476d26 100755 --- a/src/go-proxy/main.go +++ b/src/go-proxy/main.go @@ -1,7 +1,6 @@ package main import ( - "flag" "net/http" "os" "os/signal" @@ -14,7 +13,7 @@ import ( func main() { var err error - flag.Parse() + // flag.Parse() runtime.GOMAXPROCS(runtime.NumCPU()) log.SetFormatter(&log.TextFormatter{ @@ -46,7 +45,7 @@ func main() { }() go func() { log.Infof("starting http panel on port 8080") - err := http.ListenAndServe(":8080", http.HandlerFunc(panelHandler)) + err = http.ListenAndServe(":8080", http.HandlerFunc(panelHandler)) if err != nil { log.Warning("HTTP panel error: ", err) } @@ -75,6 +74,7 @@ func main() { signal.Notify(sig, syscall.SIGHUP) <-sig + cfg.StopWatching() cfg.StopProviders() close(fsWatcherStop) close(dockerWatcherStop) diff --git a/src/go-proxy/panel.go b/src/go-proxy/panel.go index f4205ab..3fb14b1 100755 --- a/src/go-proxy/panel.go +++ b/src/go-proxy/panel.go @@ -42,7 +42,7 @@ func panelIndex(w http.ResponseWriter, r *http.Request) { return } - tmpl, err := template.ParseFiles(templateFile) + tmpl, err := template.ParseFiles(templatePath) if err != nil { palog.Error(err) diff --git a/src/go-proxy/stream_route.go b/src/go-proxy/stream_route.go index 618f562..6390c31 100755 --- a/src/go-proxy/stream_route.go +++ b/src/go-proxy/stream_route.go @@ -136,9 +136,9 @@ func (route *StreamRouteBase) SetupListen() { return } route.ListeningPort = freePort - route.l.Info("Assigned free port", route.ListeningPort) + route.l.Info("Assigned free port ", route.ListeningPort) } - route.l.Info("Listening on", route.ListeningUrl()) + route.l.Info("Listening on ", route.ListeningUrl()) } func (route *StreamRouteBase) RemoveFromRoutes() { diff --git a/src/go-proxy/watcher.go b/src/go-proxy/watcher.go index 65e5386..e5fa201 100644 --- a/src/go-proxy/watcher.go +++ b/src/go-proxy/watcher.go @@ -135,6 +135,8 @@ func watchFiles() { defer fsWatcher.Close() for { select { + case <-fsWatcherStop: + return case event, ok := <-fsWatcher.Events: if !ok { wlog.Error("file watcher channel closed") @@ -174,7 +176,7 @@ func (w *dockerWatcher) watch() { case <-w.stop: return case msg := <-msgChan: - w.l.Info("container", msg.Actor.Attributes["name"], msg.Action) + w.l.Infof("container %s %s", msg.Actor.Attributes["name"], msg.Action) w.onChange() case err := <-errChan: w.l.Errorf("%s, retrying in 1s", err)