Last active
July 17, 2017 22:37
-
-
Save redbo/e0a397882a3e61a19f8a02d5ceb76449 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/proxyserver/main.go b/proxyserver/main.go | |
index cb3d7cb..0b921cc 100644 | |
--- a/proxyserver/main.go | |
+++ b/proxyserver/main.go | |
@@ -44,6 +44,7 @@ type ProxyServer struct { | |
accountAutoCreate bool | |
proxyDirectClient *client.ProxyDirectClient | |
metricsCloser io.Closer | |
+ debugResponses bool | |
} | |
func (server *ProxyServer) Type() string { | |
@@ -145,7 +146,7 @@ func (server *ProxyServer) GetHandler(config conf.Config, metricsPrefix string) | |
{middleware.NewXlo, "filter:slo"}, | |
} | |
} | |
- pipeline := alice.New(middleware.NewContext(server.mc, server.logger, server.proxyDirectClient)) | |
+ pipeline := alice.New(middleware.NewContext(server.debugResponses, server.mc, server.logger, server.proxyDirectClient)) | |
for _, m := range middlewares { | |
mid, err := m.construct(config.GetSection(m.section), metricsScope) | |
if err != nil { | |
@@ -172,6 +173,7 @@ func GetServer(serverconf conf.Config, flags *flag.FlagSet) (string, int, srv.Se | |
server.logLevel = zap.NewAtomicLevel() | |
server.logLevel.UnmarshalText([]byte(strings.ToLower(logLevelString))) | |
server.accountAutoCreate = serverconf.GetBool("app:proxy-server", "account_autocreate", false) | |
+ server.debugResponses = serverconf.GetBool("debug", "debug_x_source_code", false) | |
if server.logger, err = srv.SetupLogger("proxy-server", &server.logLevel, flags); err != nil { | |
return "", 0, nil, nil, fmt.Errorf("Error setting up logger: %v", err) | |
} | |
diff --git a/proxyserver/middleware/context.go b/proxyserver/middleware/context.go | |
index ba67812..291ba55 100644 | |
--- a/proxyserver/middleware/context.go | |
+++ b/proxyserver/middleware/context.go | |
@@ -21,6 +21,7 @@ import ( | |
"fmt" | |
"io" | |
"net/http" | |
+ "runtime" | |
"strconv" | |
"strings" | |
"sync" | |
@@ -73,6 +74,7 @@ type ProxyContextMiddleware struct { | |
log srv.LowLevelLogger | |
Cache ring.MemcacheRing | |
proxyDirectClient *client.ProxyDirectClient | |
+ debugResponses bool | |
} | |
type ProxyContext struct { | |
@@ -327,6 +329,13 @@ func (m *ProxyContextMiddleware) ServeHTTP(writer http.ResponseWriter, request * | |
w.Header().Set("Www-Authenticate", "Swift realm=\"unknown\"") | |
} | |
} | |
+ | |
+ if m.debugResponses { | |
+ buf := make([]byte, 1024) | |
+ runtime.Stack(buf, false) | |
+ w.Header().Set("X-Source-Code", string(buf)) | |
+ } | |
+ | |
ctx.responseSent = true | |
ctx.status = status | |
return status | |
@@ -335,13 +344,14 @@ func (m *ProxyContextMiddleware) ServeHTTP(writer http.ResponseWriter, request * | |
m.next.ServeHTTP(newWriter, request) | |
} | |
-func NewContext(mc ring.MemcacheRing, log srv.LowLevelLogger, proxyDirectClient *client.ProxyDirectClient) func(http.Handler) http.Handler { | |
+func NewContext(debug bool, mc ring.MemcacheRing, log srv.LowLevelLogger, proxyDirectClient *client.ProxyDirectClient) func(http.Handler) http.Handler { | |
return func(next http.Handler) http.Handler { | |
return &ProxyContextMiddleware{ | |
Cache: mc, | |
log: log, | |
next: next, | |
proxyDirectClient: proxyDirectClient, | |
+ debugResponses: debug, | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment