Skip to content

Commit

Permalink
chore: improve /healthz endpoint performance (#2014)
Browse files Browse the repository at this point in the history
* Add benchmark for /healthz endpoint

This benchmark will measure not only speed but also how much memory
each request to /healthz allocate. I'm adding the benchmark to have a
baseline to compare.

Signed-off-by: Leandro López (inkel) <[email protected]>

* Hardcode /healthz body into a variable

We know it will always be this value, there's no need to import and
call json.MarshalIndent.

Signed-off-by: Leandro López (inkel) <[email protected]>

* Initialize /healthz body only once

Signed-off-by: Leandro López (inkel) <[email protected]>
  • Loading branch information
inkel authored Jan 23, 2022
1 parent e06d181 commit ca28b57
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 12 deletions.
17 changes: 5 additions & 12 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ package server

import (
"context"
"encoding/json"
"flag"
"fmt"
"log"
Expand Down Expand Up @@ -899,20 +898,14 @@ func mkSubDir(parentDir string, subDir string) (string, error) {

// Healthz returns the health check response. It always returns a 200 currently.
func (s *Server) Healthz(w http.ResponseWriter, _ *http.Request) {
data, err := json.MarshalIndent(&struct {
Status string `json:"status"`
}{
Status: "ok",
}, "", " ")
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, "Error creating status json response: %s", err)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write(data) // nolint: errcheck
w.Write(healthzData) // nolint: errcheck
}

var healthzData = []byte(`{
"status": "ok"
}`)

// ParseAtlantisURL parses the user-passed atlantis URL to ensure it is valid
// and we can use it in our templates.
// It removes any trailing slashes from the path so we can concatenate it
Expand Down
19 changes: 19 additions & 0 deletions server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,25 @@ func TestHealthz(t *testing.T) {
}`, string(body))
}

type mockRW struct{}

var _ http.ResponseWriter = mockRW{}
var mh = http.Header{}

func (w mockRW) WriteHeader(int) {}
func (w mockRW) Write([]byte) (int, error) { return 0, nil }
func (w mockRW) Header() http.Header { return mh }

var w = mockRW{}
var s = &server.Server{}

func BenchmarkHealthz(b *testing.B) {
b.ReportAllocs()
for i := 0; i < b.N; i++ {
s.Healthz(w, nil)
}
}

func TestParseAtlantisURL(t *testing.T) {
cases := []struct {
In string
Expand Down

0 comments on commit ca28b57

Please sign in to comment.