feat: sorting duration is added (#1032)

* feat: sorting duration is added in trace filter page
This commit is contained in:
palash-signoz 2022-05-03 21:14:40 +05:30 committed by GitHub
parent f2def38df8
commit e903277143
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 127 additions and 6 deletions

View File

@ -16,6 +16,7 @@ const getSpanAggregate = async (
limit: props.limit, limit: props.limit,
offset: props.offset, offset: props.offset,
order: props.order, order: props.order,
orderParam: props.orderParam,
}; };
const exclude: TraceFilterEnum[] = []; const exclude: TraceFilterEnum[] = [];

View File

@ -120,6 +120,8 @@ function CheckBoxComponent(props: CheckBoxProps): JSX.Element {
userSelected: preUserSelectedMap, userSelected: preUserSelectedMap,
isFilterExclude: preIsFilterExclude, isFilterExclude: preIsFilterExclude,
order: spansAggregate.order, order: spansAggregate.order,
orderParam: spansAggregate.orderParam,
pageSize: spansAggregate.pageSize,
}, },
}); });
@ -134,6 +136,7 @@ function CheckBoxComponent(props: CheckBoxProps): JSX.Element {
preUserSelectedMap, preUserSelectedMap,
spansAggregate.order, spansAggregate.order,
spansAggregate.pageSize, spansAggregate.pageSize,
spansAggregate.orderParam,
); );
} else { } else {
setIsLoading(false); setIsLoading(false);

View File

@ -119,6 +119,7 @@ function Duration(): JSX.Element {
isFilterExclude, isFilterExclude,
order: spansAggregate.order, order: spansAggregate.order,
pageSize: spansAggregate.pageSize, pageSize: spansAggregate.pageSize,
orderParam: spansAggregate.orderParam,
}, },
}); });
@ -131,6 +132,7 @@ function Duration(): JSX.Element {
userSelectedFilter, userSelectedFilter,
spansAggregate.order, spansAggregate.order,
spansAggregate.pageSize, spansAggregate.pageSize,
spansAggregate.orderParam,
); );
} }
}; };

View File

@ -103,6 +103,7 @@ function PanelHeading(props: PanelHeadingProps): JSX.Element {
isFilterExclude, isFilterExclude,
order: spansAggregate.order, order: spansAggregate.order,
pageSize: spansAggregate.pageSize, pageSize: spansAggregate.pageSize,
orderParam: spansAggregate.orderParam,
}, },
}); });
@ -115,6 +116,7 @@ function PanelHeading(props: PanelHeadingProps): JSX.Element {
getPreUserSelected, getPreUserSelected,
spansAggregate.order, spansAggregate.order,
spansAggregate.pageSize, spansAggregate.pageSize,
spansAggregate.orderParam,
); );
} else { } else {
notification.error({ notification.error({
@ -154,6 +156,7 @@ function PanelHeading(props: PanelHeadingProps): JSX.Element {
isFilterExclude, isFilterExclude,
order: spansAggregate.order, order: spansAggregate.order,
pageSize: spansAggregate.pageSize, pageSize: spansAggregate.pageSize,
orderParam: spansAggregate.orderParam,
}, },
}); });
@ -166,6 +169,7 @@ function PanelHeading(props: PanelHeadingProps): JSX.Element {
userSelectedFilter, userSelectedFilter,
spansAggregate.order, spansAggregate.order,
spansAggregate.pageSize, spansAggregate.pageSize,
spansAggregate.orderParam,
); );
}; };
@ -205,6 +209,7 @@ function PanelHeading(props: PanelHeadingProps): JSX.Element {
isFilterExclude: postIsFilterExclude, isFilterExclude: postIsFilterExclude,
order: spansAggregate.order, order: spansAggregate.order,
pageSize: spansAggregate.pageSize, pageSize: spansAggregate.pageSize,
orderParam: spansAggregate.orderParam,
}, },
}); });
@ -217,6 +222,7 @@ function PanelHeading(props: PanelHeadingProps): JSX.Element {
preUserSelected, preUserSelected,
spansAggregate.order, spansAggregate.order,
spansAggregate.pageSize, spansAggregate.pageSize,
spansAggregate.orderParam,
); );
} else { } else {
notification.error({ notification.error({

View File

@ -97,6 +97,7 @@ function Search({
isFilterExclude: traces.isFilterExclude, isFilterExclude: traces.isFilterExclude,
order: traces.spansAggregate.order, order: traces.spansAggregate.order,
pageSize: traces.spansAggregate.pageSize, pageSize: traces.spansAggregate.pageSize,
orderParam: traces.spansAggregate.orderParam,
}, },
}); });
@ -109,6 +110,7 @@ function Search({
traces.userSelectedFilter, traces.userSelectedFilter,
traces.spansAggregate.order, traces.spansAggregate.order,
traces.spansAggregate.pageSize, traces.spansAggregate.pageSize,
traces.spansAggregate.orderParam,
); );
}; };

View File

@ -12,6 +12,7 @@ import { AppState } from 'store/reducers';
import AppActions from 'types/actions'; import AppActions from 'types/actions';
import { import {
UPDATE_SPAN_ORDER, UPDATE_SPAN_ORDER,
UPDATE_SPAN_ORDER_PARAMS,
UPDATE_SPANS_AGGREGATE_PAGE_NUMBER, UPDATE_SPANS_AGGREGATE_PAGE_NUMBER,
UPDATE_SPANS_AGGREGATE_PAGE_SIZE, UPDATE_SPANS_AGGREGATE_PAGE_SIZE,
} from 'types/actions/trace'; } from 'types/actions/trace';
@ -80,6 +81,7 @@ function TraceTable(): JSX.Element {
title: 'Duration', title: 'Duration',
dataIndex: 'durationNano', dataIndex: 'durationNano',
key: 'durationNano', key: 'durationNano',
sorter: true,
render: (value: TableType['durationNano']): JSX.Element => ( render: (value: TableType['durationNano']): JSX.Element => (
<Typography> <Typography>
{`${dayjs {`${dayjs
@ -103,6 +105,16 @@ function TraceTable(): JSX.Element {
}, },
]; ];
const getSortKey = (key: string): string => {
if (key === 'durationNano') {
return 'durationNano';
}
if (key === 'timestamp') {
return 'timestamp';
}
return '';
};
const onChangeHandler: TableProps<TableType>['onChange'] = ( const onChangeHandler: TableProps<TableType>['onChange'] = (
props, props,
_, _,
@ -111,7 +123,10 @@ function TraceTable(): JSX.Element {
if (!Array.isArray(sort)) { if (!Array.isArray(sort)) {
const { order = spansAggregateOrder } = sort; const { order = spansAggregateOrder } = sort;
if (props.current && props.pageSize) { if (props.current && props.pageSize) {
const spanOrder = order || spansAggregateOrder; const spanOrder = order === 'ascend' ? 'ascending' : 'descending';
const orderParam = getSortKey(sort.field as string);
console.log({ spanOrder });
dispatch({ dispatch({
type: UPDATE_SPAN_ORDER, type: UPDATE_SPAN_ORDER,
@ -120,6 +135,13 @@ function TraceTable(): JSX.Element {
}, },
}); });
dispatch({
type: UPDATE_SPAN_ORDER_PARAMS,
payload: {
orderParam,
},
});
dispatch({ dispatch({
type: UPDATE_SPANS_AGGREGATE_PAGE_SIZE, type: UPDATE_SPANS_AGGREGATE_PAGE_SIZE,
payload: { payload: {
@ -143,6 +165,7 @@ function TraceTable(): JSX.Element {
userSelectedFilter, userSelectedFilter,
spanOrder, spanOrder,
props.pageSize, props.pageSize,
orderParam,
); );
} }
} }
@ -172,7 +195,6 @@ function TraceTable(): JSX.Element {
position: ['bottomLeft'], position: ['bottomLeft'],
total, total,
}} }}
sortDirections={['ascend', 'descend']}
/> />
); );
} }

View File

@ -64,7 +64,8 @@ function Trace({
current: spansAggregate.currentPage, current: spansAggregate.currentPage,
pageSize: spansAggregate.pageSize, pageSize: spansAggregate.pageSize,
selectedTags, selectedTags,
order: spansAggregate.order === 'ascend' ? 'ascending' : 'descending', order: spansAggregate.order,
orderParam: spansAggregate.orderParam,
}); });
}, [ }, [
selectedTags, selectedTags,
@ -75,6 +76,7 @@ function Trace({
spansAggregate.currentPage, spansAggregate.currentPage,
spansAggregate.pageSize, spansAggregate.pageSize,
spansAggregate.order, spansAggregate.order,
spansAggregate.orderParam,
]); ]);
useEffect(() => { useEffect(() => {

View File

@ -13,6 +13,7 @@ import { TraceFilterEnum, TraceReducer } from 'types/reducer/trace';
import { import {
isTraceFilterEnum, isTraceFilterEnum,
parseAggregateOrderParams,
parseFilterExclude, parseFilterExclude,
parseFilterToFetchData, parseFilterToFetchData,
parseIsSkippedSelection, parseIsSkippedSelection,
@ -85,6 +86,11 @@ export const GetInitialTraceFilter = (
traces.selectedTags, traces.selectedTags,
); );
const parsedOrderParams = parseAggregateOrderParams(
query,
traces.spansAggregate.orderParam,
);
const parsedFilter = parseQueryIntoFilter(query, traces.filter); const parsedFilter = parseQueryIntoFilter(query, traces.filter);
// now filter are not matching we need to fetch the data and make in sync // now filter are not matching we need to fetch the data and make in sync
@ -162,6 +168,7 @@ export const GetInitialTraceFilter = (
isFilterExclude: getIsFilterExcluded.currentValue, isFilterExclude: getIsFilterExcluded.currentValue,
order: parsedQueryOrder.currentValue, order: parsedQueryOrder.currentValue,
pageSize: parsedPageSize.currentValue, pageSize: parsedPageSize.currentValue,
orderParam: parsedOrderParams.currentValue,
}, },
}); });
} else { } else {

View File

@ -31,7 +31,7 @@ export const GetSpansAggregate = (
return; return;
} }
const order = props.order === 'ascending' ? 'ascend' : 'descend'; const { order = '' } = props;
try { try {
// triggering loading // triggering loading
@ -46,6 +46,7 @@ export const GetSpansAggregate = (
total: spansAggregate.total, total: spansAggregate.total,
pageSize: props.pageSize, pageSize: props.pageSize,
order, order,
orderParam: spansAggregate.orderParam,
}, },
}, },
}); });
@ -59,6 +60,7 @@ export const GetSpansAggregate = (
selectedTags: props.selectedTags, selectedTags: props.selectedTags,
isFilterExclude: traces.isFilterExclude, isFilterExclude: traces.isFilterExclude,
order, order,
orderParam: props.orderParam,
}); });
if (response.statusCode === 200) { if (response.statusCode === 200) {
@ -73,6 +75,7 @@ export const GetSpansAggregate = (
total: response.payload.totalSpans, total: response.payload.totalSpans,
pageSize: props.pageSize, pageSize: props.pageSize,
order, order,
orderParam: spansAggregate.orderParam,
}, },
}, },
}); });
@ -86,6 +89,7 @@ export const GetSpansAggregate = (
traces.userSelectedFilter, traces.userSelectedFilter,
order, order,
traces.spansAggregate.pageSize, traces.spansAggregate.pageSize,
spansAggregate.orderParam,
); );
} else { } else {
notification.error({ notification.error({
@ -103,6 +107,7 @@ export const GetSpansAggregate = (
total: spansAggregate.total, total: spansAggregate.total,
pageSize: props.pageSize, pageSize: props.pageSize,
order, order,
orderParam: spansAggregate.orderParam,
}, },
}, },
}); });
@ -119,6 +124,7 @@ export const GetSpansAggregate = (
total: spansAggregate.total, total: spansAggregate.total,
pageSize: props.pageSize, pageSize: props.pageSize,
order, order,
orderParam: spansAggregate.orderParam,
}, },
}, },
}); });
@ -134,4 +140,5 @@ export interface GetSpansAggregateProps {
pageSize: TraceReducer['spansAggregate']['pageSize']; pageSize: TraceReducer['spansAggregate']['pageSize'];
selectedTags: TraceReducer['selectedTags']; selectedTags: TraceReducer['selectedTags'];
order: GetSpanAggregateProps['order']; order: GetSpanAggregateProps['order'];
orderParam: GetSpanAggregateProps['orderParam'];
} }

View File

@ -8,3 +8,4 @@ export * from './skippedSelected';
export * from './spanAggregateCurrentPage'; export * from './spanAggregateCurrentPage';
export * from './spanAggregateCurrentPageSize'; export * from './spanAggregateCurrentPageSize';
export * from './spanAggregateOrder'; export * from './spanAggregateOrder';
export * from './spanAggregateOrderParam';

View File

@ -0,0 +1,39 @@
import { TraceReducer } from 'types/reducer/trace';
import { ParsedUrl } from '../util';
export const parseAggregateOrderParams = (
query: string,
stateCurrent: TraceReducer['spansAggregate']['orderParam'],
): ParsedUrl<TraceReducer['spansAggregate']['orderParam']> => {
const url = new URLSearchParams(query);
let current = '';
const selected = url.get('spanAggregateOrderParam');
if (selected) {
try {
const parsedValue = selected;
if (parsedValue && typeof parsedValue === 'string') {
current = parsedValue;
}
} catch (error) {
console.log(error);
console.log('error while parsing json');
}
}
if (selected) {
return {
currentValue: current,
urlValue: current,
};
}
return {
currentValue: stateCurrent,
urlValue: current,
};
};

View File

@ -48,6 +48,7 @@ export const SelectedTraceFilter = (props: {
traces.userSelectedFilter, traces.userSelectedFilter,
traces.spansAggregate.order, traces.spansAggregate.order,
traces.spansAggregate.pageSize, traces.spansAggregate.pageSize,
traces.spansAggregate.orderParam,
); );
}; };
}; };

View File

@ -24,6 +24,7 @@ export const updateURL = (
userSelectedFilter: TraceReducer['userSelectedFilter'], userSelectedFilter: TraceReducer['userSelectedFilter'],
spanAggregateOrder: TraceReducer['spansAggregate']['order'], spanAggregateOrder: TraceReducer['spansAggregate']['order'],
spanAggregateCurrentPageSize: TraceReducer['spansAggregate']['pageSize'], spanAggregateCurrentPageSize: TraceReducer['spansAggregate']['pageSize'],
spanAggregateOrderParam: TraceReducer['spansAggregate']['orderParam'],
): void => { ): void => {
const search = new URLSearchParams(window.location.search); const search = new URLSearchParams(window.location.search);
const preResult: { key: string; value: string }[] = []; const preResult: { key: string; value: string }[] = [];
@ -38,6 +39,7 @@ export const updateURL = (
'spanAggregateCurrentPage', 'spanAggregateCurrentPage',
'spanAggregateOrder', 'spanAggregateOrder',
'spanAggregateCurrentPageSize', 'spanAggregateCurrentPageSize',
'spanAggregateOrderParam',
]; ];
search.forEach((value, key) => { search.forEach((value, key) => {
@ -62,7 +64,7 @@ export const updateURL = (
Object.fromEntries(isFilterExclude), Object.fromEntries(isFilterExclude),
)}&userSelectedFilter=${JSON.stringify( )}&userSelectedFilter=${JSON.stringify(
Object.fromEntries(userSelectedFilter), Object.fromEntries(userSelectedFilter),
)}&spanAggregateCurrentPage=${spanAggregateCurrentPage}&spanAggregateOrder=${spanAggregateOrder}&spanAggregateCurrentPageSize=${spanAggregateCurrentPageSize}`, )}&spanAggregateCurrentPage=${spanAggregateCurrentPage}&spanAggregateOrder=${spanAggregateOrder}&spanAggregateCurrentPageSize=${spanAggregateCurrentPageSize}&spanAggregateOrderParam=${spanAggregateOrderParam}`,
); );
}; };

View File

@ -10,6 +10,7 @@ import {
UPDATE_SELECTED_GROUP_BY, UPDATE_SELECTED_GROUP_BY,
UPDATE_SELECTED_TAGS, UPDATE_SELECTED_TAGS,
UPDATE_SPAN_ORDER, UPDATE_SPAN_ORDER,
UPDATE_SPAN_ORDER_PARAMS,
UPDATE_SPANS_AGGREGATE, UPDATE_SPANS_AGGREGATE,
UPDATE_SPANS_AGGREGATE_PAGE_NUMBER, UPDATE_SPANS_AGGREGATE_PAGE_NUMBER,
UPDATE_SPANS_AGGREGATE_PAGE_SIZE, UPDATE_SPANS_AGGREGATE_PAGE_SIZE,
@ -41,6 +42,7 @@ const initialValue: TraceReducer = {
total: 0, total: 0,
pageSize: 10, pageSize: 10,
order: 'ascend', order: 'ascend',
orderParam: '',
}, },
selectedGroupBy: '', selectedGroupBy: '',
selectedFunction: 'count', selectedFunction: 'count',
@ -77,6 +79,7 @@ const traceReducer = (
isFilterExclude, isFilterExclude,
order, order,
pageSize, pageSize,
orderParam,
} = payload; } = payload;
return { return {
@ -92,6 +95,7 @@ const traceReducer = (
currentPage: current, currentPage: current,
pageSize, pageSize,
order, order,
orderParam,
}, },
}; };
} }
@ -237,6 +241,16 @@ const traceReducer = (
}; };
} }
case UPDATE_SPAN_ORDER_PARAMS: {
return {
...state,
spansAggregate: {
...state.spansAggregate,
orderParam: action.payload.orderParam,
},
};
}
default: default:
return state; return state;
} }

View File

@ -30,6 +30,7 @@ export const UPDATE_SPANS_AGGREGATE_PAGE_NUMBER =
'UPDATE_SPANS_AGGREGATE_PAGE_NUMBER'; 'UPDATE_SPANS_AGGREGATE_PAGE_NUMBER';
export const UPDATE_SPANS_AGGREGATE_PAGE_SIZE = export const UPDATE_SPANS_AGGREGATE_PAGE_SIZE =
'UPDATE_SPANS_AGGREGATE_PAGE_SIZE'; 'UPDATE_SPANS_AGGREGATE_PAGE_SIZE';
export const UPDATE_SPAN_ORDER_PARAMS = 'UPDATE_SPAN_ORDER_PARAMS';
export interface UpdateFilter { export interface UpdateFilter {
type: typeof UPDATE_TRACE_FILTER; type: typeof UPDATE_TRACE_FILTER;
@ -78,6 +79,7 @@ export interface UpdateAllFilters {
isFilterExclude: TraceReducer['isFilterExclude']; isFilterExclude: TraceReducer['isFilterExclude'];
order: TraceReducer['spansAggregate']['order']; order: TraceReducer['spansAggregate']['order'];
pageSize: TraceReducer['spansAggregate']['pageSize']; pageSize: TraceReducer['spansAggregate']['pageSize'];
orderParam: TraceReducer['spansAggregate']['orderParam'];
}; };
} }
@ -178,6 +180,13 @@ export interface UpdateSpanSize {
}; };
} }
export interface UpdateSpanParams {
type: typeof UPDATE_SPAN_ORDER_PARAMS;
payload: {
orderParam: TraceReducer['spansAggregate']['orderParam'];
};
}
export type TraceActions = export type TraceActions =
| UpdateFilter | UpdateFilter
| GetTraceFilter | GetTraceFilter
@ -198,4 +207,5 @@ export type TraceActions =
| UpdateFilterExclude | UpdateFilterExclude
| UpdateSpanOrder | UpdateSpanOrder
| UpdateSpansAggregatePageNumber | UpdateSpansAggregatePageNumber
| UpdateSpanSize; | UpdateSpanSize
| UpdateSpanParams;

View File

@ -9,6 +9,7 @@ export interface Props {
selectedTags: TraceReducer['selectedTags']; selectedTags: TraceReducer['selectedTags'];
order?: TraceReducer['spansAggregate']['order']; order?: TraceReducer['spansAggregate']['order'];
isFilterExclude: TraceReducer['isFilterExclude']; isFilterExclude: TraceReducer['isFilterExclude'];
orderParam: TraceReducer['spansAggregate']['orderParam'];
} }
export type PayloadProps = { export type PayloadProps = {

View File

@ -21,6 +21,7 @@ export interface TraceReducer {
total: number; total: number;
pageSize: number; pageSize: number;
order: string; order: string;
orderParam: string;
}; };
selectedGroupBy: string; selectedGroupBy: string;
selectedFunction: string; selectedFunction: string;