2
0
mirror of https://github.com/hibiken/asynq.git synced 2025-08-19 15:08:55 +08:00

Add enqall command to asynqmon CLI

This commit is contained in:
Ken Hibino
2019-12-10 21:38:25 -08:00
parent 0d74c518bf
commit a96719413c
8 changed files with 131 additions and 24 deletions

View File

@@ -273,17 +273,20 @@ func (r *RDB) EnqueueScheduledTask(id uuid.UUID, score int64) error {
}
// EnqueueAllScheduledTasks enqueues all tasks from scheduled queue.
func (r *RDB) EnqueueAllScheduledTasks() error {
// and returns the number of tasks enqueued.
func (r *RDB) EnqueueAllScheduledTasks() (int64, error) {
return r.removeAndEnqueueAll(scheduledQ)
}
// EnqueueAllRetryTasks enqueues all tasks from retry queue.
func (r *RDB) EnqueueAllRetryTasks() error {
// and returns the number of tasks enqueued.
func (r *RDB) EnqueueAllRetryTasks() (int64, error) {
return r.removeAndEnqueueAll(retryQ)
}
// EnqueueAllDeadTasks enqueues all tasks from dead queue.
func (r *RDB) EnqueueAllDeadTasks() error {
// EnqueueAllDeadTasks enqueues all tasks from dead queue
// and returns the number of tasks enqueued.
func (r *RDB) EnqueueAllDeadTasks() (int64, error) {
return r.removeAndEnqueueAll(deadQ)
}
@@ -311,7 +314,7 @@ func (r *RDB) removeAndEnqueue(zset, id string, score float64) (int64, error) {
return n, nil
}
func (r *RDB) removeAndEnqueueAll(zset string) error {
func (r *RDB) removeAndEnqueueAll(zset string) (int64, error) {
script := redis.NewScript(`
local msgs = redis.call("ZRANGE", KEYS[1], 0, -1)
for _, msg in ipairs(msgs) do
@@ -320,9 +323,13 @@ func (r *RDB) removeAndEnqueueAll(zset string) error {
end
return table.getn(msgs)
`)
_, err := script.Run(r.client, []string{zset, defaultQ}).Result()
res, err := script.Run(r.client, []string{zset, defaultQ}).Result()
if err != nil {
return err
return 0, err
}
return nil
n, ok := res.(int64)
if !ok {
return 0, fmt.Errorf("could not cast %v to int64", res)
}
return n, nil
}

View File

@@ -708,16 +708,19 @@ func TestEnqueueAllScheduledTasks(t *testing.T) {
tests := []struct {
description string
scheduled []*TaskMessage
want int64
wantEnqueued []*TaskMessage
}{
{
description: "with tasks in scheduled queue",
scheduled: []*TaskMessage{t1, t2, t3},
want: 3,
wantEnqueued: []*TaskMessage{t1, t2, t3},
},
{
description: "with empty scheduled queue",
scheduled: []*TaskMessage{},
want: 0,
wantEnqueued: []*TaskMessage{},
},
}
@@ -737,9 +740,16 @@ func TestEnqueueAllScheduledTasks(t *testing.T) {
}
}
err := r.EnqueueAllScheduledTasks()
got, err := r.EnqueueAllScheduledTasks()
if err != nil {
t.Errorf("%s; r.EnqueueAllScheduledTasks = %v, want nil", tc.description, err)
t.Errorf("%s; r.EnqueueAllScheduledTasks = %v, %v; want %v, nil",
tc.description, got, err, tc.want)
continue
}
if got != tc.want {
t.Errorf("%s; r.EnqueueAllScheduledTasks = %v, %v; want %v, nil",
tc.description, got, err, tc.want)
}
gotEnqueuedRaw := r.client.LRange(defaultQ, 0, -1).Val()
@@ -759,16 +769,19 @@ func TestEnqueueAllRetryTasks(t *testing.T) {
tests := []struct {
description string
retry []*TaskMessage
want int64
wantEnqueued []*TaskMessage
}{
{
description: "with tasks in retry queue",
retry: []*TaskMessage{t1, t2, t3},
want: 3,
wantEnqueued: []*TaskMessage{t1, t2, t3},
},
{
description: "with empty retry queue",
retry: []*TaskMessage{},
want: 0,
wantEnqueued: []*TaskMessage{},
},
}
@@ -788,9 +801,16 @@ func TestEnqueueAllRetryTasks(t *testing.T) {
}
}
err := r.EnqueueAllRetryTasks()
got, err := r.EnqueueAllRetryTasks()
if err != nil {
t.Errorf("%s; r.EnqueueAllRetryTasks = %v, want nil", tc.description, err)
t.Errorf("%s; r.EnqueueAllRetryTasks = %v, %v; want %v, nil",
tc.description, got, err, tc.want)
continue
}
if got != tc.want {
t.Errorf("%s; r.EnqueueAllRetryTasks = %v, %v; want %v, nil",
tc.description, got, err, tc.want)
}
gotEnqueuedRaw := r.client.LRange(defaultQ, 0, -1).Val()
@@ -810,16 +830,19 @@ func TestEnqueueAllDeadTasks(t *testing.T) {
tests := []struct {
description string
dead []*TaskMessage
want int64
wantEnqueued []*TaskMessage
}{
{
description: "with tasks in dead queue",
dead: []*TaskMessage{t1, t2, t3},
want: 3,
wantEnqueued: []*TaskMessage{t1, t2, t3},
},
{
description: "with empty dead queue",
dead: []*TaskMessage{},
want: 0,
wantEnqueued: []*TaskMessage{},
},
}
@@ -839,9 +862,16 @@ func TestEnqueueAllDeadTasks(t *testing.T) {
}
}
err := r.EnqueueAllDeadTasks()
got, err := r.EnqueueAllDeadTasks()
if err != nil {
t.Errorf("%s; r.EnqueueAllDeadTasks = %v, want nil", tc.description, err)
t.Errorf("%s; r.EnqueueAllDeadTasks = %v, %v; want %v, nil",
tc.description, got, err, tc.want)
continue
}
if got != tc.want {
t.Errorf("%s; r.EnqueueAllDeadTasks = %v, %v; want %v, nil",
tc.description, got, err, tc.want)
}
gotEnqueuedRaw := r.client.LRange(defaultQ, 0, -1).Val()