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  }