diff --git a/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx b/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx index 2df8eb2e28c8b..3db934039a769 100644 --- a/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx +++ b/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx @@ -5,17 +5,28 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiSpacer } from '@elastic/eui'; +import { + EuiEmptyPrompt, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiSpacer, +} from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { EmbeddableFlamegraph } from '@kbn/observability-shared-plugin/public'; +import { isEmpty } from 'lodash'; import React from 'react'; +import { ApmDataSourceWithSummary } from '../../../../common/data_source'; +import { ApmDocumentType } from '../../../../common/document_type'; import { HOST_NAME } from '../../../../common/es_fields/apm'; import { toKueryFilterFormat } from '../../../../common/utils/to_kuery_filter_format'; -import { isPending, useFetcher } from '../../../hooks/use_fetcher'; +import { + FETCH_STATUS, + isPending, + useFetcher, +} from '../../../hooks/use_fetcher'; import { useProfilingPlugin } from '../../../hooks/use_profiling_plugin'; import { HostnamesFilterWarning } from './host_names_filter_warning'; -import { ApmDataSourceWithSummary } from '../../../../common/data_source'; -import { ApmDocumentType } from '../../../../common/document_type'; interface Props { serviceName: string; @@ -86,11 +97,24 @@ export function ProfilingFlamegraph({ - + {status === FETCH_STATUS.SUCCESS && isEmpty(data) ? ( + + {i18n.translate('xpack.apm.profiling.flamegraph.noDataFound', { + defaultMessage: 'No data found', + })} + + } + /> + ) : ( + + )} ); } diff --git a/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx b/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx index c797550c1617a..2e97a0e6156c5 100644 --- a/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx @@ -27,6 +27,7 @@ import { isAWSLambdaAgent, isAzureFunctionsAgent, isServerlessAgent, + isRumOrMobileAgent, } from '../../../../../common/agent_name'; import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; import { ApmServiceContextProvider } from '../../../../context/apm_service/apm_service_context'; @@ -404,7 +405,10 @@ function useTabs({ selectedTab }: { selectedTab: Tab['key'] }) { label: i18n.translate('xpack.apm.home.profilingTabLabel', { defaultMessage: 'Universal Profiling', }), - hidden: !isProfilingAvailable, + hidden: + !isProfilingAvailable || + isRumOrMobileAgent(agentName) || + isAWSLambdaAgent(serverlessType), append: ( {i18n.translate('xpack.apm.universalProfiling.newLabel', { diff --git a/x-pack/plugins/apm/server/routes/profiling/route.ts b/x-pack/plugins/apm/server/routes/profiling/route.ts index 78c605cb2f457..b3e0a78ea5f2d 100644 --- a/x-pack/plugins/apm/server/routes/profiling/route.ts +++ b/x-pack/plugins/apm/server/routes/profiling/route.ts @@ -57,6 +57,10 @@ const profilingFlamegraphRoute = createApmServerRoute({ rollupInterval, }); + if (!serviceHostNames.length) { + return undefined; + } + const flamegraph = await profilingDataAccessStart?.services.fetchFlamechartData({ esClient: esClient.asCurrentUser, @@ -116,6 +120,10 @@ const profilingFunctionsRoute = createApmServerRoute({ rollupInterval, }); + if (!serviceHostNames.length) { + return undefined; + } + const functions = await profilingDataAccessStart?.services.fetchFunction({ esClient: esClient.asCurrentUser, rangeFromMs: start,