(ui): Fix inconsistent data shown in AggregatingTasks view

This commit is contained in:
Ken Hibino 2022-04-01 11:57:00 -07:00
parent 9de7f054bc
commit d0a8b6b691
6 changed files with 36 additions and 8 deletions

View File

@ -9,6 +9,7 @@ import (
) )
type listGroupsResponse struct { type listGroupsResponse struct {
Queue *queueStateSnapshot `json:"stats"`
Groups []*groupInfo `json:"groups"` Groups []*groupInfo `json:"groups"`
} }
@ -21,8 +22,14 @@ func newListGroupsHandlerFunc(inspector *asynq.Inspector) http.HandlerFunc {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
qinfo, err := inspector.GetQueueInfo(qname)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
resp := listGroupsResponse{ resp := listGroupsResponse{
Queue: toQueueStateSnapshot(qinfo),
Groups: toGroupInfos(groups), Groups: toGroupInfos(groups),
} }
if err := json.NewEncoder(w).Encode(resp); err != nil { if err := json.NewEncoder(w).Encode(resp); err != nil {

View File

@ -306,6 +306,11 @@ func newListAggregatingTasksHandlerFunc(inspector *asynq.Inspector, pf PayloadFo
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
groups, err := inspector.Groups(qname)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
payload := make(map[string]interface{}) payload := make(map[string]interface{})
if len(tasks) == 0 { if len(tasks) == 0 {
// avoid nil for the tasks field in json output. // avoid nil for the tasks field in json output.
@ -314,6 +319,7 @@ func newListAggregatingTasksHandlerFunc(inspector *asynq.Inspector, pf PayloadFo
payload["tasks"] = toAggregatingTasks(tasks, pf) payload["tasks"] = toAggregatingTasks(tasks, pf)
} }
payload["stats"] = toQueueStateSnapshot(qinfo) payload["stats"] = toQueueStateSnapshot(qinfo)
payload["groups"] = toGroupInfos(groups)
writeResponseJSON(w, payload) writeResponseJSON(w, payload)
} }
} }

View File

@ -59,6 +59,7 @@ import {
deleteAggregatingTask, deleteAggregatingTask,
runAggregatingTask, runAggregatingTask,
archiveAggregatingTask, archiveAggregatingTask,
ListAggregatingTasksResponse,
} from "../api"; } from "../api";
import { Dispatch } from "redux"; import { Dispatch } from "redux";
import { toErrorString, toErrorStringWithHttpStatus } from "../utils"; import { toErrorString, toErrorStringWithHttpStatus } from "../utils";
@ -418,7 +419,7 @@ interface ListAggregatingTasksSuccessAction {
type: typeof LIST_AGGREGATING_TASKS_SUCCESS; type: typeof LIST_AGGREGATING_TASKS_SUCCESS;
queue: string; queue: string;
group: string; group: string;
payload: ListTasksResponse; payload: ListAggregatingTasksResponse;
} }
interface ListAggregatingTasksErrorAction { interface ListAggregatingTasksErrorAction {

View File

@ -18,6 +18,12 @@ export interface ListTasksResponse {
stats: Queue; stats: Queue;
} }
export interface ListAggregatingTasksResponse {
tasks: TaskInfo[];
stats: Queue;
groups: GroupInfo[];
}
export interface ListServersResponse { export interface ListServersResponse {
servers: ServerInfo[]; servers: ServerInfo[];
} }
@ -67,6 +73,7 @@ export interface ListQueueStatsResponse {
} }
export interface ListGroupsResponse { export interface ListGroupsResponse {
stats: Queue;
groups: GroupInfo[]; groups: GroupInfo[];
} }
@ -539,7 +546,7 @@ export async function listAggregatingTasks(
qname: string, qname: string,
gname: string, gname: string,
pageOpts?: PaginationOptions pageOpts?: PaginationOptions
): Promise<ListTasksResponse> { ): Promise<ListAggregatingTasksResponse> {
let url = `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks`; let url = `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks`;
if (pageOpts) { if (pageOpts) {
url += `?${queryString.stringify(pageOpts)}`; url += `?${queryString.stringify(pageOpts)}`;

View File

@ -4,6 +4,10 @@ import {
LIST_GROUPS_ERROR, LIST_GROUPS_ERROR,
LIST_GROUPS_SUCCESS, LIST_GROUPS_SUCCESS,
} from "../actions/groupsActions"; } from "../actions/groupsActions";
import {
LIST_AGGREGATING_TASKS_SUCCESS,
TasksActionTypes,
} from "../actions/tasksActions";
import { GroupInfo } from "../api"; import { GroupInfo } from "../api";
interface GroupsState { interface GroupsState {
@ -20,7 +24,7 @@ const initialState: GroupsState = {
function groupsReducer( function groupsReducer(
state = initialState, state = initialState,
action: GroupsActionTypes action: GroupsActionTypes | TasksActionTypes
): GroupsState { ): GroupsState {
switch (action.type) { switch (action.type) {
case LIST_GROUPS_BEGIN: case LIST_GROUPS_BEGIN:
@ -37,6 +41,12 @@ function groupsReducer(
data: action.payload.groups, data: action.payload.groups,
}; };
case LIST_AGGREGATING_TASKS_SUCCESS:
return {
...state,
data: action.payload.groups,
};
default: default:
return state; return state;
} }

View File

@ -968,10 +968,7 @@ function queuesReducer(
} }
return { return {
...queueInfo, ...queueInfo,
currentStats: { currentStats: action.payload.stats,
...queueInfo.currentStats,
groups: action.payload.groups.length,
},
}; };
}); });
return { ...state, data: newData }; return { ...state, data: newData };