1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-21 23:12:56 +00:00

Add next support for Monitor middleware. (#1527)

This commit is contained in:
M. Efe Çetin 2021-09-13 09:51:44 +03:00 committed by GitHub
parent 7a53521da8
commit 76b0d216c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 79 additions and 1 deletions

View File

@ -30,3 +30,23 @@ func main() {
log.Fatal(app.Listen(":3000"))
}
```
## Config
```go
// Config defines the config for middleware.
type Config struct {
// Next defines a function to skip this middleware when returned true.
//
// Optional. Default: nil
Next func(c *fiber.Ctx) bool
}
```
## Default Config
```go
var ConfigDefault = Config{
Next: nil,
}
```

View File

@ -0,0 +1,32 @@
package monitor
import "github.com/gofiber/fiber/v2"
// Config defines the config for middleware.
type Config struct {
// Next defines a function to skip this middleware when returned true.
//
// Optional. Default: nil
Next func(c *fiber.Ctx) bool
}
var ConfigDefault = Config{
Next: nil,
}
func configDefault(config ...Config) Config {
// Return default config if nothing provided
if len(config) < 1 {
return ConfigDefault
}
// Override default config
cfg := config[0]
// Set default values
if cfg.Next == nil {
cfg.Next = ConfigDefault.Next
}
return cfg
}

View File

@ -48,7 +48,10 @@ var (
)
// New creates a new middleware handler
func New() fiber.Handler {
func New(config ...Config) fiber.Handler {
// Set default config
cfg := configDefault(config...)
// Start routine to update statistics
once.Do(func() {
p, _ := process.NewProcess(int32(os.Getpid()))
@ -66,6 +69,11 @@ func New() fiber.Handler {
// Return new handler
return func(c *fiber.Ctx) error {
// Don't execute middleware if Next returns true
if cfg.Next != nil && cfg.Next(c) {
return c.Next()
}
if c.Method() != fiber.MethodGet {
return fiber.ErrMethodNotAllowed
}
@ -87,6 +95,7 @@ func New() fiber.Handler {
}
}
func updateStatistics(p *process.Process) {
pidCpu, _ := p.CPUPercent()
monitPidCpu.Store(pidCpu / 10)

View File

@ -88,3 +88,20 @@ func Benchmark_Monitor(b *testing.B) {
fiber.MIMEApplicationJSON,
string(fctx.Response.Header.Peek(fiber.HeaderContentType)))
}
// go test -run Test_Monitor_Next
func Test_Monitor_Next(t *testing.T) {
t.Parallel()
app := fiber.New()
app.Use("/", New(Config{
Next: func(_ *fiber.Ctx) bool {
return true
},
}))
resp, err := app.Test(httptest.NewRequest(fiber.MethodPost, "/", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, 404, resp.StatusCode)
}