Aleksey Savchuk
f0c43c8d80
All checks were successful
Vulncheck / Vulncheck (pull_request) Successful in 3m1s
Pre-commit hooks / Pre-commit (pull_request) Successful in 3m29s
Tests and linters / gopls check (pull_request) Successful in 3m50s
Tests and linters / Lint (pull_request) Successful in 4m35s
DCO action / DCO (pull_request) Successful in 5m12s
Tests and linters / Run gofumpt (pull_request) Successful in 5m33s
Build / Build Components (pull_request) Successful in 5m45s
Tests and linters / Tests with -race (pull_request) Successful in 6m37s
Tests and linters / Tests (pull_request) Successful in 7m17s
Tests and linters / Staticcheck (pull_request) Successful in 7m36s
Tests and linters / Run gofumpt (push) Successful in 1m22s
Tests and linters / Staticcheck (push) Successful in 3m19s
Tests and linters / Lint (push) Successful in 4m35s
Vulncheck / Vulncheck (push) Successful in 5m20s
Build / Build Components (push) Successful in 6m16s
Pre-commit hooks / Pre-commit (push) Successful in 6m37s
Tests and linters / Tests (push) Successful in 6m48s
Tests and linters / Tests with -race (push) Successful in 7m15s
Tests and linters / gopls check (push) Successful in 7m27s
Use `zap.Error` instead of `zap.String` for logging errors: change all expressions like `zap.String("error", err.Error())` or `zap.String("err", err.Error())` to `zap.Error(err)`. Leave similar expressions with other messages unchanged, for example, `zap.String("last_error", lastErr.Error())` or `zap.String("reason", ctx.Err().Error())`. This change was made by applying the following patch: ```diff @@ var err expression @@ -zap.String("error", err.Error()) +zap.Error(err) @@ var err expression @@ -zap.String("err", err.Error()) +zap.Error(err) ``` Signed-off-by: Aleksey Savchuk <a.savchuk@yadro.com>
68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"runtime"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
|
|
httputil "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/http"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type pprofComponent struct {
|
|
httpComponent
|
|
blockRate int
|
|
mutexRate int
|
|
}
|
|
|
|
const (
|
|
pprofBlockRateKey = "pprof.block_rate"
|
|
pprofMutexRateKey = "pprof.mutex_rate"
|
|
)
|
|
|
|
func newPprofComponent() *pprofComponent {
|
|
return &pprofComponent{
|
|
httpComponent: httpComponent{
|
|
name: "pprof",
|
|
handler: httputil.Handler(),
|
|
},
|
|
}
|
|
}
|
|
|
|
func (c *pprofComponent) init(ctx context.Context) {
|
|
c.httpComponent.init(ctx)
|
|
|
|
if c.enabled {
|
|
c.blockRate = cfg.GetInt(pprofBlockRateKey)
|
|
c.mutexRate = cfg.GetInt(pprofMutexRateKey)
|
|
runtime.SetBlockProfileRate(c.blockRate)
|
|
runtime.SetMutexProfileFraction(c.mutexRate)
|
|
} else {
|
|
c.blockRate = 0
|
|
c.mutexRate = 0
|
|
runtime.SetBlockProfileRate(0)
|
|
runtime.SetMutexProfileFraction(0)
|
|
}
|
|
}
|
|
|
|
func (c *pprofComponent) needReload() bool {
|
|
blockRate := cfg.GetInt(pprofBlockRateKey)
|
|
mutexRate := cfg.GetInt(pprofMutexRateKey)
|
|
return c.httpComponent.needReload() ||
|
|
c.enabled && (c.blockRate != blockRate || c.mutexRate != mutexRate)
|
|
}
|
|
|
|
func (c *pprofComponent) reload(ctx context.Context) {
|
|
log.Info(ctx, "reload "+c.name)
|
|
if c.needReload() {
|
|
log.Info(ctx, c.name+" config updated")
|
|
if err := c.shutdown(ctx); err != nil {
|
|
log.Debug(ctx, logs.FrostFSIRCouldNotShutdownHTTPServer,
|
|
zap.Error(err))
|
|
return
|
|
}
|
|
|
|
c.init(ctx)
|
|
c.start(ctx)
|
|
}
|
|
}
|