github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/control/controlstatus/control_hooks_status.go (about) 1 package controlstatus 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/spf13/viper" 8 "github.com/turbot/steampipe/pkg/constants" 9 "github.com/turbot/steampipe/pkg/statushooks" 10 "github.com/turbot/steampipe/pkg/utils" 11 ) 12 13 // StatusControlHooks is a struct which implements ControlHooks, and displays the control progress as a status message 14 type StatusControlHooks struct { 15 Enabled bool 16 } 17 18 func NewStatusControlHooks() *StatusControlHooks { 19 return &StatusControlHooks{ 20 Enabled: viper.GetBool(constants.ArgProgress), 21 } 22 } 23 24 func (c *StatusControlHooks) OnStart(ctx context.Context, _ *ControlProgress) { 25 if !c.Enabled { 26 return 27 } 28 29 statushooks.SetStatus(ctx, "Starting controls…") 30 statushooks.Show(ctx) 31 } 32 33 func (c *StatusControlHooks) OnControlStart(ctx context.Context, _ ControlRunStatusProvider, p *ControlProgress) { 34 if !c.Enabled { 35 return 36 } 37 38 c.setStatusFromProgress(ctx, p) 39 } 40 41 func (c *StatusControlHooks) OnControlComplete(ctx context.Context, _ ControlRunStatusProvider, p *ControlProgress) { 42 if !c.Enabled { 43 return 44 } 45 46 c.setStatusFromProgress(ctx, p) 47 } 48 49 func (c *StatusControlHooks) OnControlError(ctx context.Context, _ ControlRunStatusProvider, p *ControlProgress) { 50 if !c.Enabled { 51 return 52 } 53 54 c.setStatusFromProgress(ctx, p) 55 } 56 57 func (c *StatusControlHooks) OnComplete(ctx context.Context, _ *ControlProgress) { 58 if !c.Enabled { 59 return 60 } 61 62 statushooks.Done(ctx) 63 } 64 65 func (c *StatusControlHooks) setStatusFromProgress(ctx context.Context, p *ControlProgress) { 66 message := fmt.Sprintf("Running %d %s. (%d complete, %d running, %d pending, %d %s)", 67 p.Total, 68 utils.Pluralize("control", p.Total), 69 p.Complete, 70 p.Executing, 71 p.Pending, 72 p.Error, 73 utils.Pluralize("error", p.Error), 74 ) 75 76 statushooks.SetStatus(ctx, message) 77 }