diff --git a/middleware/monitor/README.md b/middleware/monitor/README.md index baf4559b97..f209cf191f 100644 --- a/middleware/monitor/README.md +++ b/middleware/monitor/README.md @@ -36,6 +36,11 @@ func main() { ```go // Config defines the config for middleware. type Config struct { + // To disable serving HTML, you can make true this option. + // + // Optional. Default: false + APIOnly bool + // Next defines a function to skip this middleware when returned true. // // Optional. Default: nil @@ -47,6 +52,7 @@ type Config struct { ```go var ConfigDefault = Config{ + APIOnly: false, Next: nil, } -``` \ No newline at end of file +``` diff --git a/middleware/monitor/config.go b/middleware/monitor/config.go index 584284d95c..955323ef8a 100644 --- a/middleware/monitor/config.go +++ b/middleware/monitor/config.go @@ -4,6 +4,11 @@ import "github.com/gofiber/fiber/v2" // Config defines the config for middleware. type Config struct { + // Whether the service should expose only the monitoring API. + // + // Optional. Default: false + APIOnly bool + // Next defines a function to skip this middleware when returned true. // // Optional. Default: nil @@ -11,7 +16,8 @@ type Config struct { } var ConfigDefault = Config{ - Next: nil, + APIOnly: false, + Next: nil, } func configDefault(config ...Config) Config { @@ -28,5 +34,9 @@ func configDefault(config ...Config) Config { cfg.Next = ConfigDefault.Next } + if !cfg.APIOnly { + cfg.APIOnly = ConfigDefault.APIOnly + } + return cfg } diff --git a/middleware/monitor/monitor.go b/middleware/monitor/monitor.go index 71b601f840..6decf3c24e 100644 --- a/middleware/monitor/monitor.go +++ b/middleware/monitor/monitor.go @@ -81,7 +81,7 @@ func New(config ...Config) fiber.Handler { if c.Method() != fiber.MethodGet { return fiber.ErrMethodNotAllowed } - if c.Get(fiber.HeaderAccept) == fiber.MIMEApplicationJSON { + if c.Get(fiber.HeaderAccept) == fiber.MIMEApplicationJSON || cfg.APIOnly { mutex.Lock() data.PID.CPU = monitPidCpu.Load().(float64) data.PID.RAM = monitPidRam.Load().(uint64) diff --git a/middleware/monitor/monitor_test.go b/middleware/monitor/monitor_test.go index a49a7efc95..c59e302355 100644 --- a/middleware/monitor/monitor_test.go +++ b/middleware/monitor/monitor_test.go @@ -105,3 +105,26 @@ func Test_Monitor_Next(t *testing.T) { utils.AssertEqual(t, nil, err) utils.AssertEqual(t, 404, resp.StatusCode) } + +// go test -run Test_Monitor_APIOnly -race +func Test_Monitor_APIOnly(t *testing.T) { + //t.Parallel() + + app := fiber.New() + + app.Get("/", New(Config{ + APIOnly: true, + })) + + req := httptest.NewRequest(fiber.MethodGet, "/", nil) + req.Header.Set(fiber.HeaderAccept, fiber.MIMEApplicationJSON) + resp, err := app.Test(req) + utils.AssertEqual(t, nil, err) + utils.AssertEqual(t, 200, resp.StatusCode) + utils.AssertEqual(t, fiber.MIMEApplicationJSON, resp.Header.Get(fiber.HeaderContentType)) + + b, err := ioutil.ReadAll(resp.Body) + utils.AssertEqual(t, nil, err) + utils.AssertEqual(t, true, bytes.Contains(b, []byte("pid"))) + utils.AssertEqual(t, true, bytes.Contains(b, []byte("os"))) +}