diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/calculate_offset.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/calculate_offset.ts new file mode 100644 index 0000000000000..3eba710561abf --- /dev/null +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/calculate_offset.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EntityDefinition } from '@kbn/entities-schema'; +import moment from 'moment'; +import { + ENTITY_DEFAULT_HISTORY_FREQUENCY, + ENTITY_DEFAULT_HISTORY_SYNC_DELAY, +} from '../../../../common/constants_entities'; + +const durationToSeconds = (dateMath: string) => { + const parts = dateMath.match(/(\d+)([m|s|h|d])/); + if (!parts) { + throw new Error(`Invalid date math supplied: ${dateMath}`); + } + const value = parseInt(parts[1], 10); + const unit = parts[2] as 'm' | 's' | 'h' | 'd'; + return moment.duration(value, unit).asSeconds(); +}; + +export function calculateOffset(definition: EntityDefinition) { + const syncDelay = durationToSeconds( + definition.history.settings.syncDelay || ENTITY_DEFAULT_HISTORY_SYNC_DELAY + ); + const frequency = + durationToSeconds(definition.history.settings.frequency || ENTITY_DEFAULT_HISTORY_FREQUENCY) * + 2; + + return syncDelay + frequency; +} diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts index 727f73a044c4f..940e209260c54 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts @@ -15,6 +15,11 @@ export const rawEntityDefinition = { history: { timestampField: '@timestamp', interval: '1m', + settings: { + lookbackPeriod: '10m', + frequency: '2m', + syncDelay: '2m', + }, }, identityFields: ['log.logger', { field: 'event.category', optional: true }], displayNameTemplate: '{{log.logger}}{{#event.category}}:{{.}}{{/event.category}}', diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap index 93c440038c3e6..b19a805b24b12 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap @@ -163,7 +163,7 @@ Object { "index": ".entities.v1.history.noop", "pipeline": "entities-v1-history-admin-console-services", }, - "frequency": "1m", + "frequency": "2m", "pivot": Object { "aggs": Object { "_errorRate_A": Object { @@ -286,7 +286,7 @@ Object { Object { "range": Object { "@timestamp": Object { - "gte": "now-1h", + "gte": "now-10m", }, }, }, @@ -296,7 +296,7 @@ Object { }, "sync": Object { "time": Object { - "delay": "60s", + "delay": "2m", "field": "@timestamp", }, }, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap index ca4cda934328e..ab1224525f4d7 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap @@ -98,7 +98,7 @@ Object { "filter": Object { "range": Object { "@timestamp": Object { - "gte": "now-1m", + "gte": "now-360s", }, }, }, @@ -115,7 +115,7 @@ Object { "filter": Object { "range": Object { "@timestamp": Object { - "gte": "now-1m", + "gte": "now-360s", }, }, }, @@ -132,7 +132,7 @@ Object { "filter": Object { "range": Object { "@timestamp": Object { - "gte": "now-1m", + "gte": "now-360s", }, }, }, @@ -149,7 +149,7 @@ Object { "filter": Object { "range": Object { "@timestamp": Object { - "gte": "now-1m", + "gte": "now-360s", }, }, }, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts index ef54abe305a69..69f6d4f071696 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts @@ -86,7 +86,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { filter: { range: { '@timestamp': { - gte: 'now-1m', + gte: 'now-360s', }, }, }, @@ -112,7 +112,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { filter: { range: { '@timestamp': { - gte: 'now-1m', + gte: 'now-360s', }, }, }, @@ -138,7 +138,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { filter: { range: { '@timestamp': { - gte: 'now-1m', + gte: 'now-360s', }, }, }, @@ -164,7 +164,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { filter: { range: { '@timestamp': { - gte: 'now-1m', + gte: 'now-360s', }, }, }, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts index 79aa4312c2955..1da8988209db6 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts @@ -7,6 +7,7 @@ import { EntityDefinition } from '@kbn/entities-schema'; import { ENTITY_DEFAULT_METADATA_LIMIT } from '../../../../common/constants_entities'; +import { calculateOffset } from '../helpers/calculate_offset'; export function generateHistoryMetadataAggregations(definition: EntityDefinition) { if (!definition.metadata) { @@ -31,6 +32,8 @@ export function generateLatestMetadataAggregations(definition: EntityDefinition) return {}; } + const offsetInSeconds = calculateOffset(definition); + return definition.metadata.reduce( (aggs, metadata) => ({ ...aggs, @@ -38,7 +41,7 @@ export function generateLatestMetadataAggregations(definition: EntityDefinition) filter: { range: { '@timestamp': { - gte: `now-${definition.history.interval}`, + gte: `now-${offsetInSeconds}s`, }, }, },