@@ -10,9 +10,10 @@ import (
10
10
"fmt"
11
11
"os"
12
12
"os/exec"
13
+ "strings"
13
14
"time"
14
15
15
- "github.com/choria-io/asyncjobs"
16
+ aj "github.com/choria-io/asyncjobs"
16
17
"github.com/dustin/go-humanize"
17
18
"github.com/nats-io/jsm.go"
18
19
"github.com/xlab/tablewriter"
@@ -79,18 +80,20 @@ func configureTaskCommand(app *kingpin.Application) {
79
80
watch := tasks .Command ("watch" , "Watch job updates in real time" ).Action (c .watchAction )
80
81
watch .Flag ("task" , "Watch for updates related to a specific task ID" ).StringVar (& c .id )
81
82
83
+ policies := aj .RetryPolicyNames ()
84
+
82
85
process := tasks .Command ("process" , "Process Tasks from a given queue" ).Action (c .processAction )
83
86
process .Arg ("type" , "Types of Tasks to process" ).Required ().Envar ("AJC_TYPE" ).StringVar (& c .ttype )
84
87
process .Arg ("queue" , "The Queue to consume Tasks from" ).Required ().Envar ("AJC_QUEUE" ).StringVar (& c .queue )
85
88
process .Arg ("concurrency" , "How many concurrent Tasks to process" ).Required ().Envar ("AJC_CONCURRENCY" ).IntVar (& c .concurrency )
86
89
process .Arg ("command" , "The command to invoke for each Task" ).Envar ("AJC_COMMAND" ).ExistingFileVar (& c .command )
87
90
process .Flag ("remote" , "Process tasks using a remote request-reply callout" ).BoolVar (& c .remote )
88
- process .Flag ("monitor" , "Runs monitoring on the given port" ).IntVar (& c .promPort )
89
- process .Flag ("backoff" , "Selects a backoff policy to apply (1m, 10m, 1h)" ).EnumVar (& c .retry , "1m" , "10m" , "1h" )
91
+ process .Flag ("monitor" , "Runs monitoring on the given port" ).PlaceHolder ( "PORT" ). IntVar (& c .promPort )
92
+ process .Flag ("backoff" , fmt . Sprintf ( "Selects a backoff policy to apply (%s)" , strings . Join ( policies , ", " ))). Default ( "default" ).EnumVar (& c .retry , policies ... )
90
93
}
91
94
92
95
func (c * taskCommand ) retryAction (_ * kingpin.ParseContext ) error {
93
- err := prepare (asyncjobs .BindWorkQueue (c .queue ))
96
+ err := prepare (aj .BindWorkQueue (c .queue ))
94
97
if err != nil {
95
98
return err
96
99
}
@@ -104,7 +107,7 @@ func (c *taskCommand) retryAction(_ *kingpin.ParseContext) error {
104
107
}
105
108
106
109
func (c * taskCommand ) initAction (_ * kingpin.ParseContext ) error {
107
- err := prepare (asyncjobs .NoStorageInit ())
110
+ err := prepare (aj .NoStorageInit ())
108
111
if err != nil {
109
112
return err
110
113
}
@@ -135,9 +138,9 @@ func (c *taskCommand) watchAction(_ *kingpin.ParseContext) error {
135
138
return err
136
139
}
137
140
138
- target := asyncjobs .EventsSubjectWildcard
141
+ target := aj .EventsSubjectWildcard
139
142
if c .id != "" {
140
- target = fmt .Sprintf (asyncjobs .TaskStateChangeEventSubjectPattern , c .id )
143
+ target = fmt .Sprintf (aj .TaskStateChangeEventSubjectPattern , c .id )
141
144
}
142
145
143
146
sub , err := mgr .NatsConn ().SubscribeSync (target )
@@ -151,13 +154,13 @@ func (c *taskCommand) watchAction(_ *kingpin.ParseContext) error {
151
154
return err
152
155
}
153
156
154
- event , kind , err := asyncjobs .ParseEventJSON (msg .Data )
157
+ event , kind , err := aj .ParseEventJSON (msg .Data )
155
158
if err != nil {
156
159
fmt .Printf ("Could not parse event: %v\n " , err )
157
160
}
158
161
159
162
switch e := event .(type ) {
160
- case asyncjobs .TaskStateChangeEvent :
163
+ case aj .TaskStateChangeEvent :
161
164
if e .LastErr == "" {
162
165
fmt .Printf ("[%s] %s: queue: %s type: %s tries: %d state: %s\n " , e .TimeStamp .Format ("15:04:05" ), e .TaskID , e .Queue , e .TaskType , e .Tries , e .State )
163
166
} else {
@@ -170,7 +173,7 @@ func (c *taskCommand) watchAction(_ *kingpin.ParseContext) error {
170
173
}
171
174
}
172
175
173
- func (c * taskCommand ) commandHandlerFunc (ctx context.Context , log asyncjobs .Logger , task * asyncjobs .Task ) (interface {}, error ) {
176
+ func (c * taskCommand ) commandHandlerFunc (ctx context.Context , log aj .Logger , task * aj .Task ) (interface {}, error ) {
174
177
tj , err := json .Marshal (task )
175
178
if err != nil {
176
179
return nil , err
@@ -210,25 +213,16 @@ func (c *taskCommand) processAction(_ *kingpin.ParseContext) error {
210
213
return fmt .Errorf ("either a command or --remote is required" )
211
214
}
212
215
213
- retryPolicy := asyncjobs .RetryDefault
214
- switch c .retry {
215
- case "1m" :
216
- retryPolicy = asyncjobs .RetryLinearOneMinute
217
- case "10m" :
218
- retryPolicy = asyncjobs .RetryLinearTenMinutes
219
- case "1h" :
220
- retryPolicy = asyncjobs .RetryLinearOneHour
221
- }
222
-
223
216
err := prepare (
224
- asyncjobs .BindWorkQueue (c .queue ),
225
- asyncjobs .PrometheusListenPort (c .promPort ),
226
- asyncjobs .RetryBackoffPolicy (retryPolicy ))
217
+ aj .BindWorkQueue (c .queue ),
218
+ aj .PrometheusListenPort (c .promPort ),
219
+ aj .RetryBackoffPolicyName (c .retry ),
220
+ aj .ClientConcurrency (c .concurrency ))
227
221
if err != nil {
228
222
return err
229
223
}
230
224
231
- router := asyncjobs .NewTaskRouter ()
225
+ router := aj .NewTaskRouter ()
232
226
if c .remote {
233
227
err = router .RequestReply (c .ttype , client )
234
228
} else {
@@ -401,17 +395,17 @@ func (c *taskCommand) viewAction(_ *kingpin.ParseContext) error {
401
395
}
402
396
403
397
func (c * taskCommand ) addAction (_ * kingpin.ParseContext ) error {
404
- err := prepare (asyncjobs .BindWorkQueue (c .queue ))
398
+ err := prepare (aj .BindWorkQueue (c .queue ))
405
399
if err != nil {
406
400
return err
407
401
}
408
402
409
- var opts []asyncjobs .TaskOpt
403
+ var opts []aj .TaskOpt
410
404
if c .deadline > 0 {
411
- opts = append (opts , asyncjobs .TaskDeadline (time .Now ().UTC ().Add (c .deadline )))
405
+ opts = append (opts , aj .TaskDeadline (time .Now ().UTC ().Add (c .deadline )))
412
406
}
413
407
414
- task , err := asyncjobs .NewTask (c .ttype , c .payload , opts ... )
408
+ task , err := aj .NewTask (c .ttype , c .payload , opts ... )
415
409
if err != nil {
416
410
return err
417
411
}
0 commit comments