-
Notifications
You must be signed in to change notification settings - Fork 0
/
cron_spec.go
170 lines (142 loc) · 2.69 KB
/
cron_spec.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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package gojobs
import (
"fmt"
"net/http"
)
const (
// CodeAbnormal 异常
CodeAbnormal = 0
// CodeError 失败
CodeError = http.StatusInternalServerError
// CodeSuccess 成功
CodeSuccess = http.StatusOK
// CodeEnd 结束
CodeEnd = http.StatusCreated
)
// 每隔n秒执行一次
const specSeconds = "*/%d * * * * *"
// Seconds 每隔n秒执行一次
type Seconds struct {
n int64
}
// GetSeconds 每隔n秒执行一次
func GetSeconds(n int64) *Seconds {
s := Seconds{}
s.n = n
return &s
}
// Spec 每隔n秒执行一次
func (s Seconds) Spec() string {
if s.n < 0 || s.n > 59 {
return ""
}
return fmt.Sprintf(specSeconds, s.n)
}
// Frequency 每隔n秒执行一次
func (s Seconds) Frequency() int64 {
if s.n < 0 || s.n > 59 {
return -1
}
return s.n
}
// 每隔n分钟执行一次
const specMinutes = "0 */%d * * * *"
// Minutes 每隔n分钟执行一次
type Minutes struct {
n int64
}
// GetMinutes 每隔n分钟执行一次
func GetMinutes(n int64) *Minutes {
s := Minutes{}
s.n = n
return &s
}
// Spec 每隔n分钟执行一次
func (s Minutes) Spec() string {
if s.n < 0 || s.n > 59 {
return ""
}
return fmt.Sprintf(specMinutes, s.n)
}
// Frequency 每隔n分钟执行一次
func (s Minutes) Frequency() int64 {
if s.n < 0 || s.n > 59 {
return -1
}
return s.n * 60
}
// 每天n点执行一次
const specHour = "0 0 */%d * * *"
// Hour 每天n点执行一次
type Hour struct {
n int64
}
// GetHour 每天n点执行一次
func GetHour(n int64) *Hour {
s := Hour{}
s.n = n
return &s
}
// Spec 每天n点执行一次
func (s Hour) Spec() string {
if s.n < 0 || s.n > 23 {
return ""
}
return fmt.Sprintf(specHour, s.n)
}
// Frequency 每天n点执行一次
func (s Hour) Frequency() int64 {
if s.n < 0 || s.n > 23 {
return -1
}
return s.n * 60 * 60
}
// 每隔n小时执行一次
const specHourInterval = "0 0 %s * * *"
// HourInterval 每隔n小时执行一次
type HourInterval struct {
n int64
}
// GetHourInterval 每隔n小时执行一次
func GetHourInterval(n int64) *HourInterval {
s := HourInterval{}
s.n = n
return &s
}
// Spec 每隔n小时执行一次
func (s HourInterval) Spec() string {
if s.n < 0 || s.n > 23 {
return ""
}
// 循环出最近24次执行时间
var sl []int64
var i int64
i = 0
for {
if i > 23 {
break
}
sl = append(sl, s.n*i)
i++
}
// TODO 可以合并两个
// 过滤数据
str := ""
for _, v := range sl {
if v > 23 {
continue
}
str = fmt.Sprintf("%s,%v", str, v)
}
if len(str) <= 0 {
return ""
}
return fmt.Sprintf(specHourInterval, str[1:])
}
// Frequency 每隔n小时执行一次
func (s HourInterval) Frequency() int64 {
if s.n < 0 || s.n > 23 {
return -1
}
return s.n * 60 * 60
}