Skip to content

Commit 6f6452f

Browse files
author
Nicola Strappazzon C
committed
feat - scheduler
1 parent ee23e72 commit 6f6452f

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed

scheduler/main.go

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package scheduler
2+
3+
import (
4+
"errors"
5+
"time"
6+
7+
temp "github.com/debeando/go-common/time"
8+
)
9+
10+
type Scheduler struct {
11+
Enable bool `yaml:"enable"`
12+
Start string `yaml:"start"`
13+
End string `yaml:"end"`
14+
Interval uint16 `yaml:"interval"`
15+
start time.Time
16+
end time.Time
17+
}
18+
19+
func (s *Scheduler) Do(start func(), end func()) (err error) {
20+
if !s.Enable {
21+
return errors.New("Scheduler is disable")
22+
}
23+
24+
if s.start, err = temp.StringToTime(s.Start); err != nil {
25+
return err
26+
}
27+
28+
if s.end, err = temp.StringToTime(s.End); err != nil {
29+
return err
30+
}
31+
32+
for {
33+
if temp.BetweenNow(s.start, s.end) {
34+
start()
35+
} else {
36+
end()
37+
}
38+
39+
time.Sleep(time.Duration(s.Interval) * time.Second)
40+
}
41+
}

scheduler/main_test.go

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package scheduler_test
2+
3+
import (
4+
mock "time"
5+
6+
"testing"
7+
8+
"github.com/debeando/go-common/scheduler"
9+
"github.com/debeando/go-common/time"
10+
11+
"github.com/stretchr/testify/assert"
12+
)
13+
14+
func TestDo(t *testing.T) {
15+
s := scheduler.Scheduler{
16+
Start: "07:00",
17+
End: "20:00",
18+
}
19+
20+
start, _ := time.StringToTime(s.Start)
21+
end, _ := time.StringToTime(s.End)
22+
23+
time.Now = func() mock.Time {
24+
return mock.Date(0, 1, 1, 06, 59, 00, 000000000, mock.UTC)
25+
}
26+
assert.False(t, time.BetweenNow(start, end))
27+
28+
time.Now = func() mock.Time {
29+
return mock.Date(0, 1, 1, 07, 00, 00, 000000000, mock.UTC)
30+
}
31+
assert.False(t, time.BetweenNow(start, end))
32+
33+
time.Now = func() mock.Time {
34+
return mock.Date(0, 1, 1, 07, 01, 00, 000000000, mock.UTC)
35+
}
36+
assert.True(t, time.BetweenNow(start, end))
37+
38+
time.Now = func() mock.Time {
39+
return mock.Date(0, 1, 1, 18, 45, 00, 000000000, mock.UTC)
40+
}
41+
assert.True(t, time.BetweenNow(start, end))
42+
43+
time.Now = func() mock.Time {
44+
return mock.Date(0, 1, 1, 19, 59, 00, 000000000, mock.UTC)
45+
}
46+
assert.True(t, time.BetweenNow(start, end))
47+
48+
time.Now = func() mock.Time {
49+
return mock.Date(0, 1, 1, 20, 00, 00, 000000000, mock.UTC)
50+
}
51+
assert.False(t, time.BetweenNow(start, end))
52+
53+
time.Now = func() mock.Time {
54+
return mock.Date(0, 1, 1, 20, 01, 00, 000000000, mock.UTC)
55+
}
56+
assert.False(t, time.BetweenNow(start, end))
57+
}
File renamed without changes.

0 commit comments

Comments
 (0)