diff --git a/internal/base/base.go b/internal/base/base.go index 00a5a17..41edc98 100644 --- a/internal/base/base.go +++ b/internal/base/base.go @@ -11,14 +11,33 @@ import ( const ( processedPrefix = "asynq:processed:" // STRING - asynq:processed: failurePrefix = "asynq:failure:" // STRING - asynq:failure: - QueuePrefix = "asynq:queues:" // LIST - asynq:queues: - DefaultQueue = QueuePrefix + "default" // LIST + queuePrefix = "asynq:queues:" // LIST - asynq:queues: + DefaultQueue = queuePrefix + "default" // LIST ScheduledQueue = "asynq:scheduled" // ZSET RetryQueue = "asynq:retry" // ZSET DeadQueue = "asynq:dead" // ZSET InProgressQueue = "asynq:in_progress" // LIST ) +// Priority indicates importance of a task in comparison with others. +type Priority int + +// Levels of priority in descending order. +const ( + PriorityHigh Priority = iota + PriorityDefault + PriorityLow +) + +func (p Priority) String() string { + return [...]string{"high", "default", "low"}[p] +} + +// QueueKey returns a redis key string for the given priority. +func QueueKey(p Priority) string { + return queuePrefix + p.String() +} + // ProcessedKey returns a redis key string for procesed count // for the given day. func ProcessedKey(t time.Time) string { diff --git a/internal/base/base_test.go b/internal/base/base_test.go index 2f375cc..cd081c7 100644 --- a/internal/base/base_test.go +++ b/internal/base/base_test.go @@ -5,6 +5,24 @@ import ( "time" ) +func TestQueueKey(t *testing.T) { + tests := []struct { + p Priority + want string + }{ + {PriorityHigh, "asynq:queues:high"}, + {PriorityDefault, "asynq:queues:default"}, + {PriorityLow, "asynq:queues:low"}, + } + + for _, tc := range tests { + got := QueueKey(tc.p) + if got != tc.want { + t.Errorf("QueueKey(%v) = %q, want %q", tc.p, got, tc.want) + } + } +} + func TestProcessedKey(t *testing.T) { tests := []struct { input time.Time