summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/mattermost/mattermost-server/v5/model/scheduled_task.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2021-10-17 00:47:22 +0200
committerGitHub <noreply@github.com>2021-10-17 00:47:22 +0200
commit4dd8bae5c91fa4aef09d865d8fef1acd84f90925 (patch)
treeffad9b242daccaf8c86d1c1fbd59032302bd3be9 /vendor/github.com/mattermost/mattermost-server/v5/model/scheduled_task.go
parent7ae45c42e712bd0e66c101f3f714c05aa1dc2104 (diff)
downloadmatterbridge-msglm-4dd8bae5c91fa4aef09d865d8fef1acd84f90925.tar.gz
matterbridge-msglm-4dd8bae5c91fa4aef09d865d8fef1acd84f90925.tar.bz2
matterbridge-msglm-4dd8bae5c91fa4aef09d865d8fef1acd84f90925.zip
Update dependencies (#1610)
* Update dependencies * Update module to go 1.17
Diffstat (limited to 'vendor/github.com/mattermost/mattermost-server/v5/model/scheduled_task.go')
-rw-r--r--vendor/github.com/mattermost/mattermost-server/v5/model/scheduled_task.go55
1 files changed, 39 insertions, 16 deletions
diff --git a/vendor/github.com/mattermost/mattermost-server/v5/model/scheduled_task.go b/vendor/github.com/mattermost/mattermost-server/v5/model/scheduled_task.go
index 657cc749..cf20db63 100644
--- a/vendor/github.com/mattermost/mattermost-server/v5/model/scheduled_task.go
+++ b/vendor/github.com/mattermost/mattermost-server/v5/model/scheduled_task.go
@@ -11,42 +11,65 @@ import (
type TaskFunc func()
type ScheduledTask struct {
- Name string `json:"name"`
- Interval time.Duration `json:"interval"`
- Recurring bool `json:"recurring"`
- function func()
- cancel chan struct{}
- cancelled chan struct{}
+ Name string `json:"name"`
+ Interval time.Duration `json:"interval"`
+ Recurring bool `json:"recurring"`
+ function func()
+ cancel chan struct{}
+ cancelled chan struct{}
+ fromNextIntervalTime bool
}
func CreateTask(name string, function TaskFunc, timeToExecution time.Duration) *ScheduledTask {
- return createTask(name, function, timeToExecution, false)
+ return createTask(name, function, timeToExecution, false, false)
}
func CreateRecurringTask(name string, function TaskFunc, interval time.Duration) *ScheduledTask {
- return createTask(name, function, interval, true)
+ return createTask(name, function, interval, true, false)
}
-func createTask(name string, function TaskFunc, interval time.Duration, recurring bool) *ScheduledTask {
+func CreateRecurringTaskFromNextIntervalTime(name string, function TaskFunc, interval time.Duration) *ScheduledTask {
+ return createTask(name, function, interval, true, true)
+}
+
+func createTask(name string, function TaskFunc, interval time.Duration, recurring bool, fromNextIntervalTime bool) *ScheduledTask {
task := &ScheduledTask{
- Name: name,
- Interval: interval,
- Recurring: recurring,
- function: function,
- cancel: make(chan struct{}),
- cancelled: make(chan struct{}),
+ Name: name,
+ Interval: interval,
+ Recurring: recurring,
+ function: function,
+ cancel: make(chan struct{}),
+ cancelled: make(chan struct{}),
+ fromNextIntervalTime: fromNextIntervalTime,
}
go func() {
defer close(task.cancelled)
- ticker := time.NewTicker(interval)
+ var firstTick <-chan time.Time
+ var ticker *time.Ticker
+
+ if task.fromNextIntervalTime {
+ currTime := time.Now()
+ first := currTime.Truncate(interval)
+ if first.Before(currTime) {
+ first = first.Add(interval)
+ }
+ firstTick = time.After(time.Until(first))
+ ticker = &time.Ticker{C: nil}
+ } else {
+ firstTick = nil
+ ticker = time.NewTicker(interval)
+ }
defer func() {
ticker.Stop()
}()
for {
select {
+ case <-firstTick:
+ ticker = time.NewTicker(interval)
+ function()
case <-ticker.C:
function()
case <-task.cancel: