99 lines
2.3 KiB
Go
99 lines
2.3 KiB
Go
package appState
|
|
|
|
import (
|
|
pb "parsing-service/proto/taskProcessor"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
type State struct {
|
|
appStart int64
|
|
lastCheck atomic.Int64
|
|
tasksReceived atomic.Int32
|
|
tasksInProgress atomic.Int32
|
|
tasksFirstTry atomic.Int32
|
|
tasksDoneAfterRetry atomic.Int32
|
|
tasksFailed atomic.Int32
|
|
workStatus atomic.Int32
|
|
numCPUs int32
|
|
checkPeriod int32
|
|
RetriesCount int
|
|
retriesMinutes int32
|
|
}
|
|
|
|
func NewState(numCPUs, checkPeriod, retriesCount, retriesMinutes int) *State {
|
|
now := time.Now().Unix()
|
|
|
|
state := &State{
|
|
appStart: now,
|
|
numCPUs: int32(numCPUs),
|
|
checkPeriod: int32(checkPeriod),
|
|
RetriesCount: retriesCount,
|
|
retriesMinutes: int32(retriesMinutes),
|
|
}
|
|
|
|
state.lastCheck.Store(now)
|
|
return state
|
|
}
|
|
|
|
func (s *State) ResetCounters() {
|
|
s.tasksReceived.Store(0)
|
|
s.tasksInProgress.Store(0)
|
|
s.tasksFirstTry.Store(0)
|
|
s.tasksDoneAfterRetry.Store(0)
|
|
s.tasksFailed.Store(0)
|
|
}
|
|
|
|
func (s *State) SetStatus(status Status) {
|
|
s.workStatus.Store(int32(status))
|
|
}
|
|
|
|
func (s *State) SetLastCheck() {
|
|
s.lastCheck.Store(time.Now().Unix())
|
|
}
|
|
|
|
func (s *State) SetTasksReceived(num int) {
|
|
s.tasksReceived.Swap(int32(num))
|
|
s.tasksInProgress.Swap(int32(num))
|
|
}
|
|
|
|
func (s *State) TaskDone() {
|
|
s.tasksInProgress.Add(-1)
|
|
}
|
|
|
|
func (s *State) FirstTry() {
|
|
s.tasksFirstTry.Add(1)
|
|
}
|
|
|
|
func (s *State) DoneAfterRetry() {
|
|
s.tasksDoneAfterRetry.Add(1)
|
|
}
|
|
|
|
func (s *State) Failed() {
|
|
s.tasksFailed.Add(1)
|
|
}
|
|
|
|
func (s *State) InProgress() bool {
|
|
return s.tasksInProgress.Load() > 0
|
|
}
|
|
|
|
func (s *State) SetIdleStatus() {
|
|
s.workStatus.Store(int32(StatusIdle))
|
|
}
|
|
|
|
func (s *State) StateResponse() *pb.ProcessorStatusResponse {
|
|
return &pb.ProcessorStatusResponse{
|
|
AppStart: s.appStart,
|
|
LastCheck: s.lastCheck.Load(),
|
|
TasksReceived: s.tasksReceived.Load(),
|
|
TasksInProgress: s.tasksInProgress.Load(),
|
|
TasksFirstTry: s.tasksFirstTry.Load(),
|
|
TasksDoneAfterRetry: s.tasksDoneAfterRetry.Load(),
|
|
TasksFailed: s.tasksFailed.Load(),
|
|
WorkStatus: Status(s.workStatus.Load()).String(),
|
|
NumCPUs: s.numCPUs,
|
|
CheckPeriod: s.checkPeriod,
|
|
RetriesCount: int32(s.RetriesCount),
|
|
RetriesMinutes: s.retriesMinutes,
|
|
}
|
|
}
|