github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/control/controlstatus/progress.go (about)

     1  package controlstatus
     2  
     3  import (
     4  	"context"
     5  	"sync"
     6  )
     7  
     8  type ControlProgress struct {
     9  	updateLock      *sync.Mutex
    10  	Total           int            `json:"total"`
    11  	Pending         int            `json:"pending"`
    12  	Complete        int            `json:"complete"`
    13  	Error           int            `json:"error"`
    14  	Executing       int            `json:"executing"`
    15  	StatusSummaries *StatusSummary `json:"summary"`
    16  }
    17  
    18  func NewControlProgress(total int) *ControlProgress {
    19  	return &ControlProgress{
    20  		updateLock:      &sync.Mutex{},
    21  		Total:           total,
    22  		Pending:         total,
    23  		StatusSummaries: &StatusSummary{},
    24  	}
    25  }
    26  
    27  func (p *ControlProgress) Start(ctx context.Context) {
    28  	p.updateLock.Lock()
    29  	defer p.updateLock.Unlock()
    30  
    31  	OnStart(ctx, p)
    32  }
    33  
    34  func (p *ControlProgress) OnControlStart(ctx context.Context, controlRun ControlRunStatusProvider) {
    35  	p.updateLock.Lock()
    36  	defer p.updateLock.Unlock()
    37  
    38  	// increment the parallel execution count
    39  	p.Executing++
    40  
    41  	// decrement pending count
    42  	p.Pending--
    43  
    44  	OnControlStart(ctx, controlRun, p)
    45  }
    46  
    47  func (p *ControlProgress) OnControlComplete(ctx context.Context, controlRun ControlRunStatusProvider) {
    48  	p.updateLock.Lock()
    49  	defer p.updateLock.Unlock()
    50  	p.Complete++
    51  	// decrement the parallel execution count
    52  	p.Executing--
    53  	p.StatusSummaries.Merge(controlRun.GetStatusSummary())
    54  	OnControlComplete(ctx, controlRun, p)
    55  }
    56  
    57  func (p *ControlProgress) OnControlError(ctx context.Context, controlRun ControlRunStatusProvider) {
    58  	p.updateLock.Lock()
    59  	defer p.updateLock.Unlock()
    60  	p.Error++
    61  	// decrement the parallel execution count
    62  	p.Executing--
    63  	p.StatusSummaries.Merge(controlRun.GetStatusSummary())
    64  	OnControlError(ctx, controlRun, p)
    65  }
    66  
    67  func (p *ControlProgress) Finish(ctx context.Context) {
    68  	OnComplete(ctx, p)
    69  }