Skip to content

Commit 02e8f31

Browse files
committed
feat: add timeout to jobs
1 parent 16e8f06 commit 02e8f31

File tree

3 files changed

+156
-119
lines changed

3 files changed

+156
-119
lines changed

cmd/kic-supportpkg.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func Execute() {
2828
fmt.Printf("Running job %s...", job.Name)
2929
err = job.Collect(collector)
3030
if err != nil {
31-
fmt.Printf("Error: %s\n", err)
31+
fmt.Printf(" Error: %s\n", err)
3232
} else {
3333
fmt.Print(" OK\n")
3434
}

pkg/jobs/job.go

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package jobs
22

33
import (
44
"context"
5+
"errors"
6+
"fmt"
57
"github.com/nginxinc/kubectl-kic-supportpkg/pkg/data_collector"
68
"os"
79
"path"
@@ -11,27 +13,44 @@ import (
1113
type Job struct {
1214
Name string
1315
Global bool
14-
Execute func(dc *data_collector.DataCollector, ctx context.Context) map[string][]byte
15-
//TODO: execute function must return an error
16+
Timeout time.Duration
17+
Execute func(dc *data_collector.DataCollector, ctx context.Context, ch chan JobResult)
18+
}
19+
20+
type JobResult struct {
21+
Files map[string][]byte
22+
Error error
1623
}
1724

1825
func (j Job) Collect(dc *data_collector.DataCollector) error {
19-
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
26+
ch := make(chan JobResult, 1)
27+
28+
ctx, cancel := context.WithTimeout(context.Background(), j.Timeout)
2029
defer cancel()
2130

22-
jobResults := j.Execute(dc, ctx)
31+
go j.Execute(dc, ctx, ch)
2332

24-
for fileName, fileValue := range jobResults {
25-
err := os.MkdirAll(path.Dir(fileName), os.ModePerm)
26-
if err != nil {
27-
return err
33+
select {
34+
case <-ctx.Done():
35+
return errors.New(fmt.Sprintf("Context cancelled: %v", ctx.Err()))
36+
37+
case jobResults := <-ch:
38+
if jobResults.Error != nil {
39+
return jobResults.Error
2840
}
29-
file, _ := os.Create(fileName)
30-
_, err = file.Write(fileValue)
31-
if err != nil {
32-
return err
41+
42+
for fileName, fileValue := range jobResults.Files {
43+
err := os.MkdirAll(path.Dir(fileName), os.ModePerm)
44+
if err != nil {
45+
return err
46+
}
47+
file, _ := os.Create(fileName)
48+
_, err = file.Write(fileValue)
49+
if err != nil {
50+
return err
51+
}
52+
_ = file.Close()
3353
}
34-
_ = file.Close()
54+
return nil
3555
}
36-
return nil
3756
}

0 commit comments

Comments
 (0)