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 }