basic app
This commit is contained in:
parent
0a6e246a5c
commit
8d6c2b6687
30 changed files with 1469 additions and 0 deletions
99
internal/appState/state.go
Normal file
99
internal/appState/state.go
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
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,
|
||||
}
|
||||
}
|
||||
24
internal/appState/status.go
Normal file
24
internal/appState/status.go
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
package appState
|
||||
|
||||
type Status int32
|
||||
|
||||
const (
|
||||
StatusIdle Status = iota
|
||||
StatusRequestTasks
|
||||
StatusWorkInProgress
|
||||
StatusFailure
|
||||
)
|
||||
|
||||
var statusNames = [...]string{
|
||||
"Idle",
|
||||
"Requesting tasks",
|
||||
"Work in progress",
|
||||
"Failure",
|
||||
}
|
||||
|
||||
func (s Status) String() string {
|
||||
if s < 0 || s >= Status(len(statusNames)) {
|
||||
return "unknown"
|
||||
}
|
||||
return statusNames[s]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue