-
Notifications
You must be signed in to change notification settings - Fork 88
/
tasks.go
43 lines (39 loc) · 1.06 KB
/
tasks.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
package tasks
import (
"time"
"github.com/pkg/errors"
"github.com/replicatedhq/kots/pkg/logger"
"github.com/replicatedhq/kots/pkg/store"
"github.com/replicatedhq/kots/pkg/util"
)
func StartUpdateTaskMonitor(taskID string, finishedChan <-chan error) {
go func() {
var finalError error
defer func() {
if finalError == nil {
if err := store.GetStore().ClearTaskStatus(taskID); err != nil {
logger.Error(errors.Wrap(err, "failed to clear update-download task status"))
}
} else {
errMsg := finalError.Error()
if cause, ok := errors.Cause(finalError).(util.ActionableError); ok {
errMsg = cause.Error()
}
if err := store.GetStore().SetTaskStatus(taskID, errMsg, "failed"); err != nil {
logger.Error(errors.Wrap(err, "failed to set error on update-download task status"))
}
}
}()
for {
select {
case <-time.After(time.Second):
if err := store.GetStore().UpdateTaskStatusTimestamp(taskID); err != nil {
logger.Error(err)
}
case err := <-finishedChan:
finalError = err
return
}
}
}()
}