|
|
|
@ -22,6 +22,12 @@ const (
|
|
|
|
|
watchdogMsg systemdNotifyMsg = "WATCHDOG=1"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// LifecyclePProfLabel is a label marking manager lifecycle phase
|
|
|
|
|
// Making it compliant with prometheus key regex https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels
|
|
|
|
|
// would enable someone interested to be able to to continuously gather profiles into pyroscope.
|
|
|
|
|
// Other labels for pprof (in "modules/process" package) should also follow this rule.
|
|
|
|
|
const LifecyclePProfLabel = "graceful_lifecycle"
|
|
|
|
|
|
|
|
|
|
func statusMsg(msg string) systemdNotifyMsg {
|
|
|
|
|
return systemdNotifyMsg("STATUS=" + msg)
|
|
|
|
|
}
|
|
|
|
@ -65,10 +71,10 @@ func (g *Manager) prepare(ctx context.Context) {
|
|
|
|
|
g.hammerCtx, g.hammerCtxCancel = context.WithCancel(ctx)
|
|
|
|
|
g.managerCtx, g.managerCtxCancel = context.WithCancel(ctx)
|
|
|
|
|
|
|
|
|
|
g.terminateCtx = pprof.WithLabels(g.terminateCtx, pprof.Labels("graceful-lifecycle", "with-terminate"))
|
|
|
|
|
g.shutdownCtx = pprof.WithLabels(g.shutdownCtx, pprof.Labels("graceful-lifecycle", "with-shutdown"))
|
|
|
|
|
g.hammerCtx = pprof.WithLabels(g.hammerCtx, pprof.Labels("graceful-lifecycle", "with-hammer"))
|
|
|
|
|
g.managerCtx = pprof.WithLabels(g.managerCtx, pprof.Labels("graceful-lifecycle", "with-manager"))
|
|
|
|
|
g.terminateCtx = pprof.WithLabels(g.terminateCtx, pprof.Labels(LifecyclePProfLabel, "with-terminate"))
|
|
|
|
|
g.shutdownCtx = pprof.WithLabels(g.shutdownCtx, pprof.Labels(LifecyclePProfLabel, "with-shutdown"))
|
|
|
|
|
g.hammerCtx = pprof.WithLabels(g.hammerCtx, pprof.Labels(LifecyclePProfLabel, "with-hammer"))
|
|
|
|
|
g.managerCtx = pprof.WithLabels(g.managerCtx, pprof.Labels(LifecyclePProfLabel, "with-manager"))
|
|
|
|
|
|
|
|
|
|
if !g.setStateTransition(stateInit, stateRunning) {
|
|
|
|
|
panic("invalid graceful manager state: transition from init to running failed")
|
|
|
|
|