diff --git a/x-pack/plugins/infra/server/routes/metadata/index.ts b/x-pack/plugins/infra/server/routes/metadata/index.ts index b2664d5a6d9f..ee71167b5a1c 100644 --- a/x-pack/plugins/infra/server/routes/metadata/index.ts +++ b/x-pack/plugins/infra/server/routes/metadata/index.ts @@ -58,7 +58,14 @@ export const initMetadataRoute = (libs: InfraBackendLibs) => { nameToFeature('metrics') ); - const info = await getNodeInfo(framework, requestContext, configuration, nodeId, nodeType); + const info = await getNodeInfo( + framework, + requestContext, + configuration, + nodeId, + nodeType, + timeRange + ); const cloudInstanceId = get(info, 'cloud.instance.id'); const cloudMetricsMetadata = cloudInstanceId diff --git a/x-pack/plugins/infra/server/routes/metadata/lib/get_node_info.ts b/x-pack/plugins/infra/server/routes/metadata/lib/get_node_info.ts index d0f0bd18b5d5..f1341c7ec810 100644 --- a/x-pack/plugins/infra/server/routes/metadata/lib/get_node_info.ts +++ b/x-pack/plugins/infra/server/routes/metadata/lib/get_node_info.ts @@ -20,7 +20,8 @@ export const getNodeInfo = async ( requestContext: RequestHandlerContext, sourceConfiguration: InfraSourceConfiguration, nodeId: string, - nodeType: InventoryItemType + nodeType: InventoryItemType, + timeRange: { from: number; to: number } ): Promise => { // If the nodeType is a Kubernetes pod then we need to get the node info // from a host record instead of a pod. This is due to the fact that any host @@ -33,7 +34,8 @@ export const getNodeInfo = async ( requestContext, sourceConfiguration, nodeId, - nodeType + nodeType, + timeRange ); if (kubernetesNodeName) { return getNodeInfo( @@ -41,12 +43,14 @@ export const getNodeInfo = async ( requestContext, sourceConfiguration, kubernetesNodeName, - 'host' + 'host', + timeRange ); } return {}; } const fields = findInventoryFields(nodeType, sourceConfiguration.fields); + const timestampField = sourceConfiguration.fields.timestamp; const params = { allowNoIndices: true, ignoreUnavailable: true, @@ -55,9 +59,21 @@ export const getNodeInfo = async ( body: { size: 1, _source: ['host.*', 'cloud.*'], + sort: [{ [timestampField]: 'desc' }], query: { bool: { - filter: [{ match: { [fields.id]: nodeId } }], + filter: [ + { match: { [fields.id]: nodeId } }, + { + range: { + [timestampField]: { + gte: timeRange.from, + lte: timeRange.to, + format: 'epoch_millis', + }, + }, + }, + ], }, }, }, diff --git a/x-pack/plugins/infra/server/routes/metadata/lib/get_pod_node_name.ts b/x-pack/plugins/infra/server/routes/metadata/lib/get_pod_node_name.ts index be6e29a794d0..b4656178d395 100644 --- a/x-pack/plugins/infra/server/routes/metadata/lib/get_pod_node_name.ts +++ b/x-pack/plugins/infra/server/routes/metadata/lib/get_pod_node_name.ts @@ -15,9 +15,11 @@ export const getPodNodeName = async ( requestContext: RequestHandlerContext, sourceConfiguration: InfraSourceConfiguration, nodeId: string, - nodeType: 'host' | 'pod' | 'container' + nodeType: 'host' | 'pod' | 'container', + timeRange: { from: number; to: number } ): Promise => { const fields = findInventoryFields(nodeType, sourceConfiguration.fields); + const timestampField = sourceConfiguration.fields.timestamp; const params = { allowNoIndices: true, ignoreUnavailable: true, @@ -26,11 +28,21 @@ export const getPodNodeName = async ( body: { size: 1, _source: ['kubernetes.node.name'], + sort: [{ [timestampField]: 'desc' }], query: { bool: { filter: [ { match: { [fields.id]: nodeId } }, { exists: { field: `kubernetes.node.name` } }, + { + range: { + [timestampField]: { + gte: timeRange.from, + lte: timeRange.to, + format: 'epoch_millis', + }, + }, + }, ], }, },