agent: limit HTTP check output to 4k
This commit is contained in:
parent
79153c3014
commit
9e82074f49
|
@ -2,7 +2,7 @@ package agent
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
|
@ -423,13 +423,14 @@ func (c *CheckHTTP) check() {
|
|||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Format the response body
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
// Read the response into a circular buffer to limit the size
|
||||
output, _ := circbuf.NewBuffer(CheckBufSize)
|
||||
if _, err := io.Copy(output, resp.Body); err != nil {
|
||||
c.Logger.Printf("[WARN] agent: check '%v': Get error while reading body: %s", c.CheckID, err)
|
||||
body = []byte{}
|
||||
}
|
||||
result := fmt.Sprintf("HTTP GET %s: %s Output: %s", c.HTTP, resp.Status, body)
|
||||
|
||||
// Format the response body
|
||||
result := fmt.Sprintf("HTTP GET %s: %s Output: %s", c.HTTP, resp.Status, output.String())
|
||||
|
||||
if resp.StatusCode >= 200 && resp.StatusCode <= 299 {
|
||||
// PASSING (2xx)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package agent
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
|
@ -186,7 +187,10 @@ func TestCheckTTL(t *testing.T) {
|
|||
func mockHTTPServer(responseCode int) *httptest.Server {
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
// Body larger than 4k limit
|
||||
body := bytes.Repeat([]byte{'a'}, 2*CheckBufSize)
|
||||
w.WriteHeader(responseCode)
|
||||
w.Write(body)
|
||||
return
|
||||
})
|
||||
|
||||
|
@ -219,6 +223,11 @@ func expectHTTPStatus(t *testing.T, url string, status string) {
|
|||
if mock.state["foo"] != status {
|
||||
t.Fatalf("should be %v %v", status, mock.state)
|
||||
}
|
||||
|
||||
// Allow slightly more data than CheckBufSize, for the header
|
||||
if n := len(mock.output["foo"]); n > (CheckBufSize + 256) {
|
||||
t.Fatalf("output too long: %d (%d-byte limit)", n, CheckBufSize)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckHTTPCritical(t *testing.T) {
|
||||
|
|
Loading…
Reference in a new issue