diff --git a/x-pack/plugins/infra/public/components/waffle/node_context_menu.tsx b/x-pack/plugins/infra/public/components/waffle/node_context_menu.tsx index 4605a2ca3834..9da80d6fa409 100644 --- a/x-pack/plugins/infra/public/components/waffle/node_context_menu.tsx +++ b/x-pack/plugins/infra/public/components/waffle/node_context_menu.tsx @@ -25,23 +25,43 @@ interface Props { export const NodeContextMenu = injectI18n( ({ options, timeRange, children, node, isPopoverOpen, closePopover, nodeType, intl }: Props) => { - const nodeId = node.path.length > 0 ? node.path[node.path.length - 1].value : undefined; - const nodeLogsUrl = nodeId + // Due to the changing nature of the fields between APM and this UI, + // We need to have some exceptions until 7.0 & ECS is finalized. Reference + // #26620 for the details for these fields. + // TODO: This is tech debt, remove it after 7.0 & ECS migration. + const APM_FIELDS = { + [InfraNodeType.host]: 'context.system.hostname', + [InfraNodeType.container]: 'container.id', + [InfraNodeType.pod]: 'kubernetes.pod.uid', + }; + + const nodeLogsUrl = node.id ? getNodeLogsUrl({ nodeType, - nodeId, + nodeId: node.id, time: timeRange.to, }) : undefined; - const nodeDetailUrl = nodeId + const nodeDetailUrl = node.id ? getNodeDetailUrl({ nodeType, - nodeId, + nodeId: node.id, from: timeRange.from, to: timeRange.to, }) : undefined; + const apmTracesUrl = { + name: intl.formatMessage( + { + id: 'xpack.infra.nodeContextMenu.viewAPMTraces', + defaultMessage: 'View {nodeType} APM traces', + }, + { nodeType } + ), + href: `../app/apm#/services?_g=()&kuery=${APM_FIELDS[nodeType]}~20~3A~20~22${node.id}~22`, + }; + const panels: EuiContextMenuPanelDescriptor[] = [ { id: 0, @@ -69,6 +89,7 @@ export const NodeContextMenu = injectI18n( }, ] : []), + ...[apmTracesUrl], ], }, ];