Log fx through slog, snake_case health check keys (closes #27)
check / check (push) Successful in 2m0s
check / check (push) Successful in 2m0s
fx wrote its own steps of starting and stopping as plain text to stderr. It now logs them with its own slog event logger through the backend's logger, so off a terminal every line from start to stop is JSON. The backend logs its name, version and architecture once at start, through the logger's Identify, which nothing called before. The health check's uptime keys are now uptime_seconds and uptime_human, and its type and method take the names GO_HTTP_SERVER_CONVENTIONS.md gives, HealthcheckResponse and Healthcheck(). Its path, content type, status and code are unchanged. Model: opus-5-5
This commit is contained in:
@@ -50,8 +50,8 @@ func newStartedHandlers(t *testing.T, g *globals.Globals) *handlers.Handlers {
|
||||
|
||||
// TestHandleHealthCheck checks the health check's answer: 200, a JSON
|
||||
// content type, and a JSON object with exactly the fields of
|
||||
// healthcheck.Response, carrying this server's name and version and
|
||||
// an uptime counted from its start.
|
||||
// healthcheck.HealthcheckResponse, carrying this server's name and
|
||||
// version and an uptime counted from its start.
|
||||
func TestHandleHealthCheck(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
@@ -82,7 +82,7 @@ func TestHandleHealthCheck(t *testing.T) {
|
||||
}
|
||||
|
||||
fields := []string{
|
||||
"appname", "now", "status", "uptimeHuman", "uptimeSeconds", "version",
|
||||
"appname", "now", "status", "uptime_human", "uptime_seconds", "version",
|
||||
}
|
||||
if got := slices.Sorted(maps.Keys(body)); !slices.Equal(got, fields) {
|
||||
t.Fatalf("fields = %v, want %v", got, fields)
|
||||
@@ -104,17 +104,17 @@ func TestHandleHealthCheck(t *testing.T) {
|
||||
}
|
||||
|
||||
// Started just now, so the uptime is well under a minute.
|
||||
human, _ := body["uptimeHuman"].(string)
|
||||
human, _ := body["uptime_human"].(string)
|
||||
|
||||
uptime, err := time.ParseDuration(human)
|
||||
if err != nil || uptime > time.Minute {
|
||||
t.Errorf("uptimeHuman = %q, want a duration under a minute (%v)",
|
||||
t.Errorf("uptime_human = %q, want a duration under a minute (%v)",
|
||||
human, err)
|
||||
}
|
||||
|
||||
seconds, ok := body["uptimeSeconds"].(float64)
|
||||
seconds, ok := body["uptime_seconds"].(float64)
|
||||
if !ok || seconds < 0 || seconds > time.Minute.Seconds() {
|
||||
t.Errorf("uptimeSeconds = %v, want a number of seconds under a minute",
|
||||
body["uptimeSeconds"])
|
||||
t.Errorf("uptime_seconds = %v, want a number of seconds under a minute",
|
||||
body["uptime_seconds"])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user