|
@@ -0,0 +1,76 @@
|
|
|
+import {
|
|
|
+ PERFORMANCE_SCORE_MEDIANS,
|
|
|
+ PERFORMANCE_SCORE_P90S,
|
|
|
+} from 'sentry/views/performance/browser/webVitals/utils/queries/rawWebVitalsQueries/calculatePerformanceScore';
|
|
|
+import {useTransactionSamplesWebVitalsQuery} from 'sentry/views/performance/browser/webVitals/utils/queries/useTransactionSamplesWebVitalsQuery';
|
|
|
+import type {
|
|
|
+ TransactionSampleRowWithScore,
|
|
|
+ WebVitals,
|
|
|
+} from 'sentry/views/performance/browser/webVitals/utils/types';
|
|
|
+
|
|
|
+type Props = {
|
|
|
+ enabled: boolean;
|
|
|
+ transaction: string;
|
|
|
+ webVital: WebVitals | null;
|
|
|
+};
|
|
|
+
|
|
|
+export function useGoodMehAndBadTransactionsSamplesQuery({
|
|
|
+ transaction,
|
|
|
+ webVital,
|
|
|
+ enabled,
|
|
|
+}: Props) {
|
|
|
+ const {data: goodData, isLoading: isGoodTransactionWebVitalsQueryLoading} =
|
|
|
+ useTransactionSamplesWebVitalsQuery({
|
|
|
+ limit: 3,
|
|
|
+ transaction: transaction ?? '',
|
|
|
+ query: webVital
|
|
|
+ ? `measurements.${webVital}:<${PERFORMANCE_SCORE_P90S[webVital]}`
|
|
|
+ : undefined,
|
|
|
+ enabled,
|
|
|
+ withProfiles: true,
|
|
|
+ sortName: 'webVitalSort',
|
|
|
+ webVital: webVital ?? undefined,
|
|
|
+ });
|
|
|
+
|
|
|
+ const {data: mehData, isLoading: isMehTransactionWebVitalsQueryLoading} =
|
|
|
+ useTransactionSamplesWebVitalsQuery({
|
|
|
+ limit: 3,
|
|
|
+ transaction: transaction ?? '',
|
|
|
+ query: webVital
|
|
|
+ ? `measurements.${webVital}:<${PERFORMANCE_SCORE_MEDIANS[webVital]} measurements.${webVital}:>=${PERFORMANCE_SCORE_P90S[webVital]}`
|
|
|
+ : undefined,
|
|
|
+ enabled,
|
|
|
+ withProfiles: true,
|
|
|
+ sortName: 'webVitalSort',
|
|
|
+ webVital: webVital ?? undefined,
|
|
|
+ });
|
|
|
+
|
|
|
+ const {data: poorData, isLoading: isPoorTransactionWebVitalsQueryLoading} =
|
|
|
+ useTransactionSamplesWebVitalsQuery({
|
|
|
+ limit: 3,
|
|
|
+ transaction: transaction ?? '',
|
|
|
+ query: webVital
|
|
|
+ ? `measurements.${webVital}:>=${PERFORMANCE_SCORE_MEDIANS[webVital]}`
|
|
|
+ : undefined,
|
|
|
+ enabled,
|
|
|
+ withProfiles: true,
|
|
|
+ sortName: 'webVitalSort',
|
|
|
+ webVital: webVital ?? undefined,
|
|
|
+ });
|
|
|
+
|
|
|
+ const data = [...goodData, ...mehData, ...poorData];
|
|
|
+
|
|
|
+ const isTransactionWebVitalsQueryLoading =
|
|
|
+ isGoodTransactionWebVitalsQueryLoading ||
|
|
|
+ isMehTransactionWebVitalsQueryLoading ||
|
|
|
+ isPoorTransactionWebVitalsQueryLoading;
|
|
|
+
|
|
|
+ const transactionsTableData: TransactionSampleRowWithScore[] = data.sort(
|
|
|
+ (a, b) => a[`${webVital}Score`] - b[`${webVital}Score`]
|
|
|
+ );
|
|
|
+
|
|
|
+ return {
|
|
|
+ data: transactionsTableData,
|
|
|
+ isLoading: isTransactionWebVitalsQueryLoading,
|
|
|
+ };
|
|
|
+}
|