diff --git a/frontend/src/api/trace/getSpansAggregate.ts b/frontend/src/api/trace/getSpansAggregate.ts index 1f63f034e4..b630e8ce30 100644 --- a/frontend/src/api/trace/getSpansAggregate.ts +++ b/frontend/src/api/trace/getSpansAggregate.ts @@ -15,6 +15,7 @@ const getSpanAggregate = async ( end: String(props.end), limit: props.limit, offset: props.offset, + order: props.order, }; const exclude: TraceFilterEnum[] = []; diff --git a/frontend/src/container/Trace/TraceTable/index.tsx b/frontend/src/container/Trace/TraceTable/index.tsx index 919f680778..3eed2066bb 100644 --- a/frontend/src/container/Trace/TraceTable/index.tsx +++ b/frontend/src/container/Trace/TraceTable/index.tsx @@ -1,26 +1,24 @@ -import React from 'react'; - -import Table, { ColumnsType } from 'antd/lib/table'; import { TableProps, Tag } from 'antd'; - +import Table, { ColumnsType } from 'antd/lib/table'; +import ROUTES from 'constants/routes'; +import dayjs from 'dayjs'; +import duration from 'dayjs/plugin/duration'; +import history from 'lib/history'; +import React from 'react'; import { connect, useSelector } from 'react-redux'; -import { AppState } from 'store/reducers'; -import { TraceReducer } from 'types/reducer/trace'; import { bindActionCreators } from 'redux'; import { ThunkDispatch } from 'redux-thunk'; -import AppActions from 'types/actions'; import { GetSpansAggregate, GetSpansAggregateProps, } from 'store/actions/trace/getInitialSpansAggregate'; +import { AppState } from 'store/reducers'; +import AppActions from 'types/actions'; import { GlobalReducer } from 'types/reducer/globalTime'; -import dayjs from 'dayjs'; -import duration from 'dayjs/plugin/duration'; -import history from 'lib/history'; -import ROUTES from 'constants/routes'; +import { TraceReducer } from 'types/reducer/trace'; dayjs.extend(duration); -const TraceTable = ({ getSpansAggregate }: TraceProps) => { +const TraceTable = ({ getSpansAggregate }: TraceProps): JSX.Element => { const { spansAggregate, selectedFilter, @@ -41,17 +39,16 @@ const TraceTable = ({ getSpansAggregate }: TraceProps) => { title: 'Date', dataIndex: 'timestamp', key: 'timestamp', - render: (value: TableType['timestamp']) => { + sorter: true, + render: (value: TableType['timestamp']): JSX.Element => { const day = dayjs(value); return
{day.format('DD/MM/YYYY hh:mm:ss A')}
; }, - sorter: (a, b) => dayjs(a.timestamp).diff(dayjs(b.timestamp)), }, { title: 'Service', dataIndex: 'serviceName', key: 'serviceName', - sorter: (a, b) => a.serviceName.length - b.serviceName.length, }, { title: 'Operation', @@ -62,22 +59,19 @@ const TraceTable = ({ getSpansAggregate }: TraceProps) => { title: 'Duration', dataIndex: 'durationNano', key: 'durationNano', - sorter: (a, b) => a.durationNano - b.durationNano, - render: (value: TableType['durationNano']) => { - return ( -
- {`${dayjs - .duration({ milliseconds: value / 1000000 }) - .asMilliseconds()} ms`} -
- ); - }, + render: (value: TableType['durationNano']): JSX.Element => ( +
+ {`${dayjs + .duration({ milliseconds: value / 1000000 }) + .asMilliseconds()} ms`} +
+ ), }, { title: 'Method', dataIndex: 'httpMethod', key: 'httpMethod', - render: (value: TableType['httpMethod']) => { + render: (value: TableType['httpMethod']): JSX.Element => { if (value.length === 0) { return
-
; } @@ -88,8 +82,7 @@ const TraceTable = ({ getSpansAggregate }: TraceProps) => { title: 'Status Code', dataIndex: 'httpCode', key: 'httpCode', - sorter: (a, b) => a.httpCode.length - b.httpCode.length, - render: (value: TableType['httpCode']) => { + render: (value: TableType['httpCode']): JSX.Element => { if (value.length === 0) { return
-
; } @@ -98,7 +91,13 @@ const TraceTable = ({ getSpansAggregate }: TraceProps) => { }, ]; - const onChangeHandler: TableProps['onChange'] = (props) => { + const onChangeHandler: TableProps['onChange'] = ( + props, + _, + sort, + ) => { + const { order = 'ascend' } = sort; + if (props.current && props.pageSize) { getSpansAggregate({ maxTime: globalTime.maxTime, @@ -107,6 +106,7 @@ const TraceTable = ({ getSpansAggregate }: TraceProps) => { current: props.current, pageSize: props.pageSize, selectedTags, + order: order === 'ascend' ? 'ascending' : 'descending', }); } }; @@ -118,7 +118,7 @@ const TraceTable = ({ getSpansAggregate }: TraceProps) => { loading={loading || filterLoading} columns={columns} onRow={(record) => ({ - onClick: () => { + onClick: (): void => { history.push({ pathname: ROUTES.TRACE + '/' + record.traceID, state: { diff --git a/frontend/src/store/actions/trace/getInitialSpansAggregate.ts b/frontend/src/store/actions/trace/getInitialSpansAggregate.ts index 0ae6362eea..11d061e079 100644 --- a/frontend/src/store/actions/trace/getInitialSpansAggregate.ts +++ b/frontend/src/store/actions/trace/getInitialSpansAggregate.ts @@ -1,11 +1,12 @@ +import { notification } from 'antd'; +import getSpansAggregate from 'api/trace/getSpansAggregate'; import { Dispatch, Store } from 'redux'; import { AppState } from 'store/reducers'; import AppActions from 'types/actions'; import { UPDATE_SPANS_AGGREEGATE } from 'types/actions/trace'; -import getSpansAggregate from 'api/trace/getSpansAggregate'; +import { Props as GetSpanAggregateProps } from 'types/api/trace/getSpanAggregate'; import { GlobalReducer } from 'types/reducer/globalTime'; import { TraceReducer } from 'types/reducer/trace'; -import { notification } from 'antd'; export const GetSpansAggregate = ( props: GetSpansAggregateProps, @@ -52,6 +53,7 @@ export const GetSpansAggregate = ( offset: props.current * props.pageSize - props.pageSize, selectedTags: props.selectedTags, isFilterExclude: traces.isFilterExclude, + order: props.order, }); if (response.statusCode === 200) { @@ -112,4 +114,5 @@ export interface GetSpansAggregateProps { current: TraceReducer['spansAggregate']['currentPage']; pageSize: TraceReducer['spansAggregate']['pageSize']; selectedTags: TraceReducer['selectedTags']; + order: GetSpanAggregateProps['order']; } diff --git a/frontend/src/types/api/trace/getSpanAggregate.ts b/frontend/src/types/api/trace/getSpanAggregate.ts index 0c2232efa9..3263621009 100644 --- a/frontend/src/types/api/trace/getSpanAggregate.ts +++ b/frontend/src/types/api/trace/getSpanAggregate.ts @@ -7,6 +7,7 @@ export interface Props { limit: number; offset: number; selectedTags: TraceReducer['selectedTags']; + order?: 'descending' | 'ascending'; isFilterExclude: TraceReducer['isFilterExclude']; }