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() { c.httpComponent.init() 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() { log.Info(context.Background(), "reload "+c.name) if c.needReload() { log.Info(context.Background(), c.name+" config updated") if err := c.shutdown(); err != nil { log.Debug(context.Background(), logs.FrostFSIRCouldNotShutdownHTTPServer, zap.String("error", err.Error())) return } c.init() c.start() } }