diff --git a/docs/middleware/healthcheck.md b/docs/middleware/healthcheck.md index 2837c550..41b19eba 100644 --- a/docs/middleware/healthcheck.md +++ b/docs/middleware/healthcheck.md @@ -27,7 +27,7 @@ Liveness, readiness and startup probes middleware for [Fiber](https://github.com ## Signatures ```go -func NewHealthChecker(config Config) fiber.Handler +func New(config Config) fiber.Handler ``` ## Examples @@ -41,38 +41,38 @@ import( ) ``` -After you initiate your [Fiber](https://github.com/gofiber/fiber) app, you can use the following possibilities: +After you initiate your [Fiber](https://github.com/gofiber/fiber) app, you can use the following options: ```go // Provide a minimal config for liveness check -app.Get(healthcheck.DefaultLivenessEndpoint, healthcheck.NewHealthChecker()) +app.Get(healthcheck.DefaultLivenessEndpoint, healthcheck.New()) // Provide a minimal config for readiness check -app.Get(healthcheck.DefaultReadinessEndpoint, healthcheck.NewHealthChecker()) +app.Get(healthcheck.DefaultReadinessEndpoint, healthcheck.New()) // Provide a minimal config for startup check -app.Get(healthcheck.DefaultStartupEndpoint, healthcheck.NewHealthChecker()) +app.Get(healthcheck.DefaultStartupEndpoint, healthcheck.New()) // Provide a minimal config for check with custom endpoint -app.Get("/live", healthcheck.NewHealthChecker()) +app.Get("/live", healthcheck.New()) // Or extend your config for customization -app.Get(healthcheck.DefaultLivenessEndpoint, healthcheck.NewHealthChecker(healthcheck.Config{ +app.Get(healthcheck.DefaultLivenessEndpoint, healthcheck.New(healthcheck.Config{ Probe: func(c fiber.Ctx) bool { return true }, })) // And it works the same for readiness, just change the route -app.Get(healthcheck.DefaultReadinessEndpoint, healthcheck.NewHealthChecker(healthcheck.Config{ +app.Get(healthcheck.DefaultReadinessEndpoint, healthcheck.New(healthcheck.Config{ Probe: func(c fiber.Ctx) bool { return true }, })) // And it works the same for startup, just change the route -app.Get(healthcheck.DefaultStartupEndpoint, healthcheck.NewHealthChecker(healthcheck.Config{ +app.Get(healthcheck.DefaultStartupEndpoint, healthcheck.New(healthcheck.Config{ Probe: func(c fiber.Ctx) bool { return true }, })) // With a custom route and custom probe -app.Get("/live", healthcheck.NewHealthChecker(healthcheck.Config{ +app.Get("/live", healthcheck.New(healthcheck.Config{ Probe: func(c fiber.Ctx) bool { return true }, @@ -81,7 +81,7 @@ app.Get("/live", healthcheck.NewHealthChecker(healthcheck.Config{ // It can also be used with app.All, although it will only respond to requests with the GET method // in case of calling the route with any method which isn't GET, the return will be 404 Not Found when app.All is used // and 405 Method Not Allowed when app.Get is used -app.All(healthcheck.DefaultReadinessEndpoint, healthcheck.NewHealthChecker(healthcheck.Config{ +app.All(healthcheck.DefaultReadinessEndpoint, healthcheck.New(healthcheck.Config{ Probe: func(c fiber.Ctx) bool { return true }, @@ -108,7 +108,7 @@ type Config struct { // initialization and readiness checks // // Optional. Default: func(c fiber.Ctx) bool { return true } - Probe HealthChecker + Probe func(fiber.Ctx) bool } ``` @@ -117,7 +117,7 @@ type Config struct { The default configuration used by this middleware is defined as follows: ```go -func defaultProbe(fiber.Ctx) bool { return true } +func defaultProbe(c fiber.Ctx) bool { return true } var ConfigDefault = Config{ Probe: defaultProbe, diff --git a/docs/whats_new.md b/docs/whats_new.md index bc569d3e..6fd7bb80 100644 --- a/docs/whats_new.md +++ b/docs/whats_new.md @@ -1564,25 +1564,25 @@ With the new version, each health check endpoint is configured separately, allow // after // Default liveness endpoint configuration -app.Get(healthcheck.DefaultLivenessEndpoint, healthcheck.NewHealthChecker(healthcheck.Config{ +app.Get(healthcheck.DefaultLivenessEndpoint, healthcheck.New(healthcheck.Config{ Probe: func(c fiber.Ctx) bool { return true }, })) // Default readiness endpoint configuration -app.Get(healthcheck.DefaultReadinessEndpoint, healthcheck.NewHealthChecker()) +app.Get(healthcheck.DefaultReadinessEndpoint, healthcheck.New()) // New default startup endpoint configuration // Default endpoint is /startupz -app.Get(healthcheck.DefaultStartupEndpoint, healthcheck.NewHealthChecker(healthcheck.Config{ +app.Get(healthcheck.DefaultStartupEndpoint, healthcheck.New(healthcheck.Config{ Probe: func(c fiber.Ctx) bool { return serviceA.Ready() && serviceB.Ready() && ... }, })) // Custom liveness endpoint configuration -app.Get("/live", healthcheck.NewHealthChecker()) +app.Get("/live", healthcheck.New()) ``` #### Monitor diff --git a/middleware/healthcheck/config.go b/middleware/healthcheck/config.go index eba6d537..332934a9 100644 --- a/middleware/healthcheck/config.go +++ b/middleware/healthcheck/config.go @@ -18,7 +18,7 @@ type Config struct { // the application is in a state where it can handle requests (e.g., the server is up and running). // // Optional. Default: func(c fiber.Ctx) bool { return true } - Probe HealthChecker + Probe func(fiber.Ctx) bool } const ( @@ -27,9 +27,9 @@ const ( DefaultStartupEndpoint = "/startupz" ) -func defaultProbe(fiber.Ctx) bool { return true } +func defaultProbe(c fiber.Ctx) bool { return true } -func defaultConfigV3(config ...Config) Config { +func defaultConfig(config ...Config) Config { if len(config) < 1 { return Config{ Probe: defaultProbe, diff --git a/middleware/healthcheck/healthcheck.go b/middleware/healthcheck/healthcheck.go index 51a16d70..de2079ae 100644 --- a/middleware/healthcheck/healthcheck.go +++ b/middleware/healthcheck/healthcheck.go @@ -4,11 +4,8 @@ import ( "github.com/gofiber/fiber/v3" ) -// HealthChecker defines a function to check liveness or readiness of the application -type HealthChecker func(fiber.Ctx) bool - -func NewHealthChecker(config ...Config) fiber.Handler { - cfg := defaultConfigV3(config...) +func New(config ...Config) fiber.Handler { + cfg := defaultConfig(config...) return func(c fiber.Ctx) error { // Don't execute middleware if Next returns true diff --git a/middleware/healthcheck/healthcheck_test.go b/middleware/healthcheck/healthcheck_test.go index 07efa3de..29b213a3 100644 --- a/middleware/healthcheck/healthcheck_test.go +++ b/middleware/healthcheck/healthcheck_test.go @@ -34,9 +34,9 @@ func Test_HealthCheck_Strict_Routing_Default(t *testing.T) { StrictRouting: true, }) - app.Get(DefaultLivenessEndpoint, NewHealthChecker()) - app.Get(DefaultReadinessEndpoint, NewHealthChecker()) - app.Get(DefaultStartupEndpoint, NewHealthChecker()) + app.Get(DefaultLivenessEndpoint, New()) + app.Get(DefaultReadinessEndpoint, New()) + app.Get(DefaultStartupEndpoint, New()) shouldGiveOK(t, app, "/readyz") shouldGiveOK(t, app, "/livez") @@ -53,9 +53,9 @@ func Test_HealthCheck_Default(t *testing.T) { t.Parallel() app := fiber.New() - app.Get(DefaultLivenessEndpoint, NewHealthChecker()) - app.Get(DefaultReadinessEndpoint, NewHealthChecker()) - app.Get(DefaultStartupEndpoint, NewHealthChecker()) + app.Get(DefaultLivenessEndpoint, New()) + app.Get(DefaultReadinessEndpoint, New()) + app.Get(DefaultStartupEndpoint, New()) shouldGiveOK(t, app, "/readyz") shouldGiveOK(t, app, "/livez") @@ -73,12 +73,12 @@ func Test_HealthCheck_Custom(t *testing.T) { app := fiber.New() c1 := make(chan struct{}, 1) - app.Get("/live", NewHealthChecker(Config{ + app.Get("/live", New(Config{ Probe: func(_ fiber.Ctx) bool { return true }, })) - app.Get("/ready", NewHealthChecker(Config{ + app.Get("/ready", New(Config{ Probe: func(_ fiber.Ctx) bool { select { case <-c1: @@ -88,7 +88,7 @@ func Test_HealthCheck_Custom(t *testing.T) { } }, })) - app.Get(DefaultStartupEndpoint, NewHealthChecker(Config{ + app.Get(DefaultStartupEndpoint, New(Config{ Probe: func(_ fiber.Ctx) bool { return false }, @@ -123,12 +123,12 @@ func Test_HealthCheck_Custom_Nested(t *testing.T) { app := fiber.New() c1 := make(chan struct{}, 1) - app.Get("/probe/live", NewHealthChecker(Config{ + app.Get("/probe/live", New(Config{ Probe: func(_ fiber.Ctx) bool { return true }, })) - app.Get("/probe/ready", NewHealthChecker(Config{ + app.Get("/probe/ready", New(Config{ Probe: func(_ fiber.Ctx) bool { select { case <-c1: @@ -164,7 +164,7 @@ func Test_HealthCheck_Next(t *testing.T) { app := fiber.New() - checker := NewHealthChecker(Config{ + checker := New(Config{ Next: func(_ fiber.Ctx) bool { return true }, @@ -184,9 +184,9 @@ func Test_HealthCheck_Next(t *testing.T) { func Benchmark_HealthCheck(b *testing.B) { app := fiber.New() - app.Get(DefaultLivenessEndpoint, NewHealthChecker()) - app.Get(DefaultReadinessEndpoint, NewHealthChecker()) - app.Get(DefaultStartupEndpoint, NewHealthChecker()) + app.Get(DefaultLivenessEndpoint, New()) + app.Get(DefaultReadinessEndpoint, New()) + app.Get(DefaultStartupEndpoint, New()) h := app.Handler() fctx := &fasthttp.RequestCtx{} @@ -206,9 +206,9 @@ func Benchmark_HealthCheck(b *testing.B) { func Benchmark_HealthCheck_Parallel(b *testing.B) { app := fiber.New() - app.Get(DefaultLivenessEndpoint, NewHealthChecker()) - app.Get(DefaultReadinessEndpoint, NewHealthChecker()) - app.Get(DefaultStartupEndpoint, NewHealthChecker()) + app.Get(DefaultLivenessEndpoint, New()) + app.Get(DefaultReadinessEndpoint, New()) + app.Get(DefaultStartupEndpoint, New()) h := app.Handler()