Files
sentinel/static/app/utils/profiling/hooks/useDifferentialFlamegraphQuery.ts
2024-02-15 17:01:50 +00:00

71 lines
2.4 KiB
TypeScript

import {useMemo} from 'react';
import {RELATIVE_DAYS_WINDOW} from 'sentry/components/events/eventStatisticalDetector/consts';
import {useRelativeDateTime} from 'sentry/utils/profiling/hooks/useRelativeDateTime';
import type {AggregateFlamegraphQueryParameters} from './useAggregateFlamegraphQuery';
import {useAggregateFlamegraphQuery} from './useAggregateFlamegraphQuery';
interface DifferentialFlamegraphQueryParameters {
breakpoint: number;
environments: AggregateFlamegraphQueryParameters['environments'];
fingerprint: string | undefined;
projectID: number | null;
transaction: string;
}
export interface DifferentialFlamegraphQueryResult {
after: ReturnType<typeof useAggregateFlamegraphQuery>;
before: ReturnType<typeof useAggregateFlamegraphQuery>;
}
export function useDifferentialFlamegraphQuery(
params: DifferentialFlamegraphQueryParameters
): DifferentialFlamegraphQueryResult {
const sharedAggregateQueryParams: AggregateFlamegraphQueryParameters = useMemo(() => {
const p: AggregateFlamegraphQueryParameters = {
transaction: params.transaction,
environments: params.environments,
fingerprint: params.fingerprint,
projects:
params.projectID === null || isNaN(params.projectID) ? [] : [params.projectID],
datetime: {},
};
return p;
}, [params.transaction, params.environments, params.projectID, params.fingerprint]);
const regressionDateRange = useRelativeDateTime({
anchor: params.breakpoint,
relativeDays: RELATIVE_DAYS_WINDOW,
});
const beforeAggregateQueryParams: AggregateFlamegraphQueryParameters = useMemo(() => {
return {
...sharedAggregateQueryParams,
datetime: {
start: regressionDateRange.start,
end: new Date(params.breakpoint * 1000),
},
};
}, [sharedAggregateQueryParams, regressionDateRange.start, params.breakpoint]);
const afterAggregateQueryParams: AggregateFlamegraphQueryParameters = useMemo(() => {
return {
...sharedAggregateQueryParams,
datetime: {
start: new Date(params.breakpoint * 1000),
end: regressionDateRange.end,
},
};
}, [sharedAggregateQueryParams, regressionDateRange.end, params.breakpoint]);
const before = useAggregateFlamegraphQuery(beforeAggregateQueryParams);
const after = useAggregateFlamegraphQuery(afterAggregateQueryParams);
return {
before,
after,
};
}