mirror of
https://github.com/hibiken/asynq.git
synced 2025-10-03 05:12:01 +08:00
(cli): Show different task attributes based on task state
This commit is contained in:
@@ -286,6 +286,95 @@ func shouldShowGroupTable(state *State) bool {
|
|||||||
return state.taskState == asynq.TaskStateAggregating && state.selectedGroup == nil
|
return state.taskState == asynq.TaskStateAggregating && state.selectedGroup == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getTaskTableColumnConfig(taskState asynq.TaskState) []*columnConfig[*asynq.TaskInfo] {
|
||||||
|
switch taskState {
|
||||||
|
case asynq.TaskStateActive:
|
||||||
|
return activeTaskTableColumns
|
||||||
|
case asynq.TaskStatePending:
|
||||||
|
return pendingTaskTableColumns
|
||||||
|
case asynq.TaskStateAggregating:
|
||||||
|
return aggregatingTaskTableColumns
|
||||||
|
case asynq.TaskStateScheduled:
|
||||||
|
return scheduledTaskTableColumns
|
||||||
|
case asynq.TaskStateRetry:
|
||||||
|
return retryTaskTableColumns
|
||||||
|
case asynq.TaskStateArchived:
|
||||||
|
return archivedTaskTableColumns
|
||||||
|
case asynq.TaskStateCompleted:
|
||||||
|
return completedTaskTableColumns
|
||||||
|
}
|
||||||
|
panic("unknown task state")
|
||||||
|
}
|
||||||
|
|
||||||
|
var activeTaskTableColumns = []*columnConfig[*asynq.TaskInfo]{
|
||||||
|
{"ID", alignLeft, func(t *asynq.TaskInfo) string { return t.ID }},
|
||||||
|
{"Type", alignLeft, func(t *asynq.TaskInfo) string { return t.Type }},
|
||||||
|
{"Retried", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.Retried) }},
|
||||||
|
{"Max Retry", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.MaxRetry) }},
|
||||||
|
{"Payload", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Payload) }},
|
||||||
|
}
|
||||||
|
|
||||||
|
var pendingTaskTableColumns = []*columnConfig[*asynq.TaskInfo]{
|
||||||
|
{"ID", alignLeft, func(t *asynq.TaskInfo) string { return t.ID }},
|
||||||
|
{"Type", alignLeft, func(t *asynq.TaskInfo) string { return t.Type }},
|
||||||
|
{"Retried", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.Retried) }},
|
||||||
|
{"Max Retry", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.MaxRetry) }},
|
||||||
|
{"Payload", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Payload) }},
|
||||||
|
}
|
||||||
|
|
||||||
|
var aggregatingTaskTableColumns = []*columnConfig[*asynq.TaskInfo]{
|
||||||
|
{"ID", alignLeft, func(t *asynq.TaskInfo) string { return t.ID }},
|
||||||
|
{"Type", alignLeft, func(t *asynq.TaskInfo) string { return t.Type }},
|
||||||
|
{"Payload", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Payload) }},
|
||||||
|
{"Group", alignLeft, func(t *asynq.TaskInfo) string { return t.Group }},
|
||||||
|
}
|
||||||
|
|
||||||
|
var scheduledTaskTableColumns = []*columnConfig[*asynq.TaskInfo]{
|
||||||
|
{"ID", alignLeft, func(t *asynq.TaskInfo) string { return t.ID }},
|
||||||
|
{"Type", alignLeft, func(t *asynq.TaskInfo) string { return t.Type }},
|
||||||
|
{"Next Process Time", alignLeft, func(t *asynq.TaskInfo) string {
|
||||||
|
return fmt.Sprintf("in %v", (t.NextProcessAt.Sub(time.Now()).Round(time.Second))) // FIXME: the cells are not aligned with the header
|
||||||
|
}},
|
||||||
|
{"Payload", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Payload) }},
|
||||||
|
}
|
||||||
|
|
||||||
|
var retryTaskTableColumns = []*columnConfig[*asynq.TaskInfo]{
|
||||||
|
{"ID", alignLeft, func(t *asynq.TaskInfo) string { return t.ID }},
|
||||||
|
{"Type", alignLeft, func(t *asynq.TaskInfo) string { return t.Type }},
|
||||||
|
{"Retried", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.Retried) }},
|
||||||
|
{"Max Retry", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.MaxRetry) }},
|
||||||
|
{"Last Failure", alignLeft, func(t *asynq.TaskInfo) string { return t.LastErr }},
|
||||||
|
{"Last Failure Time", alignLeft, func(t *asynq.TaskInfo) string {
|
||||||
|
return t.LastFailedAt.Format("2006-01-02 15:04:05 MST")
|
||||||
|
}},
|
||||||
|
{"Next Process Time", alignLeft, func(t *asynq.TaskInfo) string {
|
||||||
|
return fmt.Sprintf("in %v", (t.NextProcessAt.Sub(time.Now()).Round(time.Second)))
|
||||||
|
}},
|
||||||
|
{"Payload", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Payload) }},
|
||||||
|
}
|
||||||
|
|
||||||
|
var archivedTaskTableColumns = []*columnConfig[*asynq.TaskInfo]{
|
||||||
|
{"ID", alignLeft, func(t *asynq.TaskInfo) string { return t.ID }},
|
||||||
|
{"Type", alignLeft, func(t *asynq.TaskInfo) string { return t.Type }},
|
||||||
|
{"Retried", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.Retried) }},
|
||||||
|
{"MaxRetry", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.MaxRetry) }},
|
||||||
|
{"Last Failure", alignLeft, func(t *asynq.TaskInfo) string { return t.LastErr }},
|
||||||
|
{"Last Failure Time", alignLeft, func(t *asynq.TaskInfo) string {
|
||||||
|
return t.LastFailedAt.Format("2006-01-02 15:04:05 MST")
|
||||||
|
}},
|
||||||
|
{"Payload", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Payload) }},
|
||||||
|
}
|
||||||
|
|
||||||
|
var completedTaskTableColumns = []*columnConfig[*asynq.TaskInfo]{
|
||||||
|
{"ID", alignLeft, func(t *asynq.TaskInfo) string { return t.ID }},
|
||||||
|
{"Type", alignLeft, func(t *asynq.TaskInfo) string { return t.Type }},
|
||||||
|
{"Completion Time", alignLeft, func(t *asynq.TaskInfo) string {
|
||||||
|
return t.CompletedAt.Format("2006-01-02 15:04:05 MST")
|
||||||
|
}},
|
||||||
|
{"Payload", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Payload) }}, // TODO: format these bytes correctly
|
||||||
|
{"Result", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Result) }},
|
||||||
|
}
|
||||||
|
|
||||||
func drawTaskTable(d *ScreenDrawer, state *State) {
|
func drawTaskTable(d *ScreenDrawer, state *State) {
|
||||||
if shouldShowGroupTable(state) {
|
if shouldShowGroupTable(state) {
|
||||||
drawGroupTable(d, state)
|
drawGroupTable(d, state)
|
||||||
@@ -294,15 +383,7 @@ func drawTaskTable(d *ScreenDrawer, state *State) {
|
|||||||
if len(state.tasks) == 0 {
|
if len(state.tasks) == 0 {
|
||||||
return // print nothing
|
return // print nothing
|
||||||
}
|
}
|
||||||
// TODO: colConfigs should be different for each state
|
drawTable(d, baseStyle, getTaskTableColumnConfig(state.taskState), state.tasks, state.taskTableRowIdx-1)
|
||||||
colConfigs := []*columnConfig[*asynq.TaskInfo]{
|
|
||||||
{"ID", alignLeft, func(t *asynq.TaskInfo) string { return t.ID }},
|
|
||||||
{"Type", alignLeft, func(t *asynq.TaskInfo) string { return t.Type }},
|
|
||||||
{"Payload", alignLeft, func(t *asynq.TaskInfo) string { return string(t.Payload) }},
|
|
||||||
{"MaxRetry", alignRight, func(t *asynq.TaskInfo) string { return strconv.Itoa(t.MaxRetry) }},
|
|
||||||
{"LastError", alignLeft, func(t *asynq.TaskInfo) string { return t.LastErr }},
|
|
||||||
}
|
|
||||||
drawTable(d, baseStyle, colConfigs, state.tasks, state.taskTableRowIdx-1)
|
|
||||||
|
|
||||||
// Pagination
|
// Pagination
|
||||||
pageSize := taskPageSize(d.Screen())
|
pageSize := taskPageSize(d.Screen())
|
||||||
|
Reference in New Issue
Block a user