diff --git a/x-pack/plugins/apm/server/lib/errors/distribution/get_buckets.test.ts b/x-pack/plugins/apm/server/lib/errors/distribution/get_buckets.test.ts index a9d2110117d8..fdcfffaf4bac 100644 --- a/x-pack/plugins/apm/server/lib/errors/distribution/get_buckets.test.ts +++ b/x-pack/plugins/apm/server/lib/errors/distribution/get_buckets.test.ts @@ -44,7 +44,6 @@ describe('get buckets', () => { get: () => 'myIndex', } ) as APMConfig, - uiFilters: {}, indices: { /* eslint-disable @typescript-eslint/naming-convention */ 'apm_oss.sourcemapIndices': 'apm-*', diff --git a/x-pack/plugins/apm/server/lib/helpers/setup_request.ts b/x-pack/plugins/apm/server/lib/helpers/setup_request.ts index ba67a42fbbad..d2527b4a25d1 100644 --- a/x-pack/plugins/apm/server/lib/helpers/setup_request.ts +++ b/x-pack/plugins/apm/server/lib/helpers/setup_request.ts @@ -5,12 +5,10 @@ * 2.0. */ -import { Logger } from 'kibana/server'; import { isActivePlatinumLicense } from '../../../common/license_check'; import { APMConfig } from '../..'; import { KibanaRequest } from '../../../../../../src/core/server'; import { UI_SETTINGS } from '../../../../../../src/plugins/data/common'; -import { UxUIFilters } from '../../../typings/ui_filters'; import { APMRouteHandlerResources } from '../../routes/typings'; import { ApmIndicesConfig, @@ -35,7 +33,6 @@ export interface Setup { ml?: ReturnType; config: APMConfig; indices: ApmIndicesConfig; - uiFilters: UxUIFilters; } export interface SetupTimeRange { @@ -43,7 +40,7 @@ export interface SetupTimeRange { end: number; } -interface SetupRequestParams { +export interface SetupRequestParams { query: { _inspect?: boolean; @@ -56,7 +53,6 @@ interface SetupRequestParams { * Timestamp in ms since epoch */ end?: number; - uiFilters?: string; }; } @@ -74,7 +70,6 @@ export async function setupRequest({ plugins, request, config, - logger, }: APMRouteHandlerResources & { params: TParams; }): Promise> { @@ -91,8 +86,6 @@ export async function setupRequest({ ), ]); - const uiFilters = decodeUiFilters(logger, query.uiFilters); - const coreSetupRequest = { indices, apmEventClient: createApmEventClient({ @@ -116,7 +109,6 @@ export async function setupRequest({ ) : undefined, config, - uiFilters, }; return { @@ -138,18 +130,3 @@ function getMlSetup( modules: ml.modulesProvider(request, savedObjectsClient), }; } - -function decodeUiFilters( - logger: Logger, - uiFiltersEncoded?: string -): UxUIFilters { - if (!uiFiltersEncoded) { - return {}; - } - try { - return JSON.parse(uiFiltersEncoded); - } catch (error) { - logger.error(error); - return {}; - } -} diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_client_metrics.ts b/x-pack/plugins/apm/server/lib/rum_client/get_client_metrics.ts index e56f234c0633..60f0eaff28e8 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_client_metrics.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_client_metrics.ts @@ -7,7 +7,8 @@ import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { TRANSACTION_TIME_TO_FIRST_BYTE, TRANSACTION_DURATION, @@ -18,7 +19,7 @@ export async function getClientMetrics({ urlQuery, percentile = 50, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; urlQuery?: string; percentile?: number; }) { diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_js_errors.ts b/x-pack/plugins/apm/server/lib/rum_client/get_js_errors.ts index 6f734a214501..6967dd3d1660 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_js_errors.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_js_errors.ts @@ -6,7 +6,8 @@ */ import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { getRumErrorsProjection } from '../../projections/rum_page_load_transactions'; import { ERROR_EXC_MESSAGE, @@ -23,7 +24,7 @@ export async function getJSErrors({ pageIndex, urlQuery, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; pageSize: number; pageIndex: number; urlQuery?: string; diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_long_task_metrics.ts b/x-pack/plugins/apm/server/lib/rum_client/get_long_task_metrics.ts index c4c6f613172d..751534272bd7 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_long_task_metrics.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_long_task_metrics.ts @@ -7,7 +7,8 @@ import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; const LONG_TASK_SUM_FIELD = 'transaction.experience.longtask.sum'; const LONG_TASK_COUNT_FIELD = 'transaction.experience.longtask.count'; @@ -18,7 +19,7 @@ export async function getLongTaskMetrics({ urlQuery, percentile = 50, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; urlQuery?: string; percentile?: number; }) { diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_page_load_distribution.ts b/x-pack/plugins/apm/server/lib/rum_client/get_page_load_distribution.ts index 73d634e3134d..92b6eea76ab5 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_page_load_distribution.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_page_load_distribution.ts @@ -8,7 +8,8 @@ import { TRANSACTION_DURATION } from '../../../common/elasticsearch_fieldnames'; import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; export const MICRO_TO_SEC = 1000000; @@ -64,7 +65,7 @@ export async function getPageLoadDistribution({ maxPercentile, urlQuery, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; minPercentile?: string; maxPercentile?: string; urlQuery?: string; @@ -176,7 +177,7 @@ const getPercentilesDistribution = async ({ minDuration, maxDuration, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; minDuration: number; maxDuration: number; }) => { diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_page_view_trends.ts b/x-pack/plugins/apm/server/lib/rum_client/get_page_view_trends.ts index 41af2ae166aa..3eae873f0391 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_page_view_trends.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_page_view_trends.ts @@ -7,7 +7,8 @@ import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { BreakdownItem } from '../../../typings/ui_filters'; export async function getPageViewTrends({ @@ -15,7 +16,7 @@ export async function getPageViewTrends({ breakdowns, urlQuery, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; breakdowns?: string; urlQuery?: string; }) { diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_pl_dist_breakdown.ts b/x-pack/plugins/apm/server/lib/rum_client/get_pl_dist_breakdown.ts index e63d834307a5..b26c76d3fe67 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_pl_dist_breakdown.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_pl_dist_breakdown.ts @@ -8,7 +8,8 @@ import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { ProcessorEvent } from '../../../common/processor_event'; import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { CLIENT_GEO_COUNTRY_ISO_CODE, USER_AGENT_DEVICE, @@ -44,7 +45,7 @@ export const getPageLoadDistBreakdown = async ({ breakdown, urlQuery, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; minPercentile: number; maxPercentile: number; breakdown: string; diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_rum_services.ts b/x-pack/plugins/apm/server/lib/rum_client/get_rum_services.ts index a2e6b55738d3..42766c286035 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_rum_services.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_rum_services.ts @@ -4,16 +4,16 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import { SERVICE_NAME } from '../../../common/elasticsearch_fieldnames'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { mergeProjection } from '../../projections/util/merge_projection'; export async function getRumServices({ setup, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; }) { const projection = getRumPageLoadTransactionsProjection({ setup, diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_url_search.ts b/x-pack/plugins/apm/server/lib/rum_client/get_url_search.ts index ae65cdbd121e..6d5d501ccb6b 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_url_search.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_url_search.ts @@ -6,7 +6,8 @@ */ import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { TRANSACTION_DURATION, @@ -18,7 +19,7 @@ export async function getUrlSearch({ urlQuery, percentile, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; urlQuery?: string; percentile: number; }) { diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_visitor_breakdown.ts b/x-pack/plugins/apm/server/lib/rum_client/get_visitor_breakdown.ts index 9c7a64d7c648..eab2ddaeb1cc 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_visitor_breakdown.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_visitor_breakdown.ts @@ -7,7 +7,8 @@ import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { USER_AGENT_NAME, USER_AGENT_OS, @@ -17,7 +18,7 @@ export async function getVisitorBreakdown({ setup, urlQuery, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; urlQuery?: string; }) { const projection = getRumPageLoadTransactionsProjection({ diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts b/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts index bbb301e22aa8..c9046e01cdeb 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts @@ -7,7 +7,8 @@ import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; import { mergeProjection } from '../../projections/util/merge_projection'; -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { CLS_FIELD, FCP_FIELD, @@ -21,7 +22,7 @@ export async function getWebCoreVitals({ urlQuery, percentile = 50, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; urlQuery?: string; percentile?: number; }) { diff --git a/x-pack/plugins/apm/server/lib/rum_client/has_rum_data.ts b/x-pack/plugins/apm/server/lib/rum_client/has_rum_data.ts index 28fab3369b1e..1d4fa3c31a26 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/has_rum_data.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/has_rum_data.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { Setup, SetupTimeRange } from '../helpers/setup_request'; +import { SetupTimeRange } from '../helpers/setup_request'; +import { SetupUX } from '../../routes/rum_client'; import { SERVICE_NAME, TRANSACTION_TYPE, @@ -17,7 +18,7 @@ import { TRANSACTION_PAGE_LOAD } from '../../../common/transaction_types'; export async function hasRumData({ setup, }: { - setup: Setup & Partial; + setup: SetupUX & Partial; }) { try { const { start, end } = setup; diff --git a/x-pack/plugins/apm/server/lib/transactions/get_anomaly_data/index.ts b/x-pack/plugins/apm/server/lib/transactions/get_anomaly_data/index.ts index b0a9b27ba771..73294a0bd123 100644 --- a/x-pack/plugins/apm/server/lib/transactions/get_anomaly_data/index.ts +++ b/x-pack/plugins/apm/server/lib/transactions/get_anomaly_data/index.ts @@ -22,6 +22,7 @@ export async function getAnomalySeries({ serviceName, transactionType, transactionName, + kuery, setup, logger, }: { @@ -29,6 +30,7 @@ export async function getAnomalySeries({ serviceName: string; transactionType: string; transactionName?: string; + kuery: string; setup: Setup & SetupTimeRange; logger: Logger; }) { @@ -50,13 +52,8 @@ export async function getAnomalySeries({ return undefined; } - // Don't fetch anomalies if uiFilters are applied. This filters out anything - // with empty values so `kuery: ''` returns false but `kuery: 'x:y'` returns true. - const hasUiFiltersApplied = - Object.entries(setup.uiFilters).filter(([_key, value]) => !!value).length > - 0; - - if (hasUiFiltersApplied) { + // Don't fetch anomalies if kuery is present + if (kuery) { return undefined; } diff --git a/x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts b/x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts index b8cf92f15c70..ac46a6df08e8 100644 --- a/x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts +++ b/x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { Setup, SetupTimeRange } from '../../server/lib/helpers/setup_request'; +import { SetupTimeRange } from '../../server/lib/helpers/setup_request'; +import { SetupUX } from '../routes/rum_client'; import { AGENT_NAME, TRANSACTION_TYPE, @@ -21,7 +22,7 @@ export function getRumPageLoadTransactionsProjection({ urlQuery, checkFetchStartFieldExists = true, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; urlQuery?: string; checkFetchStartFieldExists?: boolean; }) { @@ -72,7 +73,7 @@ export function getRumErrorsProjection({ setup, urlQuery, }: { - setup: Setup & SetupTimeRange; + setup: SetupUX & SetupTimeRange; urlQuery?: string; }) { const { start, end, uiFilters } = setup; diff --git a/x-pack/plugins/apm/server/routes/rum_client.ts b/x-pack/plugins/apm/server/routes/rum_client.ts index c43917e32b7e..f6f4aca3a1d9 100644 --- a/x-pack/plugins/apm/server/routes/rum_client.ts +++ b/x-pack/plugins/apm/server/routes/rum_client.ts @@ -4,10 +4,14 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import * as t from 'io-ts'; +import { Logger } from 'kibana/server'; import { isoToEpochRt } from '@kbn/io-ts-utils'; -import { setupRequest } from '../lib/helpers/setup_request'; +import { + setupRequest, + Setup, + SetupRequestParams, +} from '../lib/helpers/setup_request'; import { getClientMetrics } from '../lib/rum_client/get_client_metrics'; import { getJSErrors } from '../lib/rum_client/get_js_errors'; import { getLongTaskMetrics } from '../lib/rum_client/get_long_task_metrics'; @@ -22,6 +26,18 @@ import { hasRumData } from '../lib/rum_client/has_rum_data'; import { createApmServerRoute } from './create_apm_server_route'; import { createApmServerRouteRepository } from './create_apm_server_route_repository'; import { rangeRt } from './default_api_types'; +import { UxUIFilters } from '../../typings/ui_filters'; +import { APMRouteHandlerResources } from '../routes/typings'; + +export type SetupUX = Setup & { + uiFilters: UxUIFilters; +}; + +type SetupUXRequestParams = Omit & { + query: SetupRequestParams['query'] & { + uiFilters?: string; + }; +}; export const percentileRangeRt = t.partial({ minPercentile: t.string, @@ -43,7 +59,7 @@ const rumClientMetricsRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { urlQuery, percentile }, @@ -64,7 +80,7 @@ const rumPageLoadDistributionRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { minPercentile, maxPercentile, urlQuery }, @@ -92,7 +108,7 @@ const rumPageLoadDistBreakdownRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { minPercentile, maxPercentile, breakdown, urlQuery }, @@ -117,7 +133,7 @@ const rumPageViewsTrendRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { breakdowns, urlQuery }, @@ -138,7 +154,7 @@ const rumServicesRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const rumServices = await getRumServices({ setup }); return { rumServices }; @@ -152,7 +168,7 @@ const rumVisitorsBreakdownRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { urlQuery }, @@ -172,7 +188,7 @@ const rumWebCoreVitals = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { urlQuery, percentile }, @@ -193,7 +209,7 @@ const rumLongTaskMetrics = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { urlQuery, percentile }, @@ -214,7 +230,7 @@ const rumUrlSearch = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { urlQuery, percentile }, @@ -236,7 +252,7 @@ const rumJSErrors = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); const { query: { pageSize, pageIndex, urlQuery }, @@ -262,11 +278,39 @@ const rumHasDataRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources) => { - const setup = await setupRequest(resources); + const setup = await setupUXRequest(resources); return await hasRumData({ setup }); }, }); +function decodeUiFilters( + logger: Logger, + uiFiltersEncoded?: string +): UxUIFilters { + if (!uiFiltersEncoded) { + return {}; + } + try { + return JSON.parse(uiFiltersEncoded); + } catch (error) { + logger.error(error); + return {}; + } +} + +async function setupUXRequest( + resources: APMRouteHandlerResources & { params: TParams } +) { + const setup = await setupRequest(resources); + return { + ...setup, + uiFilters: decodeUiFilters( + resources.logger, + resources.params.query.uiFilters + ), + }; +} + export const rumRouteRepository = createApmServerRouteRepository() .add(rumClientMetricsRoute) .add(rumPageLoadDistributionRoute)