mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-08-02 10:48:44 +00:00
chore: improve /healthz endpoint performance (#2014)
* 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) <inkel.ar@gmail.com> * 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) <inkel.ar@gmail.com> * Initialize /healthz body only once Signed-off-by: Leandro López (inkel) <inkel.ar@gmail.com>
This commit is contained in:
@@ -17,7 +17,6 @@ package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user