Allow logs to be viewed more than once
authorBrian Brazil <brian.brazil@robustperception.io>
Wed, 20 Sep 2017 12:47:22 +0000 (13:47 +0100)
committerBrian Brazil <brian.brazil@robustperception.io>
Wed, 20 Sep 2017 13:35:54 +0000 (14:35 +0100)
history.go
main.go
main_test.go

index 55606901927a7b58c3d1dffcd4ea1905fd5f18ba..c39de0b3556457996c6b85fa0f71354cdf7d879a 100644 (file)
@@ -14,7 +14,6 @@
 package main
 
 import (
-       "bytes"
        "sync"
 )
 
@@ -22,7 +21,7 @@ type result struct {
        id          int64
        moduleName  string
        target      string
-       debugOutput *bytes.Buffer
+       debugOutput string
        success     bool
 }
 
@@ -33,7 +32,7 @@ type resultHistory struct {
 }
 
 // Add a result to the history.
-func (rh *resultHistory) Add(moduleName, target string, debugOutput *bytes.Buffer, success bool) {
+func (rh *resultHistory) Add(moduleName, target, debugOutput string, success bool) {
        rh.mu.Lock()
        defer rh.mu.Unlock()
 
diff --git a/main.go b/main.go
index f98c7c1728e722bc8fe9dc81193bb2783f6f5660..80fbc112b16e610c2adb1e5f5efd239e129cdbed 100644 (file)
--- a/main.go
+++ b/main.go
@@ -133,7 +133,7 @@ func probeHandler(w http.ResponseWriter, r *http.Request, c *config.Config, logg
 
        if r.URL.Query().Get("debug") == "true" {
                w.Header().Set("Content-Type", "text/plain")
-               debugOutput.WriteTo(w)
+               w.Write([]byte(debugOutput))
                return
        }
 
@@ -174,7 +174,7 @@ func (sl scrapeLogger) Log(keyvals ...interface{}) error {
 }
 
 // Returns plaintext debug output for a probe.
-func DebugOutput(module *config.Module, logBuffer *bytes.Buffer, registry *prometheus.Registry) *bytes.Buffer {
+func DebugOutput(module *config.Module, logBuffer *bytes.Buffer, registry *prometheus.Registry) string {
        buf := &bytes.Buffer{}
        fmt.Fprintf(buf, "Logs for the probe:\n")
        logBuffer.WriteTo(buf)
@@ -193,7 +193,7 @@ func DebugOutput(module *config.Module, logBuffer *bytes.Buffer, registry *prome
        }
        buf.Write(c)
 
-       return buf
+       return buf.String()
 }
 
 func init() {
@@ -278,7 +278,7 @@ func main() {
 
                results := rh.List()
 
-               for i := len(results) - 1; i > 0; i-- {
+               for i := len(results) - 1; i >= 0; i-- {
                        r := results[i]
                        success := "Success"
                        if !r.success {
@@ -304,7 +304,7 @@ func main() {
                        return
                }
                w.Header().Set("Content-Type", "text/plain")
-               result.debugOutput.WriteTo(w)
+               w.Write([]byte(result.debugOutput))
        })
 
        http.HandleFunc("/config", func(w http.ResponseWriter, r *http.Request) {
index 7bd66e6e34c8963e1fae5dc8e9aca6d55b0d43ea..05ac44da8ce04fa7d2e3ca24c49eaf263ff4cf4d 100644 (file)
@@ -80,9 +80,8 @@ func TestPrometheusConfigSecretsHidden(t *testing.T) {
 
 func TestDebugOutputSecretsHidden(t *testing.T) {
        module := c.Modules["http_2xx"]
-       buf := DebugOutput(&module, &bytes.Buffer{}, prometheus.NewRegistry())
+       out := DebugOutput(&module, &bytes.Buffer{}, prometheus.NewRegistry())
 
-       out := buf.String()
        if strings.Contains(out, "mysecret") {
                t.Errorf("Secret exposed in debug output: %v", out)
        }