mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-13 22:29:33 +01:00
110 lines
No EOL
3.4 KiB
Markdown
110 lines
No EOL
3.4 KiB
Markdown
toolbox
|
|
=======
|
|
|
|
Middleware toolbox provides health chcek, pprof, profile and statistic services for [Macaron](https://github.com/go-macaron/macaron).
|
|
|
|
[API Reference](https://gowalker.org/github.com/go-macaron/toolbox)
|
|
|
|
### Installation
|
|
|
|
go get github.com/go-macaron/toolbox
|
|
|
|
## Usage
|
|
|
|
```go
|
|
// main.go
|
|
import (
|
|
"gopkg.in/macaron.v1"
|
|
"github.com/go-macaron/toolbox"
|
|
)
|
|
|
|
func main() {
|
|
m := macaron.Classic()
|
|
m.Use(toolbox.Toolboxer(m))
|
|
m.Run()
|
|
}
|
|
```
|
|
|
|
Open your browser and visit `http://localhost:4000/debug` to see the effects.
|
|
|
|
## Options
|
|
|
|
`toolbox.Toolboxer` comes with a variety of configuration options:
|
|
|
|
```go
|
|
type dummyChecker struct {
|
|
}
|
|
|
|
func (dc *dummyChecker) Desc() string {
|
|
return "Dummy checker"
|
|
}
|
|
|
|
func (dc *dummyChecker) Check() error {
|
|
return nil
|
|
}
|
|
|
|
// ...
|
|
m.Use(toolbox.Toolboxer(m, toolbox.Options{
|
|
URLPrefix: "/debug", // URL prefix for toolbox dashboard.
|
|
HealthCheckURL: "/healthcheck", // URL for health check request.
|
|
HealthCheckers: []HealthChecker{
|
|
new(dummyChecker),
|
|
}, // Health checkers.
|
|
HealthCheckFuncs: []*toolbox.HealthCheckFuncDesc{
|
|
&toolbox.HealthCheckFuncDesc{
|
|
Desc: "Database connection",
|
|
Func: func() error { return "OK" },
|
|
},
|
|
}, // Health check functions.
|
|
PprofURLPrefix: "/debug/pprof/", // URL prefix of pprof.
|
|
ProfileURLPrefix: "/debug/profile/", // URL prefix of profile.
|
|
ProfilePath: "profile", // Path store profile files.
|
|
}))
|
|
// ...
|
|
```
|
|
|
|
## Route Statistic
|
|
|
|
Toolbox also comes with a route call statistic functionality:
|
|
|
|
```go
|
|
import (
|
|
"os"
|
|
"time"
|
|
//...
|
|
"github.com/go-macaron/toolbox"
|
|
)
|
|
|
|
func main() {
|
|
//...
|
|
m.Get("/", func(t toolbox.Toolbox) {
|
|
start := time.Now()
|
|
|
|
// Other operations.
|
|
|
|
t.AddStatistics("GET", "/", time.Since(start))
|
|
})
|
|
|
|
m.Get("/dump", func(t toolbox.Toolbox) {
|
|
t.GetMap(os.Stdout)
|
|
})
|
|
}
|
|
```
|
|
|
|
Output take from test:
|
|
|
|
```
|
|
+---------------------------------------------------+------------+------------------+------------------+------------------+------------------+------------------+
|
|
| Request URL | Method | Times | Total Used(s) | Max Used(μs) | Min Used(μs) | Avg Used(μs) |
|
|
+---------------------------------------------------+------------+------------------+------------------+------------------+------------------+------------------+
|
|
| /api/user | POST | 2 | 0.000122 | 120.000000 | 2.000000 | 61.000000 |
|
|
| /api/user | GET | 1 | 0.000013 | 13.000000 | 13.000000 | 13.000000 |
|
|
| /api/user | DELETE | 1 | 0.000001 | 1.400000 | 1.400000 | 1.400000 |
|
|
| /api/admin | POST | 1 | 0.000014 | 14.000000 | 14.000000 | 14.000000 |
|
|
| /api/user/unknwon | POST | 1 | 0.000012 | 12.000000 | 12.000000 | 12.000000 |
|
|
+---------------------------------------------------+------------+------------------+------------------+------------------+------------------+------------------+
|
|
```
|
|
|
|
## License
|
|
|
|
This project is under Apache v2 License. See the [LICENSE](LICENSE) file for the full license text. |