Skip to content

Instantly share code, notes, and snippets.

@redbo
Last active July 17, 2017 22:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save redbo/e0a397882a3e61a19f8a02d5ceb76449 to your computer and use it in GitHub Desktop.
Save redbo/e0a397882a3e61a19f8a02d5ceb76449 to your computer and use it in GitHub Desktop.
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