diff --git a/core.go b/core.go index a1f19c8..a973c91 100644 --- a/core.go +++ b/core.go @@ -21,8 +21,8 @@ import ( // Date : 16:50 2023/8/11 func NewTimeWheel(slotCount int, interval time.Duration) *TimeWheel { tw := &TimeWheel{ - Interval: 0, - Slots: make([]*list.List, 0), + Interval: interval, + Slots: make([]*list.List, slotCount), Ticker: time.NewTicker(interval), CurrentPosition: 0, SlotCount: slotCount, @@ -75,6 +75,7 @@ func (tw *TimeWheel) initSlots() { // // Date : 13:38 2023/8/4 func (tw *TimeWheel) Start() { + tw.IsRunning = true for { select { case <-tw.Ticker.C: @@ -88,6 +89,7 @@ func (tw *TimeWheel) Start() { tw.RemoveTask(task) case <-tw.StopChannel: tw.Ticker.Stop() + tw.IsRunning = false return } } diff --git a/core_test.go b/core_test.go new file mode 100644 index 0000000..a48bcf2 --- /dev/null +++ b/core_test.go @@ -0,0 +1,77 @@ +// Package task ... +// +// Description : task ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2023-08-11 17:00 +package task + +import ( + "context" + "fmt" + "git.zhangdeman.cn/zhangdeman/wrapper" + "testing" + "time" +) + +var tw *TimeWheel + +// TestNewTimeWheel ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:00 2023/8/11 +func TestNewTimeWheel(t *testing.T) { + tw = NewTimeWheel(10, 10*time.Second) + tw.AddTask(&Task{ + Key: wrapper.StringFromRandom(32, "").Value(), + Interval: 5 * time.Second, + CreatedTime: time.Now(), + Position: 0, + Circle: 100, + Job: &testTask{}, + Times: 10, + MaxExecuteTime: 0, + }, false) + go tw.Start() + time.Sleep(3 * time.Second) + for tw.IsRunning { + + } +} + +type testTask struct { +} + +func (t testTask) GetFlag() string { + return "unit_test" +} + +func (t testTask) Description() string { + return "单元测试任务" +} + +func (t testTask) GetRunID() string { + return wrapper.StringFromRandom(32, "").Value() +} + +func (t testTask) Callback(result *Result) error { + fmt.Println(result) + return nil +} + +func (t testTask) Execute(ctx context.Context, cfg *Config) (map[string]interface{}, error) { + fmt.Println(wrapper.OwnTimeFromNow().ToString()) + tw.AddTask(&Task{ + Key: wrapper.StringFromRandom(32, "").Value(), + Interval: 5 * time.Second, + CreatedTime: time.Now(), + Position: 0, + Circle: 100, + Job: &testTask{}, + Times: 10, + MaxExecuteTime: 100, + }, false) + return nil, nil +} diff --git a/go.mod b/go.mod index c8e05fe..4c63e67 100644 --- a/go.mod +++ b/go.mod @@ -5,9 +5,16 @@ go 1.20 require git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230811085725-1a7414bb7590 require ( + git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230811030300-6f850372c88c // indirect + git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20230811032817-e6ad534a9a10 // indirect git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b // indirect + git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20230811071513-cfc46e8d82e1 // indirect + github.com/BurntSushi/toml v1.3.2 // indirect + github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect + github.com/go-ini/ini v1.67.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mozillazg/go-pinyin v0.20.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 0c2854e..b1301bf 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,21 @@ +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230811030300-6f850372c88c h1:Dan3iSVU6XTKt8r3/qixfPHPpfLZjkYlPmaJios7wtE= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230811030300-6f850372c88c/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230307094841-e437ba87af10 h1:+Lg4vXFEiWVKjhUJdXuoP0AgjGT49oqJ3301STnZErk= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230307094841-e437ba87af10/go.mod h1:+Lc0zYF8sylRi75A7NGmObrLxugwAZa8WVpWh2eh5X0= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230811085725-1a7414bb7590 h1:zN5JKHvzCH5q+X6W6fZw1hZ18FTlmZdv+k5T2j+6/GQ= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20230811085725-1a7414bb7590/go.mod h1:l9S40lsDnTd/VAZjh1kmfYvz0B9z+7oT86pMQ/KurWo= +git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20230811032817-e6ad534a9a10 h1:orhcMAKrcOajsBJCgssnb9O8YcLsPJvWuXF511gs5dc= +git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20230811032817-e6ad534a9a10/go.mod h1:CzX5/WwGDTnKmewarnjkK5XcSRbgszTQTdTL3OUc/s4= git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b h1:vnmxYrNdX6f5sEVjjkM1fIR+i32kHJ4g9DJqug9KKek= git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b/go.mod h1:Yum5+tgP+Wf1GWUAyQz1Qh8Ab9m5+90GYkYdzqVs0lA= +git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20230811071513-cfc46e8d82e1 h1:k2iu9KgRxeroytB+N+/XapAxt1di7o2pNTISjFlYDJ8= +git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20230811071513-cfc46e8d82e1/go.mod h1:kvjAbtGTo14gKCS0X4rxnb2sPkskHOUy2NXcx34t6Mw= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= +github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ= @@ -12,3 +24,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=