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,