From 24636da80056d6044128f943ab45eb9506944142 Mon Sep 17 00:00:00 2001 From: bergquist Date: Thu, 27 Dec 2018 13:16:58 +0100 Subject: [PATCH] closes the body properly on successful webhooks this commit also adds a test docker container for receiving alerting web hook requests --- .../blocks/alert_webhook_listener/Dockerfile | 7 ++++++ .../docker-compose.yaml | 5 ++++ .../blocks/alert_webhook_listener/main.go | 24 +++++++++++++++++++ pkg/services/notifications/webhook.go | 6 ++++- 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 devenv/docker/blocks/alert_webhook_listener/Dockerfile create mode 100644 devenv/docker/blocks/alert_webhook_listener/docker-compose.yaml create mode 100644 devenv/docker/blocks/alert_webhook_listener/main.go diff --git a/devenv/docker/blocks/alert_webhook_listener/Dockerfile b/devenv/docker/blocks/alert_webhook_listener/Dockerfile new file mode 100644 index 00000000000..a6bb87f15f5 --- /dev/null +++ b/devenv/docker/blocks/alert_webhook_listener/Dockerfile @@ -0,0 +1,7 @@ + +FROM golang:latest +ADD main.go / +WORKDIR / +RUN go build -o main . +EXPOSE 3010 +ENTRYPOINT ["/main"] diff --git a/devenv/docker/blocks/alert_webhook_listener/docker-compose.yaml b/devenv/docker/blocks/alert_webhook_listener/docker-compose.yaml new file mode 100644 index 00000000000..3e6c5389f6c --- /dev/null +++ b/devenv/docker/blocks/alert_webhook_listener/docker-compose.yaml @@ -0,0 +1,5 @@ + alert_webhook_listener: + build: docker/blocks/alert_webhook_listener + network_mode: host + ports: + - "3010:3010" diff --git a/devenv/docker/blocks/alert_webhook_listener/main.go b/devenv/docker/blocks/alert_webhook_listener/main.go new file mode 100644 index 00000000000..355c903e9f6 --- /dev/null +++ b/devenv/docker/blocks/alert_webhook_listener/main.go @@ -0,0 +1,24 @@ +package main + +import ( + "fmt" + "io" + "io/ioutil" + "net/http" +) + +func hello(w http.ResponseWriter, r *http.Request) { + body, err := ioutil.ReadAll(r.Body) + if err != nil { + return + } + + line := fmt.Sprintf("webbhook: -> %s", string(body)) + fmt.Println(line) + io.WriteString(w, line) +} + +func main() { + http.HandleFunc("/", hello) + http.ListenAndServe(":3010", nil) +} diff --git a/pkg/services/notifications/webhook.go b/pkg/services/notifications/webhook.go index a236a1d1c4e..dbe441c915e 100644 --- a/pkg/services/notifications/webhook.go +++ b/pkg/services/notifications/webhook.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "fmt" + "io" "io/ioutil" "net" "net/http" @@ -69,11 +70,14 @@ func (ns *NotificationService) sendWebRequestSync(ctx context.Context, webhook * return err } + defer resp.Body.Close() + if resp.StatusCode/100 == 2 { + // flushing the body enables the transport to reuse the same connection + io.Copy(ioutil.Discard, resp.Body) return nil } - defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { return err