2019-12-01 23:59:52 +08:00
|
|
|
package asynq
|
|
|
|
|
|
|
|
// Inspector is used to inspect queues.
|
|
|
|
type Inspector struct {
|
|
|
|
rdb *rdb
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewInspector returns a new Inspector instance.
|
|
|
|
func NewInspector(opt *RedisOpt) *Inspector {
|
|
|
|
return &Inspector{
|
|
|
|
rdb: newRDB(opt),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// CurrentStats returns a current stats of queues.
|
|
|
|
func (i *Inspector) CurrentStats() (*Stats, error) {
|
|
|
|
return i.rdb.currentStats()
|
|
|
|
}
|
2019-12-02 07:01:26 +08:00
|
|
|
|
|
|
|
// toTaskSlice converts a taskMessage slice to a Task slice.
|
|
|
|
func (i *Inspector) toTaskSlice(msgs []*taskMessage) []*Task {
|
|
|
|
var tasks []*Task
|
|
|
|
for _, m := range msgs {
|
|
|
|
tasks = append(tasks, &Task{Type: m.Type, Payload: m.Payload})
|
|
|
|
}
|
|
|
|
return tasks
|
|
|
|
}
|
|
|
|
|
|
|
|
// ListEnqueuedTasks returns a list of tasks ready to be processed.
|
2019-12-02 23:09:43 +08:00
|
|
|
func (i *Inspector) ListEnqueuedTasks() ([]*EnqueuedTask, error) {
|
2019-12-02 07:01:26 +08:00
|
|
|
// TODO(hibiken): Support pagination.
|
|
|
|
msgs, err := i.rdb.listEnqueued()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2019-12-02 23:09:43 +08:00
|
|
|
var tasks []*EnqueuedTask
|
|
|
|
for _, m := range msgs {
|
|
|
|
tasks = append(tasks, &EnqueuedTask{
|
|
|
|
ID: m.ID,
|
|
|
|
Type: m.Type,
|
|
|
|
Payload: m.Payload,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return tasks, nil
|
2019-12-02 07:01:26 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// ListInProgressTasks returns a list of tasks that are being processed.
|
2019-12-02 23:09:43 +08:00
|
|
|
func (i *Inspector) ListInProgressTasks() ([]*InProgressTask, error) {
|
2019-12-02 07:01:26 +08:00
|
|
|
// TODO(hibiken): Support pagination.
|
|
|
|
msgs, err := i.rdb.listInProgress()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2019-12-02 23:09:43 +08:00
|
|
|
var tasks []*InProgressTask
|
|
|
|
for _, m := range msgs {
|
|
|
|
tasks = append(tasks, &InProgressTask{
|
|
|
|
ID: m.ID,
|
|
|
|
Type: m.Type,
|
|
|
|
Payload: m.Payload,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return tasks, nil
|
2019-12-02 07:01:26 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// ListScheduledTasks returns a list of tasks that are scheduled to
|
|
|
|
// be processed in the future.
|
2019-12-02 23:09:43 +08:00
|
|
|
func (i *Inspector) ListScheduledTasks() ([]*ScheduledTask, error) {
|
2019-12-02 07:01:26 +08:00
|
|
|
// TODO(hibiken): Support pagination.
|
2019-12-02 23:09:43 +08:00
|
|
|
return i.rdb.listScheduled()
|
2019-12-02 07:01:26 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// ListRetryTasks returns a list of tasks what will be retried in the
|
|
|
|
// future.
|
2019-12-02 23:09:43 +08:00
|
|
|
func (i *Inspector) ListRetryTasks() ([]*RetryTask, error) {
|
2019-12-02 07:01:26 +08:00
|
|
|
// TODO(hibiken): Support pagination.
|
2019-12-02 23:09:43 +08:00
|
|
|
return i.rdb.listRetry()
|
2019-12-02 07:01:26 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// ListDeadTasks returns a list of tasks that have reached its
|
|
|
|
// maximum retry limit.
|
2019-12-02 23:09:43 +08:00
|
|
|
func (i *Inspector) ListDeadTasks() ([]*DeadTask, error) {
|
2019-12-02 07:01:26 +08:00
|
|
|
// TODO(hibiken): Support pagination.
|
2019-12-02 23:09:43 +08:00
|
|
|
return i.rdb.listDead()
|
2019-12-02 07:01:26 +08:00
|
|
|
}
|