/
state.go
137 lines (111 loc) · 2.25 KB
/
state.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package storage
import (
"fmt"
"sync/atomic"
"github.com/auho/go-toolkit/time/timing"
)
const StatusConfig = "config"
const StatusAccept = "accept"
const StatusScan = "scan"
const StatusDone = "done"
const StatusFinish = "finish"
type Stater interface {
GetStatus() string
Overview() string
}
// baseState 基状态
type baseState struct {
Concurrency int
Title string
amount int64
duration timing.Duration
status string
}
func (s *baseState) Status() string {
return s.status
}
func (s *baseState) Amount() int64 {
return s.amount
}
func (s *baseState) SetAmount(n int64) {
s.amount = n
}
func (s *baseState) AddAmount(n int64) {
atomic.AddInt64(&s.amount, n)
}
func (s *baseState) StatusCustomize(status string) {
s.status = status
}
func (s *baseState) StatusConfig() {
s.status = StatusConfig
}
func (s *baseState) StatusAccept() {
s.status = StatusAccept
}
func (s *baseState) StatusScan() {
s.status = StatusScan
}
func (s *baseState) StatusDone() {
s.status = StatusDone
}
func (s *baseState) StatusFinish() {
s.status = StatusFinish
}
func (s *baseState) DurationStart() {
s.duration.Start()
}
func (s *baseState) DurationStop() {
s.duration.Stop()
}
// State 状态
type State struct {
baseState
}
func NewState() *State {
return &State{}
}
func (s *State) Overview() string {
return fmt.Sprintf("Status: %s, Concurrency: %d, Amount: %d, Duration: %s",
s.status,
s.Concurrency,
s.amount,
s.duration.StringStartToStop())
}
// TotalState 总数状态
type TotalState struct {
baseState
Total int64
}
func NewTotalState() *TotalState {
return &TotalState{}
}
func (t *TotalState) Overview() string {
return fmt.Sprintf("Status: %s, Concurrentcy:%d, Amount: %d/%d, Duration: %s",
t.status,
t.Concurrency,
t.amount,
t.Total,
t.duration.StringStartToStop())
}
// PageState 分页状态
type PageState struct {
baseState
Page int64
PageSize int64
TotalPage int64
Total int64
}
func NewPageState() *PageState {
return &PageState{}
}
func (p *PageState) Overview() string {
return fmt.Sprintf("Status: %s, Concurrency: %d, Amount: %d/%d, Page: %d/%d(%d), Duration: %s",
p.status,
p.Concurrency,
p.amount,
p.Total,
p.Page,
p.TotalPage,
p.PageSize,
p.duration.StringStartToStop())
}