mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-12 19:59:04 +08:00
feat: apply resource filters on coming from service details to traces page (#5827)
* feat: apply resource fitlers on coming from service details to traces page * fix: remove value splitting from resourceAttributesToTracesFilterItems * chore: handle 'Not IN' inside resourceAttributesToTracesFilterItems * fix: add resource attributes filter to useGetAPMToTracesQueries * fix: update query on changing resource attributes queries
This commit is contained in:
parent
573d369d4b
commit
47d42e6a57
@ -4,6 +4,8 @@ import ROUTES from 'constants/routes';
|
|||||||
import { routeConfig } from 'container/SideNav/config';
|
import { routeConfig } from 'container/SideNav/config';
|
||||||
import { getQueryString } from 'container/SideNav/helper';
|
import { getQueryString } from 'container/SideNav/helper';
|
||||||
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
|
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
|
||||||
|
import useResourceAttribute from 'hooks/useResourceAttribute';
|
||||||
|
import { resourceAttributesToTracesFilterItems } from 'hooks/useResourceAttribute/utils';
|
||||||
import history from 'lib/history';
|
import history from 'lib/history';
|
||||||
import { traceFilterKeys } from 'pages/TracesExplorer/Filter/filterUtils';
|
import { traceFilterKeys } from 'pages/TracesExplorer/Filter/filterUtils';
|
||||||
import { Dispatch, SetStateAction, useMemo } from 'react';
|
import { Dispatch, SetStateAction, useMemo } from 'react';
|
||||||
@ -142,7 +144,12 @@ export function useGetAPMToTracesQueries({
|
|||||||
filters?: TagFilterItem[];
|
filters?: TagFilterItem[];
|
||||||
}): Query {
|
}): Query {
|
||||||
const { updateAllQueriesOperators } = useQueryBuilder();
|
const { updateAllQueriesOperators } = useQueryBuilder();
|
||||||
|
const { queries } = useResourceAttribute();
|
||||||
|
|
||||||
|
const resourceAttributesFilters = useMemo(
|
||||||
|
() => resourceAttributesToTracesFilterItems(queries),
|
||||||
|
[queries],
|
||||||
|
);
|
||||||
const finalFilters: TagFilterItem[] = [];
|
const finalFilters: TagFilterItem[] = [];
|
||||||
let spanKindFilter: TagFilterItem;
|
let spanKindFilter: TagFilterItem;
|
||||||
let dbCallFilter: TagFilterItem;
|
let dbCallFilter: TagFilterItem;
|
||||||
@ -185,6 +192,10 @@ export function useGetAPMToTracesQueries({
|
|||||||
finalFilters.push(...filters);
|
finalFilters.push(...filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resourceAttributesFilters?.length) {
|
||||||
|
finalFilters.push(...resourceAttributesFilters);
|
||||||
|
}
|
||||||
|
|
||||||
return useMemo(() => {
|
return useMemo(() => {
|
||||||
const updatedQuery = updateAllQueriesOperators(
|
const updatedQuery = updateAllQueriesOperators(
|
||||||
initialQueriesMap.traces,
|
initialQueriesMap.traces,
|
||||||
@ -199,5 +210,5 @@ export function useGetAPMToTracesQueries({
|
|||||||
finalFilters,
|
finalFilters,
|
||||||
);
|
);
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [servicename, updateAllQueriesOperators]);
|
}, [servicename, queries, updateAllQueriesOperators]);
|
||||||
}
|
}
|
||||||
|
@ -50,19 +50,21 @@ function TopOperationsTable({
|
|||||||
const { servicename: encodedServiceName } = params;
|
const { servicename: encodedServiceName } = params;
|
||||||
const servicename = decodeURIComponent(encodedServiceName);
|
const servicename = decodeURIComponent(encodedServiceName);
|
||||||
|
|
||||||
const opFilter: TagFilterItem = {
|
const opFilters: TagFilterItem[] = [
|
||||||
id: uuid().slice(0, 8),
|
{
|
||||||
key: {
|
id: uuid().slice(0, 8),
|
||||||
key: 'name',
|
key: {
|
||||||
dataType: DataTypes.String,
|
key: 'name',
|
||||||
type: 'tag',
|
dataType: DataTypes.String,
|
||||||
isColumn: true,
|
type: 'tag',
|
||||||
isJSON: false,
|
isColumn: true,
|
||||||
id: 'name--string--tag--true',
|
isJSON: false,
|
||||||
|
id: 'name--string--tag--true',
|
||||||
|
},
|
||||||
|
op: 'in',
|
||||||
|
value: [operation],
|
||||||
},
|
},
|
||||||
op: 'in',
|
];
|
||||||
value: [operation],
|
|
||||||
};
|
|
||||||
|
|
||||||
const preparedQuery: Query = {
|
const preparedQuery: Query = {
|
||||||
...apmToTraceQuery,
|
...apmToTraceQuery,
|
||||||
@ -72,7 +74,7 @@ function TopOperationsTable({
|
|||||||
...item,
|
...item,
|
||||||
filters: {
|
filters: {
|
||||||
...item.filters,
|
...item.filters,
|
||||||
items: [...item.filters.items, opFilter],
|
items: [...item.filters.items, ...opFilters],
|
||||||
},
|
},
|
||||||
})),
|
})),
|
||||||
},
|
},
|
||||||
|
@ -93,6 +93,22 @@ export const resourceAttributesToTagFilterItems = (
|
|||||||
value: `${res.tagValue}`.split(','),
|
value: `${res.tagValue}`.split(','),
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
/* Convert resource attributes to trace filters items for queryBuilder */
|
||||||
|
export const resourceAttributesToTracesFilterItems = (
|
||||||
|
queries: IResourceAttribute[],
|
||||||
|
): TagFilterItem[] =>
|
||||||
|
queries.map((res) => ({
|
||||||
|
id: `${res.id}`,
|
||||||
|
key: {
|
||||||
|
key: convertMetricKeyToTrace(res.tagKey),
|
||||||
|
isColumn: false,
|
||||||
|
type: MetricsType.Resource,
|
||||||
|
dataType: DataTypes.String,
|
||||||
|
id: `${convertMetricKeyToTrace(res.tagKey)}--string--resource--true`,
|
||||||
|
},
|
||||||
|
op: `${res.operator === 'Not IN' ? 'nin' : res.operator}`,
|
||||||
|
value: res.tagValue,
|
||||||
|
}));
|
||||||
|
|
||||||
export const OperatorSchema: IOption[] = OperatorConversions.map(
|
export const OperatorSchema: IOption[] = OperatorConversions.map(
|
||||||
(operator) => ({
|
(operator) => ({
|
||||||
|
Loading…
x
Reference in New Issue
Block a user