github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/control/controlstatus/context.go (about) 1 package controlstatus 2 3 import ( 4 "context" 5 6 "github.com/turbot/steampipe/pkg/contexthelpers" 7 ) 8 9 var ( 10 contextKeyControlHook = contexthelpers.ContextKey("control_hook") 11 ) 12 13 func AddControlHooksToContext(ctx context.Context, statusHooks ControlHooks) context.Context { 14 // if the context already contains ControlHooks, do nothing 15 // this may happen when executing a dashboard snapshot - 16 if _, ok := ctx.Value(contextKeyControlHook).(ControlHooks); ok { 17 return ctx 18 } 19 20 return context.WithValue(ctx, contextKeyControlHook, statusHooks) 21 } 22 23 func ControlHooksFromContext(ctx context.Context) ControlHooks { 24 if ctx == nil { 25 return NullHooks 26 } 27 if val, ok := ctx.Value(contextKeyControlHook).(ControlHooks); ok { 28 return val 29 } 30 // no status hook in context - return null status hook 31 return NullHooks 32 } 33 34 func OnStart(ctx context.Context, p *ControlProgress) { 35 ControlHooksFromContext(ctx).OnStart(ctx, p) 36 } 37 38 func OnControlStart(ctx context.Context, controlRun ControlRunStatusProvider, p *ControlProgress) { 39 ControlHooksFromContext(ctx).OnControlStart(ctx, controlRun, p) 40 } 41 42 func OnControlComplete(ctx context.Context, controlRun ControlRunStatusProvider, p *ControlProgress) { 43 ControlHooksFromContext(ctx).OnControlComplete(ctx, controlRun, p) 44 } 45 46 func OnControlError(ctx context.Context, controlRun ControlRunStatusProvider, p *ControlProgress) { 47 ControlHooksFromContext(ctx).OnControlError(ctx, controlRun, p) 48 } 49 50 func OnComplete(ctx context.Context, p *ControlProgress) { 51 ControlHooksFromContext(ctx).OnComplete(ctx, p) 52 }