Skip to content

Commit 939690c

Browse files
committed
feat: add health check
1 parent 0a11341 commit 939690c

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

main.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ func NewSegmentReverseProxy(cdn *url.URL, trackingAPI *url.URL, urlPrefix string
7070
return &httputil.ReverseProxy{Director: director}
7171
}
7272

73+
func healthHandler(w http.ResponseWriter, r *http.Request) {
74+
w.WriteHeader(http.StatusOK)
75+
w.Write([]byte("ready"))
76+
}
77+
7378
var port = flag.String("port", "8080", "bind address")
7479
var debug = flag.Bool("debug", false, "debug mode")
7580
var urlPrefix = flag.String("url-prefix", "/", "URL prefix to strip from requests (can also use URL_PREFIX env var)")
@@ -89,11 +94,16 @@ func main() {
8994
if urlPrefixEnv != "" && *urlPrefix == "/" {
9095
*urlPrefix = urlPrefixEnv
9196
}
97+
98+
mux := http.NewServeMux()
99+
mux.HandleFunc("/_health", healthHandler)
100+
92101
proxy := NewSegmentReverseProxy(cdnURL, trackingAPIURL, *urlPrefix)
93102
if *debug {
94103
proxy = handlers.LoggingHandler(os.Stdout, proxy)
95104
log.Printf("serving proxy at port %v with prefix %s\n", *port, *urlPrefix)
96105
}
97106

98-
log.Fatal(http.ListenAndServe(":"+*port, proxy))
107+
mux.Handle("/", proxy)
108+
log.Fatal(http.ListenAndServe(":"+*port, mux))
99109
}

main_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,27 @@ func TestSegmentReverseProxy(t *testing.T) {
8181
}
8282
}
8383

84+
func TestHealthEndpoint(t *testing.T) {
85+
mux := http.NewServeMux()
86+
mux.HandleFunc("/_health", healthHandler)
87+
server := httptest.NewServer(mux)
88+
defer server.Close()
89+
resp, err := http.Get(server.URL + "/_health")
90+
if err != nil {
91+
t.Fatalf("Failed to GET /_health: %v", err)
92+
}
93+
defer resp.Body.Close()
94+
if resp.StatusCode != http.StatusOK {
95+
t.Errorf("Expected status 200, got %d", resp.StatusCode)
96+
}
97+
buf := make([]byte, 16)
98+
n, _ := resp.Body.Read(buf)
99+
body := string(buf[:n])
100+
if body != "ready" {
101+
t.Errorf("Expected body 'ready', got %q", body)
102+
}
103+
}
104+
84105
func mustParseUrl(raw string) *url.URL {
85106
u, err := url.Parse(raw)
86107
if err != nil {

0 commit comments

Comments
 (0)