internal/common/task_progress_counter.go (99 lines of code) (raw):
/*
* Copyright (c) 2023 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package common
import "go.uber.org/atomic"
type TaskProgressCounter struct {
Name string `json:"name"`
Total *atomic.Int64 `json:"total"`
Pulled *atomic.Int64 `json:"pulled"`
Running *atomic.Int64 `json:"running"`
Success *atomic.Int64 `json:"success"`
Failed *atomic.Int64 `json:"failed"`
}
func NewTaskProgressCounter(name string) (c *TaskProgressCounter) {
return &TaskProgressCounter{
Total: atomic.NewInt64(0),
Pulled: atomic.NewInt64(0),
Running: atomic.NewInt64(0),
Success: atomic.NewInt64(0),
Failed: atomic.NewInt64(0),
Name: name,
}
}
func (c *TaskProgressCounter) DecrementFailed() {
if c.Failed.Load() > 0 {
c.Failed.Sub(1)
}
}
func (c *TaskProgressCounter) DecrementRunning() {
if c.Running.Load() > 0 {
c.Running.Sub(1)
}
c.Pulled.Add(1)
}
func (c *TaskProgressCounter) DecrementSuccess() {
if c.Success.Load() > 0 {
c.Success.Sub(1)
}
}
func (c *TaskProgressCounter) GetFailed() int64 {
return c.Failed.Load()
}
func (c *TaskProgressCounter) GetName() string {
return c.Name
}
func (c *TaskProgressCounter) GetPulled() int64 {
return c.Pulled.Load()
}
func (c *TaskProgressCounter) GetRunning() int64 {
return c.Running.Load()
}
func (c *TaskProgressCounter) GetSuccess() int64 {
return c.Success.Load()
}
func (c *TaskProgressCounter) GetTotal() int64 {
return c.Total.Load()
}
func (c *TaskProgressCounter) IncrementOneFailed() {
c.IncrementFailed(1)
}
func (c *TaskProgressCounter) IncrementFailed(delta int64) {
if c.Running.Load() >= delta {
c.Running.Sub(delta)
}
c.Failed.Add(delta)
}
func (c *TaskProgressCounter) IncrementOnePulled() {
c.IncrementPulled(1)
}
func (c *TaskProgressCounter) IncrementPulled(delta int64) {
c.Pulled.Add(delta)
}
func (c *TaskProgressCounter) IncrementRunning() {
if c.Pulled.Load() > 0 {
c.Pulled.Sub(1)
}
c.Running.Add(1)
}
func (c *TaskProgressCounter) IncrementRunning2(delta int64) {
if c.Pulled.Load() >= delta {
c.Pulled.Sub(delta)
}
c.Running.Add(delta)
}
func (c *TaskProgressCounter) IncrementOneSuccess() {
if c.Running.Load() > 0 {
c.Running.Sub(1)
}
c.Success.Add(1)
}
func (c *TaskProgressCounter) IncrementSuccess(delta int64) {
if c.Running.Load() >= delta {
c.Running.Sub(delta)
}
c.Success.Add(delta)
}
func (c *TaskProgressCounter) IncrementOneTotal() {
c.Total.Add(1)
}
func (c *TaskProgressCounter) IncrementTotal(delta int64) {
c.Total.Add(delta)
}