mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
83 lines
2.5 KiB
TypeScript
83 lines
2.5 KiB
TypeScript
import {getInterval} from 'sentry/components/charts/utils';
|
|
import type {Series} from 'sentry/types/echarts';
|
|
import type {MetaType} from 'sentry/utils/discover/eventView';
|
|
import EventView from 'sentry/utils/discover/eventView';
|
|
import type {DiscoverQueryProps} from 'sentry/utils/discover/genericDiscoverQuery';
|
|
import {useGenericDiscoverQuery} from 'sentry/utils/discover/genericDiscoverQuery';
|
|
import {DiscoverDatasets} from 'sentry/utils/discover/types';
|
|
import {MutableSearch} from 'sentry/utils/tokenizeSearch';
|
|
import {useLocation} from 'sentry/utils/useLocation';
|
|
import useOrganization from 'sentry/utils/useOrganization';
|
|
import usePageFilters from 'sentry/utils/usePageFilters';
|
|
|
|
type Props = {
|
|
element: string;
|
|
operation: string;
|
|
page: string;
|
|
};
|
|
|
|
export const useInteractionBreakdownTimeseriesQuery = ({
|
|
operation,
|
|
element,
|
|
page,
|
|
}: Props): {data: Series[]; isLoading: boolean} => {
|
|
const pageFilters = usePageFilters();
|
|
const location = useLocation();
|
|
const organization = useOrganization();
|
|
const search = new MutableSearch(
|
|
`transaction.op:${operation} transaction:${page} interactionElement:${element}`
|
|
);
|
|
const projectTimeSeriesEventView = EventView.fromNewQueryWithPageFilters(
|
|
{
|
|
yAxis: [`p75(transaction.duration)`],
|
|
name: 'Interaction Duration',
|
|
query: search.formatString(),
|
|
version: 2,
|
|
fields: [],
|
|
interval: getInterval(pageFilters.selection.datetime, 'low'),
|
|
dataset: DiscoverDatasets.DISCOVER,
|
|
},
|
|
pageFilters.selection
|
|
);
|
|
|
|
const result = useGenericDiscoverQuery<
|
|
{
|
|
data: any[];
|
|
meta: MetaType;
|
|
},
|
|
DiscoverQueryProps
|
|
>({
|
|
route: 'events-stats',
|
|
eventView: projectTimeSeriesEventView,
|
|
location,
|
|
orgSlug: organization.slug,
|
|
getRequestPayload: () => ({
|
|
...projectTimeSeriesEventView.getEventsAPIPayload(location),
|
|
yAxis: projectTimeSeriesEventView.yAxis,
|
|
topEvents: projectTimeSeriesEventView.topEvents,
|
|
excludeOther: 0,
|
|
partial: 1,
|
|
orderby: undefined,
|
|
interval: projectTimeSeriesEventView.interval,
|
|
}),
|
|
options: {
|
|
enabled: pageFilters.isReady,
|
|
refetchOnWindowFocus: false,
|
|
},
|
|
});
|
|
|
|
const seriesData: Series = {
|
|
seriesName: 'p75(duration)',
|
|
data: [],
|
|
};
|
|
|
|
const transformedData = result?.data?.data.map(data => ({
|
|
name: data[0] as string,
|
|
value: data[1][0].count,
|
|
}));
|
|
|
|
seriesData.data = transformedData ?? [];
|
|
|
|
return {data: [seriesData], isLoading: result.isLoading};
|
|
};
|