-
Notifications
You must be signed in to change notification settings - Fork 0
/
injected_job.go
64 lines (54 loc) · 1.79 KB
/
injected_job.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package dispatcher
import (
"time"
"github.com/google/uuid"
)
// InjectedJob defines a generic job where any action can be injected
type InjectedJob struct {
JobID string
Action func()
FinallyAction func()
ExecutionTimeoutInSeconds int64
FinallyExecutionTimeoutInSeconds int64
}
// NewJob instantiates new job object
func NewJob(action func(), execTimeoutInSec, finallyTimeoutInSec int64) *InjectedJob {
return &InjectedJob{
JobID: uuid.New().String(),
Action: action,
ExecutionTimeoutInSeconds: execTimeoutInSec,
FinallyExecutionTimeoutInSeconds: finallyTimeoutInSec,
}
}
// NewJobWithID instantiates new job object with jobID
func NewJobWithID(jobID string, action func(), execTimeoutInSec, finallyTimeoutInSec int64) *InjectedJob {
return &InjectedJob{
JobID: jobID,
Action: action,
ExecutionTimeoutInSeconds: execTimeoutInSec,
FinallyExecutionTimeoutInSeconds: finallyTimeoutInSec,
}
}
// GetJobID - Returns JobID
func (j *InjectedJob) GetJobID() string {
return j.JobID
}
// Execute executes the injected action
func (j *InjectedJob) Execute() []error {
j.Action()
return nil
}
// GetExecutionTimeout get the execution timeout of the action
func (j *InjectedJob) GetExecutionTimeout() time.Duration {
return time.Duration(j.ExecutionTimeoutInSeconds) * time.Second
}
// Finally executes at the end of the action
func (j *InjectedJob) Finally() {
if j.FinallyAction != nil {
j.FinallyAction()
}
}
// GetFinallyTimeout get the finally timeout of the action
func (j *InjectedJob) GetFinallyTimeout() time.Duration {
return time.Duration(j.FinallyExecutionTimeoutInSeconds) * time.Second
}