46 lines
942 B
Go
46 lines
942 B
Go
package process
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
)
|
|
|
|
type ProcessContext struct {
|
|
wg *sync.WaitGroup // used to wait for components to shutdown
|
|
ctx context.Context // cancelled when Stop is called
|
|
shutdown context.CancelFunc // shut down Dendrite
|
|
}
|
|
|
|
func NewProcessContext() *ProcessContext {
|
|
ctx, shutdown := context.WithCancel(context.Background())
|
|
return &ProcessContext{
|
|
ctx: ctx,
|
|
shutdown: shutdown,
|
|
wg: &sync.WaitGroup{},
|
|
}
|
|
}
|
|
|
|
func (b *ProcessContext) Context() context.Context {
|
|
return context.WithValue(b.ctx, "scope", "process") // nolint:staticcheck
|
|
}
|
|
|
|
func (b *ProcessContext) ComponentStarted() {
|
|
b.wg.Add(1)
|
|
}
|
|
|
|
func (b *ProcessContext) ComponentFinished() {
|
|
b.wg.Done()
|
|
}
|
|
|
|
func (b *ProcessContext) ShutdownDendrite() {
|
|
b.shutdown()
|
|
}
|
|
|
|
func (b *ProcessContext) WaitForShutdown() <-chan struct{} {
|
|
return b.ctx.Done()
|
|
}
|
|
|
|
func (b *ProcessContext) WaitForComponentsToFinish() {
|
|
b.wg.Wait()
|
|
}
|