From ea47ff1f7b6b28862c165709ac9bf93e6aef918f Mon Sep 17 00:00:00 2001 From: Kerry Gallagher Date: Mon, 7 Sep 2020 11:46:56 +0100 Subject: [PATCH 01/58] [Logs UI] Update alert executor tests (#75764) * Update executor unit tests --- .../log_threshold_chart_preview.ts | 4 +- .../log_threshold_executor.test.ts | 1026 +++++++++-------- .../log_threshold/log_threshold_executor.ts | 108 +- 3 files changed, 626 insertions(+), 512 deletions(-) diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_chart_preview.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_chart_preview.ts index 026f003463ef2..71115ad3a5745 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_chart_preview.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_chart_preview.ts @@ -50,8 +50,8 @@ export async function getChartPreviewData( const { rangeFilter } = buildFiltersFromCriteria(expandedAlertParams, timestampField); const query = isGrouped - ? getGroupedESQuery(expandedAlertParams, sourceConfiguration.configuration, indexPattern) - : getUngroupedESQuery(expandedAlertParams, sourceConfiguration.configuration, indexPattern); + ? getGroupedESQuery(expandedAlertParams, timestampField, indexPattern) + : getUngroupedESQuery(expandedAlertParams, timestampField, indexPattern); if (!query) { throw new Error('ES query could not be built from the provided alert params'); diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.test.ts index 940afd72f6c73..f730513991a78 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.test.ts @@ -4,527 +4,617 @@ * you may not use this file except in compliance with the Elastic License. */ -import { createLogThresholdExecutor } from './log_threshold_executor'; +import { + getPositiveComparators, + getNegativeComparators, + queryMappings, + buildFiltersFromCriteria, + getUngroupedESQuery, + getGroupedESQuery, + processUngroupedResults, + processGroupByResults, +} from './log_threshold_executor'; import { Comparator, AlertStates, LogDocumentCountAlertParams, Criterion, + UngroupedSearchQueryResponse, + GroupedSearchQueryResponse, } from '../../../../common/alerting/logs/types'; -import { AlertExecutorOptions } from '../../../../../alerts/server'; -import { - alertsMock, - AlertInstanceMock, - AlertServicesMock, -} from '../../../../../alerts/server/mocks'; -import { libsMock } from './mocks'; - -interface AlertTestInstance { - instance: AlertInstanceMock; - actionQueue: any[]; - state: any; -} - -/* - * Mocks - */ -const alertInstances = new Map(); - -const services: AlertServicesMock = alertsMock.createAlertServices(); -services.alertInstanceFactory.mockImplementation((instanceId: string) => { - const alertInstance: AlertTestInstance = { - instance: alertsMock.createAlertInstanceFactory(), - actionQueue: [], - state: {}, - }; - alertInstance.instance.replaceState.mockImplementation((newState: any) => { - alertInstance.state = newState; - return alertInstance.instance; - }); - alertInstance.instance.scheduleActions.mockImplementation((id: string, action: any) => { - alertInstance.actionQueue.push({ id, action }); - return alertInstance.instance; - }); - - alertInstances.set(instanceId, alertInstance); - - return alertInstance.instance; -}); - -/* - * Helper functions - */ -function getAlertState(): AlertStates { - const alert = alertInstances.get('*'); - if (alert) { - return alert.state.alertState; - } else { - throw new Error('Could not find alert instance'); - } -} - -/* - * Executor instance (our test subject) - */ -const executor = (createLogThresholdExecutor(libsMock) as unknown) as (opts: { - params: LogDocumentCountAlertParams; - services: { callCluster: AlertExecutorOptions['params']['callCluster'] }; -}) => Promise; - -// Wrapper to test -type Comparison = [number, Comparator, number]; - -async function callExecutor( - [value, comparator, threshold]: Comparison, - criteria: Criterion[] = [] -) { - services.callCluster.mockImplementationOnce(async (..._) => ({ - _shards: { - total: 1, - successful: 1, - skipped: 0, - failed: 0, - }, - timed_out: false, - took: 123456789, - hits: { - total: { - value, - }, - }, - })); - - return await executor({ - services, - params: { - count: { value: threshold, comparator }, - timeSize: 1, - timeUnit: 'm', - criteria, - }, - }); -} - -describe('Ungrouped alerts', () => { - describe('Comparators trigger alerts correctly', () => { - it('does not alert when counts do not reach the threshold', async () => { - await callExecutor([0, Comparator.GT, 1]); - expect(getAlertState()).toBe(AlertStates.OK); - - await callExecutor([0, Comparator.GT_OR_EQ, 1]); - expect(getAlertState()).toBe(AlertStates.OK); - - await callExecutor([1, Comparator.LT, 0]); - expect(getAlertState()).toBe(AlertStates.OK); - - await callExecutor([1, Comparator.LT_OR_EQ, 0]); - expect(getAlertState()).toBe(AlertStates.OK); +import { alertsMock } from '../../../../../alerts/server/mocks'; + +// Mocks // +const numericField = { + field: 'numericField', + value: 10, +}; + +const keywordField = { + field: 'keywordField', + value: 'error', +}; + +const textField = { + field: 'textField', + value: 'Something went wrong', +}; + +const positiveCriteria: Criterion[] = [ + { ...numericField, comparator: Comparator.GT }, + { ...numericField, comparator: Comparator.GT_OR_EQ }, + { ...numericField, comparator: Comparator.LT }, + { ...numericField, comparator: Comparator.LT_OR_EQ }, + { ...keywordField, comparator: Comparator.EQ }, + { ...textField, comparator: Comparator.MATCH }, + { ...textField, comparator: Comparator.MATCH_PHRASE }, +]; + +const negativeCriteria: Criterion[] = [ + { ...keywordField, comparator: Comparator.NOT_EQ }, + { ...textField, comparator: Comparator.NOT_MATCH }, + { ...textField, comparator: Comparator.NOT_MATCH_PHRASE }, +]; + +const baseAlertParams: Pick = { + count: { + comparator: Comparator.GT, + value: 5, + }, + timeSize: 5, + timeUnit: 'm', +}; + +const TIMESTAMP_FIELD = '@timestamp'; +const FILEBEAT_INDEX = 'filebeat-*'; + +describe('Log threshold executor', () => { + describe('Comparators', () => { + test('Correctly categorises positive comparators', () => { + expect(getPositiveComparators().length).toBe(7); }); - it('alerts when counts reach the threshold', async () => { - await callExecutor([2, Comparator.GT, 1]); - expect(getAlertState()).toBe(AlertStates.ALERT); - - await callExecutor([1, Comparator.GT_OR_EQ, 1]); - expect(getAlertState()).toBe(AlertStates.ALERT); - - await callExecutor([1, Comparator.LT, 2]); - expect(getAlertState()).toBe(AlertStates.ALERT); - - await callExecutor([2, Comparator.LT_OR_EQ, 2]); - expect(getAlertState()).toBe(AlertStates.ALERT); + test('Correctly categorises negative comparators', () => { + expect(getNegativeComparators().length).toBe(3); }); - }); - describe('Comparators create the correct ES queries', () => { - beforeEach(() => { - services.callCluster.mockReset(); + test('There is a query mapping for every comparator', () => { + const comparators = [...getPositiveComparators(), ...getNegativeComparators()]; + expect(Object.keys(queryMappings).length).toBe(comparators.length); }); - - it('Works with `Comparator.EQ`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.EQ, value: 'bar' }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - { - term: { - foo: { - value: 'bar', - }, - }, - }, - ], + }); + describe('Criteria filter building', () => { + test('Handles positive criteria', () => { + const alertParams: LogDocumentCountAlertParams = { + ...baseAlertParams, + criteria: positiveCriteria, + }; + const filters = buildFiltersFromCriteria(alertParams, TIMESTAMP_FIELD); + expect(filters.mustFilters).toEqual([ + { + range: { + numericField: { + gt: 10, + }, }, }, - size: 0, - }); - }); - - it('works with `Comparator.NOT_EQ`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.NOT_EQ, value: 'bar' }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - ], - must_not: [ - { - term: { - foo: { - value: 'bar', - }, - }, - }, - ], + { + range: { + numericField: { + gte: 10, + }, }, }, - size: 0, - }); - }); - - it('works with `Comparator.MATCH`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.MATCH, value: 'bar' }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - { - match: { - foo: 'bar', - }, - }, - ], + { + range: { + numericField: { + lt: 10, + }, }, }, - size: 0, - }); - }); - - it('works with `Comparator.NOT_MATCH`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.NOT_MATCH, value: 'bar' }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - ], - must_not: [ - { - match: { - foo: 'bar', - }, - }, - ], + { + range: { + numericField: { + lte: 10, + }, }, }, - size: 0, - }); - }); - - it('works with `Comparator.MATCH_PHRASE`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.MATCH_PHRASE, value: 'bar' }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - { - match_phrase: { - foo: 'bar', - }, - }, - ], + { + term: { + keywordField: { + value: 'error', + }, }, }, - size: 0, - }); - }); - - it('works with `Comparator.NOT_MATCH_PHRASE`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.NOT_MATCH_PHRASE, value: 'bar' }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - ], - must_not: [ - { - match_phrase: { - foo: 'bar', - }, - }, - ], + { + match: { + textField: 'Something went wrong', }, }, - size: 0, - }); - }); - - it('works with `Comparator.GT`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.GT, value: 1 }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - { - range: { - foo: { - gt: 1, - }, - }, - }, - ], + { + match_phrase: { + textField: 'Something went wrong', }, }, - size: 0, - }); + ]); }); - it('works with `Comparator.GT_OR_EQ`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.GT_OR_EQ, value: 1 }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - { - range: { - foo: { - gte: 1, - }, - }, - }, - ], + test('Handles negative criteria', () => { + const alertParams: LogDocumentCountAlertParams = { + ...baseAlertParams, + criteria: negativeCriteria, + }; + const filters = buildFiltersFromCriteria(alertParams, TIMESTAMP_FIELD); + + expect(filters.mustNotFilters).toEqual([ + { + term: { + keywordField: { + value: 'error', + }, }, }, - size: 0, - }); + { + match: { + textField: 'Something went wrong', + }, + }, + { + match_phrase: { + textField: 'Something went wrong', + }, + }, + ]); }); - it('works with `Comparator.LT`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.LT, value: 1 }] - ); + test('Handles time range', () => { + const alertParams: LogDocumentCountAlertParams = { ...baseAlertParams, criteria: [] }; + const filters = buildFiltersFromCriteria(alertParams, TIMESTAMP_FIELD); + expect(typeof filters.rangeFilter.range[TIMESTAMP_FIELD].gte).toBe('number'); + expect(typeof filters.rangeFilter.range[TIMESTAMP_FIELD].lte).toBe('number'); + expect(filters.rangeFilter.range[TIMESTAMP_FIELD].format).toBe('epoch_millis'); - const query = services.callCluster.mock.calls[0][1]!; + expect(typeof filters.groupedRangeFilter.range[TIMESTAMP_FIELD].gte).toBe('number'); + expect(typeof filters.groupedRangeFilter.range[TIMESTAMP_FIELD].lte).toBe('number'); + expect(filters.groupedRangeFilter.range[TIMESTAMP_FIELD].format).toBe('epoch_millis'); + }); + }); - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', + describe('ES queries', () => { + describe('Query generation', () => { + test('Correctly generates ungrouped queries', () => { + const alertParams: LogDocumentCountAlertParams = { + ...baseAlertParams, + criteria: [...positiveCriteria, ...negativeCriteria], + }; + const query = getUngroupedESQuery(alertParams, TIMESTAMP_FIELD, FILEBEAT_INDEX); + expect(query).toEqual({ + index: 'filebeat-*', + allowNoIndices: true, + ignoreUnavailable: true, + body: { + track_total_hits: true, + query: { + bool: { + filter: [ + { + range: { + '@timestamp': { + gte: expect.any(Number), + lte: expect.any(Number), + format: 'epoch_millis', + }, + }, }, - }, - }, - { - range: { - foo: { - lt: 1, + { + range: { + numericField: { + gt: 10, + }, + }, }, - }, + { + range: { + numericField: { + gte: 10, + }, + }, + }, + { + range: { + numericField: { + lt: 10, + }, + }, + }, + { + range: { + numericField: { + lte: 10, + }, + }, + }, + { + term: { + keywordField: { + value: 'error', + }, + }, + }, + { + match: { + textField: 'Something went wrong', + }, + }, + { + match_phrase: { + textField: 'Something went wrong', + }, + }, + ], + must_not: [ + { + term: { + keywordField: { + value: 'error', + }, + }, + }, + { + match: { + textField: 'Something went wrong', + }, + }, + { + match_phrase: { + textField: 'Something went wrong', + }, + }, + ], }, - ], + }, + size: 0, }, - }, - size: 0, + }); }); - }); - - it('works with `Comparator.LT_OR_EQ`', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [{ field: 'foo', comparator: Comparator.LT_OR_EQ, value: 1 }] - ); - - const query = services.callCluster.mock.calls[0][1]!; - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', + test('Correctly generates grouped queries', () => { + const alertParams: LogDocumentCountAlertParams = { + ...baseAlertParams, + groupBy: ['host.name'], + criteria: [...positiveCriteria, ...negativeCriteria], + }; + const query = getGroupedESQuery(alertParams, TIMESTAMP_FIELD, FILEBEAT_INDEX); + expect(query).toEqual({ + index: 'filebeat-*', + allowNoIndices: true, + ignoreUnavailable: true, + body: { + query: { + bool: { + filter: [ + { + range: { + '@timestamp': { + gte: expect.any(Number), + lte: expect.any(Number), + format: 'epoch_millis', + }, + }, }, - }, + ], + must_not: [ + { + term: { + keywordField: { + value: 'error', + }, + }, + }, + { + match: { + textField: 'Something went wrong', + }, + }, + { + match_phrase: { + textField: 'Something went wrong', + }, + }, + ], }, - { - range: { - foo: { - lte: 1, + }, + aggregations: { + groups: { + composite: { + size: 40, + sources: [ + { + 'group-0-host.name': { + terms: { + field: 'host.name', + }, + }, + }, + ], + }, + aggregations: { + filtered_results: { + filter: { + bool: { + filter: [ + { + range: { + '@timestamp': { + gte: expect.any(Number), + lte: expect.any(Number), + format: 'epoch_millis', + }, + }, + }, + { + range: { + numericField: { + gt: 10, + }, + }, + }, + { + range: { + numericField: { + gte: 10, + }, + }, + }, + { + range: { + numericField: { + lt: 10, + }, + }, + }, + { + range: { + numericField: { + lte: 10, + }, + }, + }, + { + term: { + keywordField: { + value: 'error', + }, + }, + }, + { + match: { + textField: 'Something went wrong', + }, + }, + { + match_phrase: { + textField: 'Something went wrong', + }, + }, + ], + }, + }, }, }, }, - ], + }, + size: 0, }, - }, - size: 0, + }); }); }); }); - describe('Multiple criteria create the right ES query', () => { - beforeEach(() => { - services.callCluster.mockReset(); + describe('Results processors', () => { + describe('Can process ungrouped results', () => { + test('It handles the OK state correctly', () => { + const alertInstanceUpdaterMock = jest.fn(); + const alertParams = { + ...baseAlertParams, + criteria: [positiveCriteria[0]], + }; + const results = { + hits: { + total: { + value: 2, + }, + }, + } as UngroupedSearchQueryResponse; + processUngroupedResults( + results, + alertParams, + alertsMock.createAlertInstanceFactory, + alertInstanceUpdaterMock + ); + // First call, second argument + expect(alertInstanceUpdaterMock.mock.calls[0][1]).toBe(AlertStates.OK); + // First call, third argument + expect(alertInstanceUpdaterMock.mock.calls[0][2]).toBe(undefined); + }); + + test('It handles the ALERT state correctly', () => { + const alertInstanceUpdaterMock = jest.fn(); + const alertParams = { + ...baseAlertParams, + criteria: [positiveCriteria[0]], + }; + const results = { + hits: { + total: { + value: 10, + }, + }, + } as UngroupedSearchQueryResponse; + processUngroupedResults( + results, + alertParams, + alertsMock.createAlertInstanceFactory, + alertInstanceUpdaterMock + ); + // First call, second argument + expect(alertInstanceUpdaterMock.mock.calls[0][1]).toBe(AlertStates.ALERT); + // First call, third argument + expect(alertInstanceUpdaterMock.mock.calls[0][2]).toEqual([ + { + actionGroup: 'logs.threshold.fired', + context: { + conditions: ' numericField more than 10', + group: null, + matchingDocuments: 10, + }, + }, + ]); + }); }); - it('works', async () => { - await callExecutor( - [2, Comparator.GT, 1], // Not relevant - [ - { field: 'foo', comparator: Comparator.EQ, value: 'bar' }, - { field: 'http.status', comparator: Comparator.LT, value: 400 }, - ] - ); - const query = services.callCluster.mock.calls[0][1]!; + describe('Can process grouped results', () => { + test('It handles the OK state correctly', () => { + const alertInstanceUpdaterMock = jest.fn(); + const alertParams = { + ...baseAlertParams, + criteria: [positiveCriteria[0]], + groupBy: ['host.name', 'event.dataset'], + }; + const results = [ + { + key: { + 'host.name': 'i-am-a-host-name', + 'event.dataset': 'i-am-a-dataset', + }, + doc_count: 100, + filtered_results: { + doc_count: 1, + }, + }, + { + key: { + 'host.name': 'i-am-a-host-name', + 'event.dataset': 'i-am-a-dataset', + }, + doc_count: 100, + filtered_results: { + doc_count: 2, + }, + }, + { + key: { + 'host.name': 'i-am-a-host-name', + 'event.dataset': 'i-am-a-dataset', + }, + doc_count: 100, + filtered_results: { + doc_count: 3, + }, + }, + ] as GroupedSearchQueryResponse['aggregations']['groups']['buckets']; + processGroupByResults( + results, + alertParams, + alertsMock.createAlertInstanceFactory, + alertInstanceUpdaterMock + ); + expect(alertInstanceUpdaterMock.mock.calls.length).toBe(3); + // First call, second argument + expect(alertInstanceUpdaterMock.mock.calls[0][1]).toBe(AlertStates.OK); + // First call, third argument + expect(alertInstanceUpdaterMock.mock.calls[0][2]).toBe(undefined); + + // Second call, second argument + expect(alertInstanceUpdaterMock.mock.calls[1][1]).toBe(AlertStates.OK); + // Second call, third argument + expect(alertInstanceUpdaterMock.mock.calls[1][2]).toBe(undefined); + + // Third call, second argument + expect(alertInstanceUpdaterMock.mock.calls[2][1]).toBe(AlertStates.OK); + // Third call, third argument + expect(alertInstanceUpdaterMock.mock.calls[2][2]).toBe(undefined); + }); - expect(query.body).toMatchObject({ - track_total_hits: true, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - format: 'epoch_millis', - }, - }, - }, - { - term: { - foo: { - value: 'bar', - }, - }, - }, - { - range: { - 'http.status': { - lt: 400, - }, - }, - }, - ], + test('It handles the ALERT state correctly', () => { + const alertInstanceUpdaterMock = jest.fn(); + const alertParams = { + ...baseAlertParams, + criteria: [positiveCriteria[0]], + groupBy: ['host.name', 'event.dataset'], + }; + // Two groups should fire, one shouldn't + const results = [ + { + key: { + 'host.name': 'i-am-a-host-name-1', + 'event.dataset': 'i-am-a-dataset-1', + }, + doc_count: 100, + filtered_results: { + doc_count: 10, + }, }, - }, - size: 0, + { + key: { + 'host.name': 'i-am-a-host-name-2', + 'event.dataset': 'i-am-a-dataset-2', + }, + doc_count: 100, + filtered_results: { + doc_count: 2, + }, + }, + { + key: { + 'host.name': 'i-am-a-host-name-3', + 'event.dataset': 'i-am-a-dataset-3', + }, + doc_count: 100, + filtered_results: { + doc_count: 20, + }, + }, + ] as GroupedSearchQueryResponse['aggregations']['groups']['buckets']; + processGroupByResults( + results, + alertParams, + alertsMock.createAlertInstanceFactory, + alertInstanceUpdaterMock + ); + expect(alertInstanceUpdaterMock.mock.calls.length).toBe(results.length); + // First call, second argument + expect(alertInstanceUpdaterMock.mock.calls[0][1]).toBe(AlertStates.ALERT); + // First call, third argument + expect(alertInstanceUpdaterMock.mock.calls[0][2]).toEqual([ + { + actionGroup: 'logs.threshold.fired', + context: { + conditions: ' numericField more than 10', + group: 'i-am-a-host-name-1, i-am-a-dataset-1', + matchingDocuments: 10, + }, + }, + ]); + + // Second call, second argument + expect(alertInstanceUpdaterMock.mock.calls[1][1]).toBe(AlertStates.OK); + // Second call, third argument + expect(alertInstanceUpdaterMock.mock.calls[1][2]).toBe(undefined); + + // Third call, second argument + expect(alertInstanceUpdaterMock.mock.calls[2][1]).toBe(AlertStates.ALERT); + // Third call, third argument + expect(alertInstanceUpdaterMock.mock.calls[2][2]).toEqual([ + { + actionGroup: 'logs.threshold.fired', + context: { + conditions: ' numericField more than 10', + group: 'i-am-a-host-name-3, i-am-a-dataset-3', + matchingDocuments: 20, + }, + }, + ]); }); }); }); diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts index db76e955f0073..224b898141c36 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts @@ -5,7 +5,12 @@ */ import { i18n } from '@kbn/i18n'; -import { AlertExecutorOptions, AlertServices } from '../../../../../alerts/server'; +import { + AlertExecutorOptions, + AlertServices, + AlertInstance, + AlertInstanceContext, +} from '../../../../../alerts/server'; import { AlertStates, Comparator, @@ -19,7 +24,6 @@ import { } from '../../../../common/alerting/logs/types'; import { InfraBackendLibs } from '../../infra_types'; import { getIntervalInSeconds } from '../../../utils/get_interval_in_seconds'; -import { InfraSource } from '../../../../common/http_api/source_api'; import { decodeOrThrow } from '../../../../common/runtime_types'; import { UNGROUPED_FACTORY_KEY } from '../common/utils'; @@ -42,6 +46,7 @@ export const createLogThresholdExecutor = (libs: InfraBackendLibs) => const sourceConfiguration = await sources.getSourceConfiguration(savedObjectsClient, 'default'); const indexPattern = sourceConfiguration.configuration.logAlias; + const timestampField = sourceConfiguration.configuration.fields.timestamp; const alertInstance = alertInstanceFactory(UNGROUPED_FACTORY_KEY); try { @@ -49,8 +54,8 @@ export const createLogThresholdExecutor = (libs: InfraBackendLibs) => const query = groupBy && groupBy.length > 0 - ? getGroupedESQuery(validatedParams, sourceConfiguration.configuration, indexPattern) - : getUngroupedESQuery(validatedParams, sourceConfiguration.configuration, indexPattern); + ? getGroupedESQuery(validatedParams, timestampField, indexPattern) + : getUngroupedESQuery(validatedParams, timestampField, indexPattern); if (!query) { throw new Error('ES query could not be built from the provided alert params'); @@ -60,13 +65,15 @@ export const createLogThresholdExecutor = (libs: InfraBackendLibs) => processGroupByResults( await getGroupedResults(query, callCluster), validatedParams, - alertInstanceFactory + alertInstanceFactory, + updateAlertInstance ); } else { processUngroupedResults( await getUngroupedResults(query, callCluster), validatedParams, - alertInstanceFactory + alertInstanceFactory, + updateAlertInstance ); } } catch (e) { @@ -78,10 +85,11 @@ export const createLogThresholdExecutor = (libs: InfraBackendLibs) => } }; -const processUngroupedResults = ( +export const processUngroupedResults = ( results: UngroupedSearchQueryResponse, params: LogDocumentCountAlertParams, - alertInstanceFactory: AlertExecutorOptions['services']['alertInstanceFactory'] + alertInstanceFactory: AlertExecutorOptions['services']['alertInstanceFactory'], + alertInstaceUpdater: AlertInstanceUpdater ) => { const { count, criteria } = params; @@ -89,19 +97,18 @@ const processUngroupedResults = ( const documentCount = results.hits.total.value; if (checkValueAgainstComparatorMap[count.comparator](documentCount, count.value)) { - alertInstance.scheduleActions(FIRED_ACTIONS.id, { - matchingDocuments: documentCount, - conditions: createConditionsMessage(criteria), - group: null, - }); - - alertInstance.replaceState({ - alertState: AlertStates.ALERT, - }); + alertInstaceUpdater(alertInstance, AlertStates.ALERT, [ + { + actionGroup: FIRED_ACTIONS.id, + context: { + matchingDocuments: documentCount, + conditions: createConditionsMessage(criteria), + group: null, + }, + }, + ]); } else { - alertInstance.replaceState({ - alertState: AlertStates.OK, - }); + alertInstaceUpdater(alertInstance, AlertStates.OK); } }; @@ -110,10 +117,11 @@ interface ReducedGroupByResults { documentCount: number; } -const processGroupByResults = ( +export const processGroupByResults = ( results: GroupedSearchQueryResponse['aggregations']['groups']['buckets'], params: LogDocumentCountAlertParams, - alertInstanceFactory: AlertExecutorOptions['services']['alertInstanceFactory'] + alertInstanceFactory: AlertExecutorOptions['services']['alertInstanceFactory'], + alertInstaceUpdater: AlertInstanceUpdater ) => { const { count, criteria } = params; @@ -128,23 +136,41 @@ const processGroupByResults = ( const documentCount = group.documentCount; if (checkValueAgainstComparatorMap[count.comparator](documentCount, count.value)) { - alertInstance.scheduleActions(FIRED_ACTIONS.id, { - matchingDocuments: documentCount, - conditions: createConditionsMessage(criteria), - group: group.name, - }); - - alertInstance.replaceState({ - alertState: AlertStates.ALERT, - }); + alertInstaceUpdater(alertInstance, AlertStates.ALERT, [ + { + actionGroup: FIRED_ACTIONS.id, + context: { + matchingDocuments: documentCount, + conditions: createConditionsMessage(criteria), + group: group.name, + }, + }, + ]); } else { - alertInstance.replaceState({ - alertState: AlertStates.OK, - }); + alertInstaceUpdater(alertInstance, AlertStates.OK); } }); }; +type AlertInstanceUpdater = ( + alertInstance: AlertInstance, + state: AlertStates, + actions?: Array<{ actionGroup: string; context: AlertInstanceContext }> +) => void; + +export const updateAlertInstance: AlertInstanceUpdater = (alertInstance, state, actions) => { + if (actions && actions.length > 0) { + actions.forEach((actionSet) => { + const { actionGroup, context } = actionSet; + alertInstance.scheduleActions(actionGroup, context); + }); + } + + alertInstance.replaceState({ + alertState: state, + }); +}; + export const buildFiltersFromCriteria = ( params: Omit, timestampField: string @@ -198,7 +224,7 @@ export const buildFiltersFromCriteria = ( export const getGroupedESQuery = ( params: Omit, - sourceConfiguration: InfraSource['configuration'], + timestampField: string, index: string ): object | undefined => { const { groupBy } = params; @@ -207,8 +233,6 @@ export const getGroupedESQuery = ( return; } - const timestampField = sourceConfiguration.fields.timestamp; - const { rangeFilter, groupedRangeFilter, mustFilters, mustNotFilters } = buildFiltersFromCriteria( params, timestampField @@ -258,12 +282,12 @@ export const getGroupedESQuery = ( export const getUngroupedESQuery = ( params: Omit, - sourceConfiguration: InfraSource['configuration'], + timestampField: string, index: string ): object => { const { rangeFilter, mustFilters, mustNotFilters } = buildFiltersFromCriteria( params, - sourceConfiguration.fields.timestamp + timestampField ); const body = { @@ -357,7 +381,7 @@ const buildCriterionQuery = (criterion: Criterion): Filter | undefined => { } }; -const getPositiveComparators = () => { +export const getPositiveComparators = () => { return [ Comparator.GT, Comparator.GT_OR_EQ, @@ -369,11 +393,11 @@ const getPositiveComparators = () => { ]; }; -const getNegativeComparators = () => { +export const getNegativeComparators = () => { return [Comparator.NOT_EQ, Comparator.NOT_MATCH, Comparator.NOT_MATCH_PHRASE]; }; -const queryMappings: { +export const queryMappings: { [key: string]: string; } = { [Comparator.GT]: 'range', From a66788eaf81970fd76e4e8bdb35484375d0fb793 Mon Sep 17 00:00:00 2001 From: MadameSheema Date: Mon, 7 Sep 2020 13:26:41 +0200 Subject: [PATCH 02/58] [SECURITY SOLUTION] Adds 'cypress:open-as-ci' command (#76125) * adds 'cypress:open-as-ci' command * fixes typecheck error Co-authored-by: Elastic Machine --- .../jenkins_security_solution_cypress.sh | 4 +-- x-pack/plugins/security_solution/package.json | 3 +- .../security_solution_cypress/cli_config.ts | 18 ++++++++++++ .../test/security_solution_cypress/config.ts | 4 --- .../test/security_solution_cypress/runner.ts | 29 ++++++++++++++++++- .../visual_config.ts | 18 ++++++++++++ 6 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 x-pack/test/security_solution_cypress/cli_config.ts create mode 100644 x-pack/test/security_solution_cypress/visual_config.ts diff --git a/test/scripts/jenkins_security_solution_cypress.sh b/test/scripts/jenkins_security_solution_cypress.sh index a5a1a2103801f..c018b632706b1 100755 --- a/test/scripts/jenkins_security_solution_cypress.sh +++ b/test/scripts/jenkins_security_solution_cypress.sh @@ -5,11 +5,11 @@ source test/scripts/jenkins_test_setup_xpack.sh echo " -> Running security solution cypress tests" cd "$XPACK_DIR" -checks-reporter-with-killswitch "Security solution Cypress Tests" \ +checks-reporter-with-killswitch "Security Solution Cypress Tests" \ node scripts/functional_tests \ --debug --bail \ --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --config test/security_solution_cypress/config.ts + --config test/security_solution_cypress/cli_config.ts echo "" echo "" diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index 4d2602d1498ee..70dbaa0d31681 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/plugins/security_solution/package.json @@ -8,8 +8,9 @@ "extract-mitre-attacks": "node scripts/extract_tactics_techniques_mitre.js && node ../../../scripts/eslint ./public/pages/detection_engine/mitre/mitre_tactics_techniques.ts --fix", "build-graphql-types": "node scripts/generate_types_from_graphql.js", "cypress:open": "cypress open --config-file ./cypress/cypress.json", + "cypress:open-as-ci": "node ../../../scripts/functional_tests --config ../../test/security_solution_cypress/visual_config.ts", "cypress:run": "cypress run --browser chrome --headless --spec ./cypress/integration/**/*.spec.ts --config-file ./cypress/cypress.json --reporter ../../node_modules/cypress-multi-reporters --reporter-options configFile=./cypress/reporter_config.json; status=$?; ../../node_modules/.bin/mochawesome-merge --reportDir ../../../target/kibana-security-solution/cypress/results > ../../../target/kibana-security-solution/cypress/results/output.json; ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results; mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/ && exit $status;", - "cypress:run-as-ci": "node ../../../scripts/functional_tests --config ../../test/security_solution_cypress/config.ts", + "cypress:run-as-ci": "node ../../../scripts/functional_tests --config ../../test/security_solution_cypress/cli_config.ts", "test:generate": "node scripts/endpoint/resolver_generator" }, "devDependencies": { diff --git a/x-pack/test/security_solution_cypress/cli_config.ts b/x-pack/test/security_solution_cypress/cli_config.ts new file mode 100644 index 0000000000000..f80066c53c95d --- /dev/null +++ b/x-pack/test/security_solution_cypress/cli_config.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { FtrConfigProviderContext } from '@kbn/test/types/ftr'; + +import { SecuritySolutionCypressCliTestRunner } from './runner'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const securitySolutionCypressConfig = await readConfigFile(require.resolve('./config.ts')); + return { + ...securitySolutionCypressConfig.getAll(), + + testRunner: SecuritySolutionCypressCliTestRunner, + }; +} diff --git a/x-pack/test/security_solution_cypress/config.ts b/x-pack/test/security_solution_cypress/config.ts index 83290a60a17a6..3a524467f7451 100644 --- a/x-pack/test/security_solution_cypress/config.ts +++ b/x-pack/test/security_solution_cypress/config.ts @@ -10,8 +10,6 @@ import { FtrConfigProviderContext } from '@kbn/test/types/ftr'; import { CA_CERT_PATH } from '@kbn/dev-utils'; -import { SiemCypressTestRunner } from './runner'; - export default async function ({ readConfigFile }: FtrConfigProviderContext) { const kibanaCommonTestsConfig = await readConfigFile( require.resolve('../../../test/common/config.js') @@ -23,8 +21,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { return { ...kibanaCommonTestsConfig.getAll(), - testRunner: SiemCypressTestRunner, - esArchiver: { directory: resolve(__dirname, 'es_archives'), }, diff --git a/x-pack/test/security_solution_cypress/runner.ts b/x-pack/test/security_solution_cypress/runner.ts index 11c960389e25f..ccdc2fa4424ac 100644 --- a/x-pack/test/security_solution_cypress/runner.ts +++ b/x-pack/test/security_solution_cypress/runner.ts @@ -11,7 +11,7 @@ import { withProcRunner } from '@kbn/dev-utils'; import { FtrProviderContext } from './ftr_provider_context'; -export async function SiemCypressTestRunner({ getService }: FtrProviderContext) { +export async function SecuritySolutionCypressCliTestRunner({ getService }: FtrProviderContext) { const log = getService('log'); const config = getService('config'); const esArchiver = getService('esArchiver'); @@ -37,3 +37,30 @@ export async function SiemCypressTestRunner({ getService }: FtrProviderContext) }); }); } + +export async function SecuritySolutionCypressVisualTestRunner({ getService }: FtrProviderContext) { + const log = getService('log'); + const config = getService('config'); + const esArchiver = getService('esArchiver'); + + await esArchiver.load('empty_kibana'); + await esArchiver.load('auditbeat'); + + await withProcRunner(log, async (procs) => { + await procs.run('cypress', { + cmd: 'yarn', + args: ['cypress:open'], + cwd: resolve(__dirname, '../../plugins/security_solution'), + env: { + FORCE_COLOR: '1', + // eslint-disable-next-line @typescript-eslint/naming-convention + CYPRESS_baseUrl: Url.format(config.get('servers.kibana')), + CYPRESS_ELASTICSEARCH_URL: Url.format(config.get('servers.elasticsearch')), + CYPRESS_ELASTICSEARCH_USERNAME: config.get('servers.elasticsearch.username'), + CYPRESS_ELASTICSEARCH_PASSWORD: config.get('servers.elasticsearch.password'), + ...process.env, + }, + wait: true, + }); + }); +} diff --git a/x-pack/test/security_solution_cypress/visual_config.ts b/x-pack/test/security_solution_cypress/visual_config.ts new file mode 100644 index 0000000000000..a278e9d0a3443 --- /dev/null +++ b/x-pack/test/security_solution_cypress/visual_config.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { FtrConfigProviderContext } from '@kbn/test/types/ftr'; + +import { SecuritySolutionCypressVisualTestRunner } from './runner'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const securitySolutionCypressConfig = await readConfigFile(require.resolve('./config.ts')); + return { + ...securitySolutionCypressConfig.getAll(), + + testRunner: SecuritySolutionCypressVisualTestRunner, + }; +} From 68a98385b942ed4f8eb380b8c2325c9e66b7ce82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Kopyci=C5=84ski?= Date: Mon, 7 Sep 2020 14:17:30 +0200 Subject: [PATCH 03/58] [Security Solution] Refactor NetworkDns to use Search Strategy (#76250) --- .../security_solution/index.ts | 14 +- .../security_solution/network/dns/index.ts | 65 ++++ .../security_solution/network/index.ts | 2 + .../network/top_countries/index.ts | 8 - .../containers/network_dns/histogram.ts | 65 ++++ .../network/containers/network_dns/index.tsx | 352 +++++++++--------- .../containers/network_dns/translations.ts | 21 ++ .../public/network/pages/ip_details/types.ts | 2 +- .../pages/navigation/dns_query_tab_body.tsx | 68 ++-- .../factory/network/dns/helpers.ts | 40 ++ .../factory/network/dns/index.ts | 58 +++ .../network/dns/query.dns_network.dsl.ts | 134 +++++++ .../factory/network/index.ts | 2 + 13 files changed, 600 insertions(+), 231 deletions(-) create mode 100644 x-pack/plugins/security_solution/common/search_strategy/security_solution/network/dns/index.ts create mode 100644 x-pack/plugins/security_solution/public/network/containers/network_dns/histogram.ts create mode 100644 x-pack/plugins/security_solution/public/network/containers/network_dns/translations.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/helpers.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/index.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/query.dns_network.dsl.ts diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/index.ts index 3944dc53139e4..4d6bd87bb9d42 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/index.ts @@ -21,6 +21,8 @@ import { } from './hosts'; import { NetworkQueries, + NetworkDnsStrategyResponse, + NetworkDnsRequestOptions, NetworkTlsStrategyResponse, NetworkTlsRequestOptions, NetworkHttpStrategyResponse, @@ -79,10 +81,12 @@ export type StrategyResponseType = T extends HostsQ ? HostFirstLastSeenStrategyResponse : T extends HostsQueries.uncommonProcesses ? HostUncommonProcessesStrategyResponse - : T extends NetworkQueries.tls - ? NetworkTlsStrategyResponse + : T extends NetworkQueries.dns + ? NetworkDnsStrategyResponse : T extends NetworkQueries.http ? NetworkHttpStrategyResponse + : T extends NetworkQueries.tls + ? NetworkTlsStrategyResponse : T extends NetworkQueries.topCountries ? NetworkTopCountriesStrategyResponse : T extends NetworkQueries.topNFlow @@ -101,10 +105,12 @@ export type StrategyRequestType = T extends HostsQu ? HostFirstLastSeenRequestOptions : T extends HostsQueries.uncommonProcesses ? HostUncommonProcessesRequestOptions - : T extends NetworkQueries.tls - ? NetworkTlsRequestOptions + : T extends NetworkQueries.dns + ? NetworkDnsRequestOptions : T extends NetworkQueries.http ? NetworkHttpRequestOptions + : T extends NetworkQueries.tls + ? NetworkTlsRequestOptions : T extends NetworkQueries.topCountries ? NetworkTopCountriesRequestOptions : T extends NetworkQueries.topNFlow diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/dns/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/dns/index.ts new file mode 100644 index 0000000000000..e3899a914ee3a --- /dev/null +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/dns/index.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { IEsSearchResponse } from '../../../../../../../../src/plugins/data/common'; +import { CursorType, Inspect, Maybe, PageInfoPaginated, SortField } from '../../../common'; +import { RequestOptionsPaginated } from '../..'; + +export enum NetworkDnsFields { + dnsName = 'dnsName', + queryCount = 'queryCount', + uniqueDomains = 'uniqueDomains', + dnsBytesIn = 'dnsBytesIn', + dnsBytesOut = 'dnsBytesOut', +} + +export interface NetworkDnsRequestOptions extends RequestOptionsPaginated { + isPtrIncluded: boolean; + sort: SortField; + stackByField?: Maybe; +} + +export interface NetworkDnsStrategyResponse extends IEsSearchResponse { + edges: NetworkDnsEdges[]; + totalCount: number; + pageInfo: PageInfoPaginated; + inspect?: Maybe; + histogram?: Maybe; +} + +export interface NetworkDnsEdges { + node: NetworkDnsItem; + cursor: CursorType; +} + +export interface NetworkDnsItem { + _id?: Maybe; + dnsBytesIn?: Maybe; + dnsBytesOut?: Maybe; + dnsName?: Maybe; + queryCount?: Maybe; + uniqueDomains?: Maybe; +} + +export interface MatrixOverOrdinalHistogramData { + x: string; + y: number; + g: string; +} + +export interface NetworkDnsBuckets { + key: string; + doc_count: number; + unique_domains: { + value: number; + }; + dns_bytes_in: { + value: number; + }; + dns_bytes_out: { + value: number; + }; +} diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/index.ts index 2992ee32f8ac7..a0ef43eb3d899 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/index.ts @@ -5,12 +5,14 @@ */ export * from './common'; +export * from './dns'; export * from './http'; export * from './tls'; export * from './top_countries'; export * from './top_n_flow'; export enum NetworkQueries { + dns = 'dns', http = 'http', tls = 'tls', topCountries = 'topCountries', diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/top_countries/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/top_countries/index.ts index f499db82d6479..a28388a2c6f8f 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/top_countries/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/top_countries/index.ts @@ -14,14 +14,6 @@ import { TopNetworkTablesEcsField, } from '../common'; -export enum NetworkDnsFields { - dnsName = 'dnsName', - queryCount = 'queryCount', - uniqueDomains = 'uniqueDomains', - dnsBytesIn = 'dnsBytesIn', - dnsBytesOut = 'dnsBytesOut', -} - export enum FlowTarget { client = 'client', destination = 'destination', diff --git a/x-pack/plugins/security_solution/public/network/containers/network_dns/histogram.ts b/x-pack/plugins/security_solution/public/network/containers/network_dns/histogram.ts new file mode 100644 index 0000000000000..dce0c3bd2b30d --- /dev/null +++ b/x-pack/plugins/security_solution/public/network/containers/network_dns/histogram.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { connect } from 'react-redux'; +import { compose } from 'redux'; +import { DocumentNode } from 'graphql'; +import { ScaleType } from '@elastic/charts'; + +import { MatrixHistogram } from '../../../common/components/matrix_histogram'; +import { + MatrixHistogramOption, + GetSubTitle, +} from '../../../common/components/matrix_histogram/types'; +import { UpdateDateRange } from '../../../common/components/charts/common'; +import { GlobalTimeArgs } from '../../../common/containers/use_global_time'; +import { withKibana } from '../../../common/lib/kibana'; +import { QueryTemplatePaginatedProps } from '../../../common/containers/query_template_paginated'; +import { DEFAULT_TABLE_ACTIVE_PAGE, DEFAULT_TABLE_LIMIT } from '../../../common/store/constants'; +import { networkModel, networkSelectors } from '../../store'; +import { State, inputsSelectors } from '../../../common/store'; + +export const HISTOGRAM_ID = 'networkDnsHistogramQuery'; + +interface DnsHistogramOwnProps extends QueryTemplatePaginatedProps { + dataKey: string | string[]; + defaultStackByOption: MatrixHistogramOption; + errorMessage: string; + isDnsHistogram?: boolean; + query: DocumentNode; + scaleType: ScaleType; + setQuery: GlobalTimeArgs['setQuery']; + showLegend?: boolean; + stackByOptions: MatrixHistogramOption[]; + subtitle?: string | GetSubTitle; + title: string; + type: networkModel.NetworkType; + updateDateRange: UpdateDateRange; + yTickFormatter?: (value: number) => string; +} + +const makeMapHistogramStateToProps = () => { + const getNetworkDnsSelector = networkSelectors.dnsSelector(); + const getQuery = inputsSelectors.globalQueryByIdSelector(); + const mapStateToProps = (state: State, { id = HISTOGRAM_ID }: DnsHistogramOwnProps) => { + const { isInspected } = getQuery(state, id); + return { + ...getNetworkDnsSelector(state), + activePage: DEFAULT_TABLE_ACTIVE_PAGE, + limit: DEFAULT_TABLE_LIMIT, + isInspected, + id, + }; + }; + + return mapStateToProps; +}; + +export const NetworkDnsHistogramQuery = compose>( + connect(makeMapHistogramStateToProps), + withKibana +)(MatrixHistogram); diff --git a/x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx b/x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx index 72e3161de5373..53d9a303ab849 100644 --- a/x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx +++ b/x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx @@ -4,48 +4,38 @@ * you may not use this file except in compliance with the Elastic License. */ -import { getOr } from 'lodash/fp'; -import React from 'react'; -import { Query } from 'react-apollo'; -import { connect } from 'react-redux'; -import { compose } from 'redux'; - -import { DocumentNode } from 'graphql'; -import { ScaleType } from '@elastic/charts'; +import { noop } from 'lodash/fp'; +import { useState, useEffect, useCallback, useRef } from 'react'; +import { shallowEqual, useSelector } from 'react-redux'; +import deepEqual from 'fast-deep-equal'; + +import { ESTermQuery } from '../../../../common/typed_json'; import { DEFAULT_INDEX_KEY } from '../../../../common/constants'; -import { - GetNetworkDnsQuery, - NetworkDnsEdges, - NetworkDnsSortField, - PageInfoPaginated, - MatrixOverOrdinalHistogramData, -} from '../../../graphql/types'; -import { inputsModel, State, inputsSelectors } from '../../../common/store'; -import { withKibana, WithKibanaProps } from '../../../common/lib/kibana'; +import { inputsModel, State } from '../../../common/store'; +import { useKibana } from '../../../common/lib/kibana'; +import { createFilter } from '../../../common/containers/helpers'; +import { NetworkDnsEdges, PageInfoPaginated } from '../../../graphql/types'; import { generateTablePaginationOptions } from '../../../common/components/paginated_table/helpers'; -import { createFilter, getDefaultFetchPolicy } from '../../../common/containers/helpers'; -import { - QueryTemplatePaginated, - QueryTemplatePaginatedProps, -} from '../../../common/containers/query_template_paginated'; -import { networkDnsQuery } from './index.gql_query'; -import { DEFAULT_TABLE_ACTIVE_PAGE, DEFAULT_TABLE_LIMIT } from '../../../common/store/constants'; -import { MatrixHistogram } from '../../../common/components/matrix_histogram'; -import { - MatrixHistogramOption, - GetSubTitle, -} from '../../../common/components/matrix_histogram/types'; -import { UpdateDateRange } from '../../../common/components/charts/common'; -import { GlobalTimeArgs } from '../../../common/containers/use_global_time'; import { networkModel, networkSelectors } from '../../store'; +import { + NetworkQueries, + NetworkDnsRequestOptions, + NetworkDnsStrategyResponse, + MatrixOverOrdinalHistogramData, +} from '../../../../common/search_strategy/security_solution/network'; +import { AbortError } from '../../../../../../../src/plugins/data/common'; +import * as i18n from './translations'; +import { getInspectResponse } from '../../../helpers'; +import { InspectResponse } from '../../../types'; + +export * from './histogram'; const ID = 'networkDnsQuery'; -export const HISTOGRAM_ID = 'networkDnsHistogramQuery'; + export interface NetworkDnsArgs { id: string; - inspect: inputsModel.InspectQuery; + inspect: InspectResponse; isInspected: boolean; - loading: boolean; loadPage: (newActivePage: number) => void; networkDns: NetworkDnsEdges[]; pageInfo: PageInfoPaginated; @@ -55,162 +45,164 @@ export interface NetworkDnsArgs { histogram: MatrixOverOrdinalHistogramData[]; } -export interface OwnProps extends QueryTemplatePaginatedProps { - children: (args: NetworkDnsArgs) => React.ReactNode; +interface UseNetworkDns { + id?: string; type: networkModel.NetworkType; + filterQuery?: ESTermQuery | string; + endDate: string; + startDate: string; + skip: boolean; } -interface DnsHistogramOwnProps extends QueryTemplatePaginatedProps { - dataKey: string | string[]; - defaultStackByOption: MatrixHistogramOption; - errorMessage: string; - isDnsHistogram?: boolean; - query: DocumentNode; - scaleType: ScaleType; - setQuery: GlobalTimeArgs['setQuery']; - showLegend?: boolean; - stackByOptions: MatrixHistogramOption[]; - subtitle?: string | GetSubTitle; - title: string; - type: networkModel.NetworkType; - updateDateRange: UpdateDateRange; - yTickFormatter?: (value: number) => string; -} +export const useNetworkDns = ({ + endDate, + filterQuery, + id = ID, + skip, + startDate, + type, +}: UseNetworkDns): [boolean, NetworkDnsArgs] => { + const getNetworkDnsSelector = networkSelectors.dnsSelector(); + const { activePage, sort, isPtrIncluded, limit } = useSelector( + (state: State) => getNetworkDnsSelector(state), + shallowEqual + ); + const { data, notifications, uiSettings } = useKibana().services; + const refetch = useRef(noop); + const abortCtrl = useRef(new AbortController()); + const defaultIndex = uiSettings.get(DEFAULT_INDEX_KEY); + const [loading, setLoading] = useState(false); -export interface NetworkDnsComponentReduxProps { - activePage: number; - sort: NetworkDnsSortField; - isInspected: boolean; - isPtrIncluded: boolean; - limit: number; -} + const [networkDnsRequest, setNetworkDnsRequest] = useState({ + defaultIndex, + factoryQueryType: NetworkQueries.dns, + filterQuery: createFilter(filterQuery), + isPtrIncluded, + pagination: generateTablePaginationOptions(activePage, limit), + sort, + timerange: { + interval: '12h', + from: startDate ? startDate : '', + to: endDate ? endDate : new Date(Date.now()).toISOString(), + }, + }); + + const wrappedLoadMore = useCallback( + (newActivePage: number) => { + setNetworkDnsRequest((prevRequest) => ({ + ...prevRequest, + pagination: generateTablePaginationOptions(newActivePage, limit), + })); + }, + [limit] + ); -type NetworkDnsProps = OwnProps & NetworkDnsComponentReduxProps & WithKibanaProps; - -export class NetworkDnsComponentQuery extends QueryTemplatePaginated< - NetworkDnsProps, - GetNetworkDnsQuery.Query, - GetNetworkDnsQuery.Variables -> { - public render() { - const { - activePage, - children, - sort, - endDate, - filterQuery, - id = ID, - isInspected, - isPtrIncluded, - kibana, - limit, - skip, - sourceId, - startDate, - } = this.props; - const variables: GetNetworkDnsQuery.Variables = { - defaultIndex: kibana.services.uiSettings.get(DEFAULT_INDEX_KEY), - filterQuery: createFilter(filterQuery), - inspect: isInspected, - isPtrIncluded, - pagination: generateTablePaginationOptions(activePage, limit), - sort, - sourceId, - timerange: { - interval: '12h', - from: startDate!, - to: endDate!, - }, - }; - - return ( - - fetchPolicy={getDefaultFetchPolicy()} - notifyOnNetworkStatusChange - query={networkDnsQuery} - skip={skip} - variables={variables} - > - {({ data, loading, fetchMore, networkStatus, refetch }) => { - const networkDns = getOr([], `source.NetworkDns.edges`, data); - this.setFetchMore(fetchMore); - this.setFetchMoreOptions((newActivePage: number) => ({ - variables: { - pagination: generateTablePaginationOptions(newActivePage, limit), + const [networkDnsResponse, setNetworkDnsResponse] = useState({ + networkDns: [], + histogram: [], + id: ID, + inspect: { + dsl: [], + response: [], + }, + isInspected: false, + loadPage: wrappedLoadMore, + pageInfo: { + activePage: 0, + fakeTotalCount: 0, + showMorePagesIndicator: false, + }, + refetch: refetch.current, + totalCount: -1, + }); + + const networkDnsSearch = useCallback( + (request: NetworkDnsRequestOptions) => { + let didCancel = false; + const asyncSearch = async () => { + abortCtrl.current = new AbortController(); + setLoading(true); + + const searchSubscription$ = data.search + .search(request, { + strategy: 'securitySolutionSearchStrategy', + abortSignal: abortCtrl.current.signal, + }) + .subscribe({ + next: (response) => { + if (!response.isPartial && !response.isRunning) { + if (!didCancel) { + setLoading(false); + setNetworkDnsResponse((prevResponse) => ({ + ...prevResponse, + networkDns: response.edges, + inspect: getInspectResponse(response, prevResponse.inspect), + pageInfo: response.pageInfo, + refetch: refetch.current, + totalCount: response.totalCount, + histogram: response.histogram ?? prevResponse.histogram, + })); + } + searchSubscription$.unsubscribe(); + } else if (response.isPartial && !response.isRunning) { + if (!didCancel) { + setLoading(false); + } + // TODO: Make response error status clearer + notifications.toasts.addWarning(i18n.ERROR_NETWORK_DNS); + searchSubscription$.unsubscribe(); + } }, - updateQuery: (prev, { fetchMoreResult }) => { - if (!fetchMoreResult) { - return prev; + error: (msg) => { + if (!(msg instanceof AbortError)) { + notifications.toasts.addDanger({ + title: i18n.FAIL_NETWORK_DNS, + text: msg.message, + }); } - return { - ...fetchMoreResult, - source: { - ...fetchMoreResult.source, - NetworkDns: { - ...fetchMoreResult.source.NetworkDns, - edges: [...fetchMoreResult.source.NetworkDns.edges], - }, - }, - }; }, - })); - const isLoading = this.isItAValidLoading(loading, variables, networkStatus); - return children({ - id, - inspect: getOr(null, 'source.NetworkDns.inspect', data), - isInspected, - loading: isLoading, - loadPage: this.wrappedLoadMore, - networkDns, - pageInfo: getOr({}, 'source.NetworkDns.pageInfo', data), - refetch: this.memoizedRefetchQuery(variables, limit, refetch), - totalCount: getOr(-1, 'source.NetworkDns.totalCount', data), - histogram: getOr(null, 'source.NetworkDns.histogram', data), }); - }} - - ); - } -} + }; + abortCtrl.current.abort(); + asyncSearch(); + refetch.current = asyncSearch; + return () => { + didCancel = true; + abortCtrl.current.abort(); + }; + }, + [data.search, notifications.toasts] + ); -const makeMapStateToProps = () => { - const getNetworkDnsSelector = networkSelectors.dnsSelector(); - const getQuery = inputsSelectors.globalQueryByIdSelector(); - const mapStateToProps = (state: State, { id = ID }: OwnProps) => { - const { isInspected } = getQuery(state, id); - return { - ...getNetworkDnsSelector(state), - isInspected, - id, - }; - }; - - return mapStateToProps; -}; + useEffect(() => { + if (skip) { + return; + } -const makeMapHistogramStateToProps = () => { - const getNetworkDnsSelector = networkSelectors.dnsSelector(); - const getQuery = inputsSelectors.globalQueryByIdSelector(); - const mapStateToProps = (state: State, { id = HISTOGRAM_ID }: DnsHistogramOwnProps) => { - const { isInspected } = getQuery(state, id); - return { - ...getNetworkDnsSelector(state), - activePage: DEFAULT_TABLE_ACTIVE_PAGE, - limit: DEFAULT_TABLE_LIMIT, - isInspected, - id, - }; - }; - - return mapStateToProps; -}; + setNetworkDnsRequest((prevRequest) => { + const myRequest = { + ...prevRequest, + defaultIndex, + isPtrIncluded, + filterQuery: createFilter(filterQuery), + pagination: generateTablePaginationOptions(activePage, limit), + sort, + timerange: { + interval: '12h', + from: startDate, + to: endDate, + }, + }; + if (!deepEqual(prevRequest, myRequest)) { + return myRequest; + } + return prevRequest; + }); + }, [activePage, defaultIndex, endDate, filterQuery, limit, startDate, sort, skip, isPtrIncluded]); -export const NetworkDnsQuery = compose>( - connect(makeMapStateToProps), - withKibana -)(NetworkDnsComponentQuery); + useEffect(() => { + networkDnsSearch(networkDnsRequest); + }, [networkDnsRequest, networkDnsSearch]); -export const NetworkDnsHistogramQuery = compose>( - connect(makeMapHistogramStateToProps), - withKibana -)(MatrixHistogram); + return [loading, networkDnsResponse]; +}; diff --git a/x-pack/plugins/security_solution/public/network/containers/network_dns/translations.ts b/x-pack/plugins/security_solution/public/network/containers/network_dns/translations.ts new file mode 100644 index 0000000000000..54c36dd1536f1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/network/containers/network_dns/translations.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; + +export const ERROR_NETWORK_DNS = i18n.translate( + 'xpack.securitySolution.networkDns.errorSearchDescription', + { + defaultMessage: `An error has occurred on network dns search`, + } +); + +export const FAIL_NETWORK_DNS = i18n.translate( + 'xpack.securitySolution.networkDns.failSearchDescription', + { + defaultMessage: `Failed to run search on network dns`, + } +); diff --git a/x-pack/plugins/security_solution/public/network/pages/ip_details/types.ts b/x-pack/plugins/security_solution/public/network/pages/ip_details/types.ts index d1ee48a9a5d9e..cab6e8e09b200 100644 --- a/x-pack/plugins/security_solution/public/network/pages/ip_details/types.ts +++ b/x-pack/plugins/security_solution/public/network/pages/ip_details/types.ts @@ -11,7 +11,7 @@ import { NetworkType } from '../../store/model'; import { FlowTarget, FlowTargetSourceDest, -} from '../../../../common/search_strategy/security_solution/network'; +} from '../../../../common/search_strategy/security_solution'; import { GlobalTimeArgs } from '../../../common/containers/use_global_time'; export const type = NetworkType.details; diff --git a/x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx b/x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx index 051e85ab310c8..5adb78edbec8e 100644 --- a/x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx +++ b/x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx @@ -8,7 +8,7 @@ import React, { useEffect, useCallback, useMemo } from 'react'; import { getOr } from 'lodash/fp'; import { NetworkDnsTable } from '../../components/network_dns_table'; -import { NetworkDnsQuery, HISTOGRAM_ID } from '../../containers/network_dns'; +import { useNetworkDns, HISTOGRAM_ID } from '../../containers/network_dns'; import { manageQuery } from '../../../common/components/page/manage_query'; import { NetworkComponentQueryProps } from './types'; @@ -41,7 +41,7 @@ export const histogramConfigs: Omit = { subtitle: undefined, }; -export const DnsQueryTabBody = ({ +const DnsQueryTabBodyComponent: React.FC = ({ deleteQuery, endDate, filterQuery, @@ -49,7 +49,7 @@ export const DnsQueryTabBody = ({ startDate, setQuery, type, -}: NetworkComponentQueryProps) => { +}) => { useEffect(() => { return () => { if (deleteQuery) { @@ -58,6 +58,17 @@ export const DnsQueryTabBody = ({ }; }, [deleteQuery]); + const [ + loading, + { totalCount, networkDns, pageInfo, loadPage, id, inspect, isInspected, refetch }, + ] = useNetworkDns({ + endDate, + filterQuery, + skip, + startDate, + type, + }); + const getTitle = useCallback( (option: MatrixHistogramOption) => i18n.DOMAINS_COUNT_BY(option.text), [] @@ -82,43 +93,24 @@ export const DnsQueryTabBody = ({ startDate={startDate} {...dnsHistogramConfigs} /> - - {({ - totalCount, - loading, - networkDns, - pageInfo, - loadPage, - id, - inspect, - isInspected, - refetch, - }) => ( - - )} - + /> ); }; -DnsQueryTabBody.displayName = 'DNSQueryTabBody'; +DnsQueryTabBodyComponent.displayName = 'DnsQueryTabBodyComponent'; + +export const DnsQueryTabBody = React.memo(DnsQueryTabBodyComponent); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/helpers.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/helpers.ts new file mode 100644 index 0000000000000..aa242e6ece7bf --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/helpers.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { get, getOr } from 'lodash/fp'; + +import { IEsSearchResponse } from '../../../../../../../../../src/plugins/data/common'; +import { + NetworkDnsBuckets, + NetworkDnsEdges, +} from '../../../../../../common/search_strategy/security_solution/network'; + +export const getDnsEdges = (response: IEsSearchResponse): NetworkDnsEdges[] => + formatDnsEdges(getOr([], `aggregations.dns_name_query_count.buckets`, response.rawResponse)); + +export const formatDnsEdges = (buckets: NetworkDnsBuckets[]): NetworkDnsEdges[] => + buckets.map((bucket: NetworkDnsBuckets) => ({ + node: { + _id: bucket.key, + dnsBytesIn: getOrNumber('dns_bytes_in.value', bucket), + dnsBytesOut: getOrNumber('dns_bytes_out.value', bucket), + dnsName: bucket.key, + queryCount: bucket.doc_count, + uniqueDomains: getOrNumber('unique_domains.value', bucket), + }, + cursor: { + value: bucket.key, + tiebreaker: null, + }, + })); + +const getOrNumber = (path: string, bucket: NetworkDnsBuckets) => { + const numb = get(path, bucket); + if (numb == null) { + return null; + } + return numb; +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/index.ts new file mode 100644 index 0000000000000..8e734ca9d1179 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/index.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { getOr } from 'lodash/fp'; + +import { IEsSearchResponse } from '../../../../../../../../../src/plugins/data/common'; + +import { DEFAULT_MAX_TABLE_QUERY_SIZE } from '../../../../../../common/constants'; +import { + NetworkDnsStrategyResponse, + NetworkQueries, + NetworkDnsRequestOptions, + NetworkDnsEdges, +} from '../../../../../../common/search_strategy/security_solution/network'; + +import { inspectStringifyObject } from '../../../../../utils/build_query'; +import { SecuritySolutionFactory } from '../../types'; + +import { getDnsEdges } from './helpers'; +import { buildDnsQuery } from './query.dns_network.dsl'; + +export const networkDns: SecuritySolutionFactory = { + buildDsl: (options: NetworkDnsRequestOptions) => { + if (options.pagination && options.pagination.querySize >= DEFAULT_MAX_TABLE_QUERY_SIZE) { + throw new Error(`No query size above ${DEFAULT_MAX_TABLE_QUERY_SIZE}`); + } + return buildDnsQuery(options); + }, + parse: async ( + options: NetworkDnsRequestOptions, + response: IEsSearchResponse + ): Promise => { + const { activePage, cursorStart, fakePossibleCount, querySize } = options.pagination; + const totalCount = getOr(0, 'aggregations.dns_count.value', response.rawResponse); + const networkDnsEdges: NetworkDnsEdges[] = getDnsEdges(response); + const fakeTotalCount = fakePossibleCount <= totalCount ? fakePossibleCount : totalCount; + const edges = networkDnsEdges.splice(cursorStart, querySize - cursorStart); + const inspect = { + dsl: [inspectStringifyObject(buildDnsQuery(options))], + }; + const showMorePagesIndicator = totalCount > fakeTotalCount; + + return { + ...response, + edges, + inspect, + pageInfo: { + activePage: activePage ? activePage : 0, + fakeTotalCount, + showMorePagesIndicator, + }, + totalCount, + }; + }, +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/query.dns_network.dsl.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/query.dns_network.dsl.ts new file mode 100644 index 0000000000000..85b9051189bfe --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/query.dns_network.dsl.ts @@ -0,0 +1,134 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { isEmpty } from 'lodash/fp'; + +import { assertUnreachable } from '../../../../../../common/utility_types'; +import { + Direction, + SortField, + NetworkDnsRequestOptions, + NetworkDnsFields, +} from '../../../../../../common/search_strategy'; +import { createQueryFilterClauses } from '../../../../../utils/build_query'; + +type QueryOrder = + | { _count: Direction } + | { _key: Direction } + | { unique_domains: Direction } + | { dns_bytes_in: Direction } + | { dns_bytes_out: Direction }; + +const getQueryOrder = (sort: SortField): QueryOrder => { + switch (sort.field) { + case NetworkDnsFields.queryCount: + return { _count: sort.direction }; + case NetworkDnsFields.dnsName: + return { _key: sort.direction }; + case NetworkDnsFields.uniqueDomains: + return { unique_domains: sort.direction }; + case NetworkDnsFields.dnsBytesIn: + return { dns_bytes_in: sort.direction }; + case NetworkDnsFields.dnsBytesOut: + return { dns_bytes_out: sort.direction }; + } + assertUnreachable(sort.field); +}; + +const getCountAgg = () => ({ + dns_count: { + cardinality: { + field: 'dns.question.registered_domain', + }, + }, +}); + +const createIncludePTRFilter = (isPtrIncluded: boolean) => + isPtrIncluded + ? {} + : { + must_not: [ + { + term: { + 'dns.question.type': { + value: 'PTR', + }, + }, + }, + ], + }; + +export const buildDnsQuery = ({ + defaultIndex, + docValueFields, + filterQuery, + isPtrIncluded, + sort, + pagination: { querySize }, + stackByField = 'dns.question.registered_domain', + timerange: { from, to }, +}: NetworkDnsRequestOptions) => { + const filter = [ + ...createQueryFilterClauses(filterQuery), + { + range: { + '@timestamp': { + gte: from, + lte: to, + format: 'strict_date_optional_time', + }, + }, + }, + ]; + + const dslQuery = { + allowNoIndices: true, + index: defaultIndex, + ignoreUnavailable: true, + body: { + ...(isEmpty(docValueFields) ? { docvalue_fields: docValueFields } : {}), + aggregations: { + ...getCountAgg(), + dns_name_query_count: { + terms: { + field: stackByField, + size: querySize, + order: { + ...getQueryOrder(sort), + }, + }, + aggs: { + unique_domains: { + cardinality: { + field: 'dns.question.name', + }, + }, + dns_bytes_in: { + sum: { + field: 'source.bytes', + }, + }, + dns_bytes_out: { + sum: { + field: 'destination.bytes', + }, + }, + }, + }, + }, + query: { + bool: { + filter, + ...createIncludePTRFilter(isPtrIncluded), + }, + }, + }, + size: 0, + track_total_hits: false, + }; + + return dslQuery; +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/index.ts index c5c98e5facbdf..f2b4f85174797 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/index.ts @@ -10,12 +10,14 @@ import { } from '../../../../../common/search_strategy/security_solution'; import { SecuritySolutionFactory } from '../types'; +import { networkDns } from './dns'; import { networkHttp } from './http'; import { networkTls } from './tls'; import { networkTopCountries } from './top_countries'; import { networkTopNFlow } from './top_n_flow'; export const networkFactory: Record> = { + [NetworkQueries.dns]: networkDns, [NetworkQueries.http]: networkHttp, [NetworkQueries.tls]: networkTls, [NetworkQueries.topCountries]: networkTopCountries, From 8705ab8c7b7091149613bbf466aa87c4005dfd76 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Mon, 7 Sep 2020 15:52:29 +0200 Subject: [PATCH 04/58] Do not apply search source data for tsvb (#75137) --- .../visualization_migrations.test.ts | 42 +++++++++++++++++++ .../saved_objects/visualization_migrations.ts | 31 +++++++++++++- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/src/plugins/visualizations/server/saved_objects/visualization_migrations.test.ts b/src/plugins/visualizations/server/saved_objects/visualization_migrations.test.ts index 05f00e12c172e..dc8bae69ca377 100644 --- a/src/plugins/visualizations/server/saved_objects/visualization_migrations.test.ts +++ b/src/plugins/visualizations/server/saved_objects/visualization_migrations.test.ts @@ -1578,4 +1578,46 @@ describe('migration visualization', () => { expect(metric.denominator).toHaveProperty('language'); }); }); + + describe('7.10.0 remove tsvb search source', () => { + const migrate = (doc: any) => + visualizationSavedObjectTypeMigrations['7.10.0']( + doc as Parameters[0], + savedObjectMigrationContext + ); + const generateDoc = (visState: any) => ({ + attributes: { + title: 'My Vis', + description: 'This is my super cool vis.', + visState: JSON.stringify(visState), + uiStateJSON: '{}', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: JSON.stringify({ + filter: [], + query: { + query: { + query_string: { + query: '*', + }, + }, + language: 'lucene', + }, + }), + }, + }, + }); + + it('should remove the search source JSON', () => { + const timeSeriesDoc = generateDoc({ type: 'metrics' }); + const migratedtimeSeriesDoc = migrate(timeSeriesDoc); + expect(migratedtimeSeriesDoc.attributes.kibanaSavedObjectMeta.searchSourceJSON).toEqual('{}'); + const { kibanaSavedObjectMeta, ...attributes } = migratedtimeSeriesDoc.attributes; + const { + kibanaSavedObjectMeta: oldKibanaSavedObjectMeta, + ...oldAttributes + } = migratedtimeSeriesDoc.attributes; + expect(attributes).toEqual(oldAttributes); + }); + }); }); diff --git a/src/plugins/visualizations/server/saved_objects/visualization_migrations.ts b/src/plugins/visualizations/server/saved_objects/visualization_migrations.ts index 64491d02aa0a3..170d7c460b06a 100644 --- a/src/plugins/visualizations/server/saved_objects/visualization_migrations.ts +++ b/src/plugins/visualizations/server/saved_objects/visualization_migrations.ts @@ -721,6 +721,35 @@ const migrateTsvbDefaultColorPalettes: SavedObjectMigrationFn = (doc) return doc; }; +// [TSVB] Remove serialized search source as it's not used in TSVB visualizations +const removeTSVBSearchSource: SavedObjectMigrationFn = (doc) => { + const visStateJSON = get(doc, 'attributes.visState'); + let visState; + + const searchSourceJSON = get(doc, 'attributes.kibanaSavedObjectMeta.searchSourceJSON'); + + if (visStateJSON) { + try { + visState = JSON.parse(visStateJSON); + } catch (e) { + // Let it go, the data is invalid and we'll leave it as is + } + if (visState && visState.type === 'metrics' && searchSourceJSON !== '{}') { + return { + ...doc, + attributes: { + ...doc.attributes, + kibanaSavedObjectMeta: { + ...get(doc, 'attributes.kibanaSavedObjectMeta'), + searchSourceJSON: '{}', + }, + }, + }; + } + } + return doc; +}; + export const visualizationSavedObjectTypeMigrations = { /** * We need to have this migration twice, once with a version prior to 7.0.0 once with a version @@ -752,5 +781,5 @@ export const visualizationSavedObjectTypeMigrations = { '7.4.2': flow(transformSplitFiltersStringToQueryObject), '7.7.0': flow(migrateOperatorKeyTypo, migrateSplitByChartRow), '7.8.0': flow(migrateTsvbDefaultColorPalettes), - '7.10.0': flow(migrateFilterRatioQuery), + '7.10.0': flow(migrateFilterRatioQuery, removeTSVBSearchSource), }; From d16c239eb928d2659f5b7ce205d30099e2563c66 Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Mon, 7 Sep 2020 14:56:19 +0100 Subject: [PATCH 05/58] [Security Solution] Add unit test for authentications search strategy (#76665) * add unit test for auth search strategy * revert * unit test for helper * fix types Co-authored-by: Elastic Machine --- .../hosts/authentications/__mocks__/index.ts | 2370 +++++++++++++++++ .../authentications/dsl/query.dsl.test.ts | 13 + .../hosts/authentications/helpers.test.ts | 118 + .../factory/hosts/authentications/helpers.ts | 12 +- .../hosts/authentications/index.test.tsx | 52 + .../factory/hosts/authentications/index.tsx | 4 +- 6 files changed, 2563 insertions(+), 6 deletions(-) create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/__mocks__/index.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/dsl/query.dsl.test.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/helpers.test.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/index.test.tsx diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/__mocks__/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/__mocks__/index.ts new file mode 100644 index 0000000000000..65343dc721fd7 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/__mocks__/index.ts @@ -0,0 +1,2370 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { IEsSearchResponse } from '../../../../../../../../../../src/plugins/data/common'; +import { + AuthenticationHit, + Direction, + HostsQueries, + HostAuthenticationsRequestOptions, +} from '../../../../../../../common/search_strategy'; + +export const mockOptions: HostAuthenticationsRequestOptions = { + defaultIndex: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + docValueFields: [ + { + field: '@timestamp', + format: 'date_time', + }, + { + field: 'event.created', + format: 'date_time', + }, + { + field: 'event.end', + format: 'date_time', + }, + { + field: 'event.ingested', + format: 'date_time', + }, + { + field: 'event.start', + format: 'date_time', + }, + { + field: 'file.accessed', + format: 'date_time', + }, + { + field: 'file.created', + format: 'date_time', + }, + { + field: 'file.ctime', + format: 'date_time', + }, + { + field: 'file.mtime', + format: 'date_time', + }, + { + field: 'package.installed', + format: 'date_time', + }, + { + field: 'process.parent.start', + format: 'date_time', + }, + { + field: 'process.start', + format: 'date_time', + }, + { + field: 'system.audit.host.boottime', + format: 'date_time', + }, + { + field: 'system.audit.package.installtime', + format: 'date_time', + }, + { + field: 'system.audit.user.password.last_changed', + format: 'date_time', + }, + { + field: 'tls.client.not_after', + format: 'date_time', + }, + { + field: 'tls.client.not_before', + format: 'date_time', + }, + { + field: 'tls.server.not_after', + format: 'date_time', + }, + { + field: 'tls.server.not_before', + format: 'date_time', + }, + { + field: 'aws.cloudtrail.user_identity.session_context.creation_date', + format: 'date_time', + }, + { + field: 'azure.auditlogs.properties.activity_datetime', + format: 'date_time', + }, + { + field: 'azure.enqueued_time', + format: 'date_time', + }, + { + field: 'azure.signinlogs.properties.created_at', + format: 'date_time', + }, + { + field: 'cef.extensions.agentReceiptTime', + format: 'date_time', + }, + { + field: 'cef.extensions.deviceCustomDate1', + format: 'date_time', + }, + { + field: 'cef.extensions.deviceCustomDate2', + format: 'date_time', + }, + { + field: 'cef.extensions.deviceReceiptTime', + format: 'date_time', + }, + { + field: 'cef.extensions.endTime', + format: 'date_time', + }, + { + field: 'cef.extensions.fileCreateTime', + format: 'date_time', + }, + { + field: 'cef.extensions.fileModificationTime', + format: 'date_time', + }, + { + field: 'cef.extensions.flexDate1', + format: 'date_time', + }, + { + field: 'cef.extensions.managerReceiptTime', + format: 'date_time', + }, + { + field: 'cef.extensions.oldFileCreateTime', + format: 'date_time', + }, + { + field: 'cef.extensions.oldFileModificationTime', + format: 'date_time', + }, + { + field: 'cef.extensions.startTime', + format: 'date_time', + }, + { + field: 'checkpoint.subs_exp', + format: 'date_time', + }, + { + field: 'crowdstrike.event.EndTimestamp', + format: 'date_time', + }, + { + field: 'crowdstrike.event.IncidentEndTime', + format: 'date_time', + }, + { + field: 'crowdstrike.event.IncidentStartTime', + format: 'date_time', + }, + { + field: 'crowdstrike.event.ProcessEndTime', + format: 'date_time', + }, + { + field: 'crowdstrike.event.ProcessStartTime', + format: 'date_time', + }, + { + field: 'crowdstrike.event.StartTimestamp', + format: 'date_time', + }, + { + field: 'crowdstrike.event.Timestamp', + format: 'date_time', + }, + { + field: 'crowdstrike.event.UTCTimestamp', + format: 'date_time', + }, + { + field: 'crowdstrike.metadata.eventCreationTime', + format: 'date_time', + }, + { + field: 'gsuite.admin.email.log_search_filter.end_date', + format: 'date_time', + }, + { + field: 'gsuite.admin.email.log_search_filter.start_date', + format: 'date_time', + }, + { + field: 'gsuite.admin.user.birthdate', + format: 'date_time', + }, + { + field: 'kafka.block_timestamp', + format: 'date_time', + }, + { + field: 'microsoft.defender_atp.lastUpdateTime', + format: 'date_time', + }, + { + field: 'microsoft.defender_atp.resolvedTime', + format: 'date_time', + }, + { + field: 'misp.campaign.first_seen', + format: 'date_time', + }, + { + field: 'misp.campaign.last_seen', + format: 'date_time', + }, + { + field: 'misp.intrusion_set.first_seen', + format: 'date_time', + }, + { + field: 'misp.intrusion_set.last_seen', + format: 'date_time', + }, + { + field: 'misp.observed_data.first_observed', + format: 'date_time', + }, + { + field: 'misp.observed_data.last_observed', + format: 'date_time', + }, + { + field: 'misp.report.published', + format: 'date_time', + }, + { + field: 'misp.threat_indicator.valid_from', + format: 'date_time', + }, + { + field: 'misp.threat_indicator.valid_until', + format: 'date_time', + }, + { + field: 'netflow.collection_time_milliseconds', + format: 'date_time', + }, + { + field: 'netflow.exporter.timestamp', + format: 'date_time', + }, + { + field: 'netflow.flow_end_microseconds', + format: 'date_time', + }, + { + field: 'netflow.flow_end_milliseconds', + format: 'date_time', + }, + { + field: 'netflow.flow_end_nanoseconds', + format: 'date_time', + }, + { + field: 'netflow.flow_end_seconds', + format: 'date_time', + }, + { + field: 'netflow.flow_start_microseconds', + format: 'date_time', + }, + { + field: 'netflow.flow_start_milliseconds', + format: 'date_time', + }, + { + field: 'netflow.flow_start_nanoseconds', + format: 'date_time', + }, + { + field: 'netflow.flow_start_seconds', + format: 'date_time', + }, + { + field: 'netflow.max_export_seconds', + format: 'date_time', + }, + { + field: 'netflow.max_flow_end_microseconds', + format: 'date_time', + }, + { + field: 'netflow.max_flow_end_milliseconds', + format: 'date_time', + }, + { + field: 'netflow.max_flow_end_nanoseconds', + format: 'date_time', + }, + { + field: 'netflow.max_flow_end_seconds', + format: 'date_time', + }, + { + field: 'netflow.min_export_seconds', + format: 'date_time', + }, + { + field: 'netflow.min_flow_start_microseconds', + format: 'date_time', + }, + { + field: 'netflow.min_flow_start_milliseconds', + format: 'date_time', + }, + { + field: 'netflow.min_flow_start_nanoseconds', + format: 'date_time', + }, + { + field: 'netflow.min_flow_start_seconds', + format: 'date_time', + }, + { + field: 'netflow.monitoring_interval_end_milli_seconds', + format: 'date_time', + }, + { + field: 'netflow.monitoring_interval_start_milli_seconds', + format: 'date_time', + }, + { + field: 'netflow.observation_time_microseconds', + format: 'date_time', + }, + { + field: 'netflow.observation_time_milliseconds', + format: 'date_time', + }, + { + field: 'netflow.observation_time_nanoseconds', + format: 'date_time', + }, + { + field: 'netflow.observation_time_seconds', + format: 'date_time', + }, + { + field: 'netflow.system_init_time_milliseconds', + format: 'date_time', + }, + { + field: 'rsa.internal.lc_ctime', + format: 'date_time', + }, + { + field: 'rsa.internal.time', + format: 'date_time', + }, + { + field: 'rsa.time.effective_time', + format: 'date_time', + }, + { + field: 'rsa.time.endtime', + format: 'date_time', + }, + { + field: 'rsa.time.event_queue_time', + format: 'date_time', + }, + { + field: 'rsa.time.event_time', + format: 'date_time', + }, + { + field: 'rsa.time.expire_time', + format: 'date_time', + }, + { + field: 'rsa.time.recorded_time', + format: 'date_time', + }, + { + field: 'rsa.time.stamp', + format: 'date_time', + }, + { + field: 'rsa.time.starttime', + format: 'date_time', + }, + { + field: 'sophos.xg.date', + format: 'date_time', + }, + { + field: 'sophos.xg.eventtime', + format: 'date_time', + }, + { + field: 'sophos.xg.start_time', + format: 'date_time', + }, + ], + factoryQueryType: HostsQueries.authentications, + filterQuery: '{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[]}}', + pagination: { + activePage: 0, + cursorStart: 0, + fakePossibleCount: 50, + querySize: 10, + }, + timerange: { + interval: '12h', + from: '2020-09-02T15:17:13.678Z', + to: '2020-09-03T15:17:13.678Z', + }, + sort: { + direction: Direction.desc, + field: 'success', + }, + params: {}, +}; + +export const mockSearchStrategyResponse: IEsSearchResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 14, + timed_out: false, + _shards: { total: 21, successful: 21, skipped: 0, failed: 0 }, + hits: { total: -1, max_score: 0, hits: [] }, + aggregations: { + group_by_users: { + doc_count_error_upper_bound: -1, + sum_other_doc_count: 408, + buckets: [ + { + key: 'SYSTEM', + doc_count: 281, + failures: { + meta: {}, + doc_count: 0, + lastFailure: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + successes: { + meta: {}, + doc_count: 4, + lastSuccess: { + hits: { + total: 4, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'zqY7WXQBA6bGZw2uLeKI', + _score: null, + _source: { + process: { + name: 'services.exe', + pid: 564, + executable: 'C:\\Windows\\System32\\services.exe', + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + name: 'siem-windows', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + type: 'winlogbeat', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + version: '8.0.0', + user: { name: 'inside_winlogbeat_user' }, + }, + winlog: { + computer_name: 'siem-windows', + process: { pid: 576, thread: { id: 880 } }, + keywords: ['Audit Success'], + logon: { id: '0x3e7', type: 'Service' }, + channel: 'Security', + event_data: { + LogonGuid: '{00000000-0000-0000-0000-000000000000}', + TargetOutboundDomainName: '-', + VirtualAccount: '%%1843', + LogonType: '5', + IpPort: '-', + TransmittedServices: '-', + SubjectLogonId: '0x3e7', + LmPackageName: '-', + TargetOutboundUserName: '-', + KeyLength: '0', + TargetLogonId: '0x3e7', + RestrictedAdminMode: '-', + SubjectUserName: 'SIEM-WINDOWS$', + TargetLinkedLogonId: '0x0', + ElevatedToken: '%%1842', + SubjectDomainName: 'WORKGROUP', + IpAddress: '-', + ImpersonationLevel: '%%1833', + TargetUserName: 'SYSTEM', + LogonProcessName: 'Advapi ', + TargetDomainName: 'NT AUTHORITY', + SubjectUserSid: 'S-1-5-18', + TargetUserSid: 'S-1-5-18', + AuthenticationPackageName: 'Negotiate', + }, + opcode: 'Info', + version: 2, + record_id: 57818, + task: 'Logon', + event_id: 4624, + provider_guid: '{54849625-5478-4994-a5ba-3e3b0328c30d}', + activity_id: '{d2485217-6bac-0000-8fbb-3f7e2571d601}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Security-Auditing', + }, + log: { level: 'information' }, + source: { domain: '-' }, + message: + 'An account was successfully logged on.\n\nSubject:\n\tSecurity ID:\t\tS-1-5-18\n\tAccount Name:\t\tSIEM-WINDOWS$\n\tAccount Domain:\t\tWORKGROUP\n\tLogon ID:\t\t0x3E7\n\nLogon Information:\n\tLogon Type:\t\t5\n\tRestricted Admin Mode:\t-\n\tVirtual Account:\t\tNo\n\tElevated Token:\t\tYes\n\nImpersonation Level:\t\tImpersonation\n\nNew Logon:\n\tSecurity ID:\t\tS-1-5-18\n\tAccount Name:\t\tSYSTEM\n\tAccount Domain:\t\tNT AUTHORITY\n\tLogon ID:\t\t0x3E7\n\tLinked Logon ID:\t\t0x0\n\tNetwork Account Name:\t-\n\tNetwork Account Domain:\t-\n\tLogon GUID:\t\t{00000000-0000-0000-0000-000000000000}\n\nProcess Information:\n\tProcess ID:\t\t0x234\n\tProcess Name:\t\tC:\\Windows\\System32\\services.exe\n\nNetwork Information:\n\tWorkstation Name:\t-\n\tSource Network Address:\t-\n\tSource Port:\t\t-\n\nDetailed Authentication Information:\n\tLogon Process:\t\tAdvapi \n\tAuthentication Package:\tNegotiate\n\tTransited Services:\t-\n\tPackage Name (NTLM only):\t-\n\tKey Length:\t\t0\n\nThis event is generated when a logon session is created. It is generated on the computer that was accessed.\n\nThe subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.\n\nThe logon type field indicates the kind of logon that occurred. The most common types are 2 (interactive) and 3 (network).\n\nThe New Logon fields indicate the account for whom the new logon was created, i.e. the account that was logged on.\n\nThe network fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.\n\nThe impersonation level field indicates the extent to which a process in the logon session can impersonate.\n\nThe authentication information fields provide detailed information about this specific logon request.\n\t- Logon GUID is a unique identifier that can be used to correlate this event with a KDC event.\n\t- Transited services indicate which intermediate services have participated in this logon request.\n\t- Package name indicates which sub-protocol was used among the NTLM protocols.\n\t- Key length indicates the length of the generated session key. This will be 0 if no session key was requested.', + cloud: { + availability_zone: 'us-central1-c', + instance: { name: 'siem-windows', id: '9156726559029788564' }, + provider: 'gcp', + machine: { type: 'g1-small' }, + project: { id: 'elastic-siem' }, + }, + '@timestamp': '2020-09-04T13:08:02.532Z', + related: { user: ['SYSTEM', 'SIEM-WINDOWS$'] }, + ecs: { version: '1.5.0' }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 4624, + provider: 'Microsoft-Windows-Security-Auditing', + created: '2020-09-04T13:08:03.638Z', + kind: 'event', + module: 'security', + action: 'logged-in', + category: 'authentication', + type: 'start', + outcome: 'success', + }, + user: { domain: 'NT AUTHORITY', name: 'SYSTEM', id: 'S-1-5-18' }, + }, + sort: [1599224882532], + }, + ], + }, + }, + }, + }, + { + key: 'tsg', + doc_count: 1, + failures: { + doc_count: 0, + lastFailure: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + successes: { + doc_count: 1, + lastSuccess: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-system.auth-default-000001', + _id: '9_sfWXQBc39KFIJbIsDh', + _score: null, + _source: { + agent: { + hostname: 'siem-kibana', + name: 'siem-kibana', + id: 'aa3d9dc7-fef1-4c2f-a68d-25785d624e35', + ephemeral_id: 'e503bd85-11c7-4bc9-ae7d-70be1d919fb7', + type: 'filebeat', + version: '7.9.1', + }, + process: { name: 'sshd', pid: 20764 }, + log: { file: { path: '/var/log/auth.log' }, offset: 552463 }, + source: { + geo: { + continent_name: 'Europe', + region_iso_code: 'DE-BE', + city_name: 'Berlin', + country_iso_code: 'DE', + region_name: 'Land Berlin', + location: { lon: 13.3512, lat: 52.5727 }, + }, + as: { number: 6805, organization: { name: 'Telefonica Germany' } }, + port: 57457, + ip: '77.183.42.188', + }, + cloud: { + availability_zone: 'us-east1-b', + instance: { name: 'siem-kibana', id: '5412578377715150143' }, + provider: 'gcp', + machine: { type: 'n1-standard-2' }, + project: { id: 'elastic-beats' }, + }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T11:49:21.000Z', + system: { + auth: { + ssh: { + method: 'publickey', + signature: 'RSA SHA256:vv64JNLzKZWYA9vonnGWuW7zxWhyZrL/BFxyIGbISx8', + event: 'Accepted', + }, + }, + }, + ecs: { version: '1.5.0' }, + data_stream: { namespace: 'default', type: 'logs', dataset: 'system.auth' }, + host: { + hostname: 'siem-kibana', + os: { + kernel: '4.9.0-8-amd64', + codename: 'stretch', + name: 'Debian GNU/Linux', + family: 'debian', + version: '9 (stretch)', + platform: 'debian', + }, + containerized: false, + ip: ['10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'aa7ca589f1b8220002f2fc61c64cfbf1', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + timezone: '+00:00', + action: 'ssh_login', + type: 'authentication_success', + category: 'authentication', + dataset: 'system.auth', + outcome: 'success', + }, + user: { name: 'tsg' }, + }, + sort: [1599220161000], + }, + ], + }, + }, + }, + }, + { + key: 'admin', + doc_count: 23, + failures: { + doc_count: 23, + lastFailure: { + hits: { + total: 23, + max_score: 0, + hits: [ + { + _index: '.ds-logs-system.auth-default-000001', + _id: 'ZfxZWXQBc39KFIJbLN5U', + _score: null, + _source: { + agent: { + hostname: 'siem-kibana', + name: 'siem-kibana', + id: 'aa3d9dc7-fef1-4c2f-a68d-25785d624e35', + ephemeral_id: 'e503bd85-11c7-4bc9-ae7d-70be1d919fb7', + type: 'filebeat', + version: '7.9.1', + }, + process: { name: 'sshd', pid: 22913 }, + log: { file: { path: '/var/log/auth.log' }, offset: 562910 }, + source: { + geo: { + continent_name: 'Asia', + region_iso_code: 'KR-28', + city_name: 'Incheon', + country_iso_code: 'KR', + region_name: 'Incheon', + location: { lon: 126.7288, lat: 37.4562 }, + }, + as: { number: 4766, organization: { name: 'Korea Telecom' } }, + ip: '59.15.3.197', + }, + cloud: { + availability_zone: 'us-east1-b', + instance: { name: 'siem-kibana', id: '5412578377715150143' }, + provider: 'gcp', + machine: { type: 'n1-standard-2' }, + project: { id: 'elastic-beats' }, + }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T13:40:46.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + data_stream: { namespace: 'default', type: 'logs', dataset: 'system.auth' }, + host: { + hostname: 'siem-kibana', + os: { + kernel: '4.9.0-8-amd64', + codename: 'stretch', + name: 'Debian GNU/Linux', + family: 'debian', + version: '9 (stretch)', + platform: 'debian', + }, + containerized: false, + ip: ['10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'aa7ca589f1b8220002f2fc61c64cfbf1', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + timezone: '+00:00', + action: 'ssh_login', + type: 'authentication_failure', + category: 'authentication', + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'admin' }, + }, + sort: [1599226846000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'user', + doc_count: 21, + failures: { + doc_count: 21, + lastFailure: { + hits: { + total: 21, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'M_xLWXQBc39KFIJbY7Cb', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + type: 'filebeat', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 20671 }, + log: { file: { path: '/var/log/auth.log' }, offset: 1028103 }, + source: { + geo: { + continent_name: 'North America', + region_iso_code: 'US-NY', + city_name: 'New York', + country_iso_code: 'US', + region_name: 'New York', + location: { lon: -74, lat: 40.7157 }, + }, + ip: '64.227.88.245', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T13:25:43.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['64.227.88.245'], user: ['user'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T13:25:47.034172Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'user' }, + }, + sort: [1599225943000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'ubuntu', + doc_count: 18, + failures: { + doc_count: 18, + lastFailure: { + hits: { + total: 18, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'nPxKWXQBc39KFIJb7q4w', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + type: 'filebeat', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 20665 }, + log: { file: { path: '/var/log/auth.log' }, offset: 1027372 }, + source: { + geo: { + continent_name: 'North America', + region_iso_code: 'US-NY', + city_name: 'New York', + country_iso_code: 'US', + region_name: 'New York', + location: { lon: -74, lat: 40.7157 }, + }, + ip: '64.227.88.245', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T13:25:07.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['64.227.88.245'], user: ['ubuntu'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T13:25:16.974606Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'ubuntu' }, + }, + sort: [1599225907000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'odoo', + doc_count: 17, + failures: { + doc_count: 17, + lastFailure: { + hits: { + total: 17, + max_score: 0, + hits: [ + { + _index: '.ds-logs-system.auth-default-000001', + _id: 'mPsfWXQBc39KFIJbI8HI', + _score: null, + _source: { + agent: { + hostname: 'siem-kibana', + name: 'siem-kibana', + id: 'aa3d9dc7-fef1-4c2f-a68d-25785d624e35', + type: 'filebeat', + ephemeral_id: 'e503bd85-11c7-4bc9-ae7d-70be1d919fb7', + version: '7.9.1', + }, + process: { name: 'sshd', pid: 21506 }, + log: { file: { path: '/var/log/auth.log' }, offset: 556761 }, + source: { + geo: { + continent_name: 'Asia', + region_iso_code: 'IN-DL', + city_name: 'New Delhi', + country_iso_code: 'IN', + region_name: 'National Capital Territory of Delhi', + location: { lon: 77.2245, lat: 28.6358 }, + }, + as: { number: 10029, organization: { name: 'SHYAM SPECTRA PVT LTD' } }, + ip: '180.151.228.166', + }, + cloud: { + availability_zone: 'us-east1-b', + instance: { name: 'siem-kibana', id: '5412578377715150143' }, + provider: 'gcp', + machine: { type: 'n1-standard-2' }, + project: { id: 'elastic-beats' }, + }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T12:26:36.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + data_stream: { namespace: 'default', type: 'logs', dataset: 'system.auth' }, + host: { + hostname: 'siem-kibana', + os: { + kernel: '4.9.0-8-amd64', + codename: 'stretch', + name: 'Debian GNU/Linux', + family: 'debian', + version: '9 (stretch)', + platform: 'debian', + }, + containerized: false, + ip: ['10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'aa7ca589f1b8220002f2fc61c64cfbf1', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + timezone: '+00:00', + action: 'ssh_login', + type: 'authentication_failure', + category: 'authentication', + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'odoo' }, + }, + sort: [1599222396000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'pi', + doc_count: 17, + failures: { + doc_count: 17, + lastFailure: { + hits: { + total: 17, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'aaToWHQBA6bGZw2uR-St', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + type: 'filebeat', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 20475 }, + log: { file: { path: '/var/log/auth.log' }, offset: 1019218 }, + source: { + geo: { + continent_name: 'Europe', + region_iso_code: 'SE-AB', + city_name: 'Stockholm', + country_iso_code: 'SE', + region_name: 'Stockholm', + location: { lon: 17.7833, lat: 59.25 }, + }, + as: { number: 8473, organization: { name: 'Bahnhof AB' } }, + ip: '178.174.148.58', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T11:37:22.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['178.174.148.58'], user: ['pi'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T11:37:31.797423Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'pi' }, + }, + sort: [1599219442000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'demo', + doc_count: 14, + failures: { + doc_count: 14, + lastFailure: { + hits: { + total: 14, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'VaP_V3QBA6bGZw2upUbg', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + type: 'filebeat', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 19849 }, + log: { file: { path: '/var/log/auth.log' }, offset: 981036 }, + source: { + geo: { + continent_name: 'Europe', + country_iso_code: 'HR', + location: { lon: 15.5, lat: 45.1667 }, + }, + as: { + number: 42864, + organization: { name: 'Giganet Internet Szolgaltato Kft' }, + }, + ip: '45.95.168.157', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T07:23:22.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['45.95.168.157'], user: ['demo'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T07:23:26.046346Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'demo' }, + }, + sort: [1599204202000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'git', + doc_count: 13, + failures: { + doc_count: 13, + lastFailure: { + hits: { + total: 13, + max_score: 0, + hits: [ + { + _index: '.ds-logs-system.auth-default-000001', + _id: 'PqYfWXQBA6bGZw2uIhVU', + _score: null, + _source: { + agent: { + hostname: 'siem-kibana', + name: 'siem-kibana', + id: 'aa3d9dc7-fef1-4c2f-a68d-25785d624e35', + ephemeral_id: 'e503bd85-11c7-4bc9-ae7d-70be1d919fb7', + type: 'filebeat', + version: '7.9.1', + }, + process: { name: 'sshd', pid: 20396 }, + log: { file: { path: '/var/log/auth.log' }, offset: 550795 }, + source: { + geo: { + continent_name: 'Asia', + region_iso_code: 'CN-BJ', + city_name: 'Beijing', + country_iso_code: 'CN', + region_name: 'Beijing', + location: { lon: 116.3889, lat: 39.9288 }, + }, + as: { + number: 45090, + organization: { + name: 'Shenzhen Tencent Computer Systems Company Limited', + }, + }, + ip: '123.206.30.76', + }, + cloud: { + availability_zone: 'us-east1-b', + instance: { name: 'siem-kibana', id: '5412578377715150143' }, + provider: 'gcp', + machine: { type: 'n1-standard-2' }, + project: { id: 'elastic-beats' }, + }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T11:20:26.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + data_stream: { namespace: 'default', type: 'logs', dataset: 'system.auth' }, + host: { + hostname: 'siem-kibana', + os: { + kernel: '4.9.0-8-amd64', + codename: 'stretch', + name: 'Debian GNU/Linux', + family: 'debian', + version: '9 (stretch)', + platform: 'debian', + }, + containerized: false, + ip: ['10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'aa7ca589f1b8220002f2fc61c64cfbf1', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + timezone: '+00:00', + action: 'ssh_login', + type: 'authentication_failure', + category: 'authentication', + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'git' }, + }, + sort: [1599218426000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'webadmin', + doc_count: 13, + failures: { + doc_count: 13, + lastFailure: { + hits: { + total: 13, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'iMABWHQBB-gskclyitP-', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + type: 'filebeat', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 19870 }, + log: { file: { path: '/var/log/auth.log' }, offset: 984133 }, + source: { + geo: { + continent_name: 'Europe', + country_iso_code: 'HR', + location: { lon: 15.5, lat: 45.1667 }, + }, + as: { + number: 42864, + organization: { name: 'Giganet Internet Szolgaltato Kft' }, + }, + ip: '45.95.168.157', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T07:25:28.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['45.95.168.157'], user: ['webadmin'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T07:25:30.236651Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'webadmin' }, + }, + sort: [1599204328000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + ], + }, + user_count: { value: 188 }, + }, + }, + total: 21, + loaded: 21, +}; + +export const formattedSearchStrategyResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 14, + timed_out: false, + _shards: { total: 21, successful: 21, skipped: 0, failed: 0 }, + hits: { total: -1, max_score: 0, hits: [] }, + aggregations: { + group_by_users: { + doc_count_error_upper_bound: -1, + sum_other_doc_count: 408, + buckets: [ + { + key: 'SYSTEM', + doc_count: 281, + failures: { + meta: {}, + doc_count: 0, + lastFailure: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + successes: { + meta: {}, + doc_count: 4, + lastSuccess: { + hits: { + total: 4, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'zqY7WXQBA6bGZw2uLeKI', + _score: null, + _source: { + process: { + name: 'services.exe', + pid: 564, + executable: 'C:\\Windows\\System32\\services.exe', + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + name: 'siem-windows', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + type: 'winlogbeat', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + version: '8.0.0', + user: { name: 'inside_winlogbeat_user' }, + }, + winlog: { + computer_name: 'siem-windows', + process: { pid: 576, thread: { id: 880 } }, + keywords: ['Audit Success'], + logon: { id: '0x3e7', type: 'Service' }, + channel: 'Security', + event_data: { + LogonGuid: '{00000000-0000-0000-0000-000000000000}', + TargetOutboundDomainName: '-', + VirtualAccount: '%%1843', + LogonType: '5', + IpPort: '-', + TransmittedServices: '-', + SubjectLogonId: '0x3e7', + LmPackageName: '-', + TargetOutboundUserName: '-', + KeyLength: '0', + TargetLogonId: '0x3e7', + RestrictedAdminMode: '-', + SubjectUserName: 'SIEM-WINDOWS$', + TargetLinkedLogonId: '0x0', + ElevatedToken: '%%1842', + SubjectDomainName: 'WORKGROUP', + IpAddress: '-', + ImpersonationLevel: '%%1833', + TargetUserName: 'SYSTEM', + LogonProcessName: 'Advapi ', + TargetDomainName: 'NT AUTHORITY', + SubjectUserSid: 'S-1-5-18', + TargetUserSid: 'S-1-5-18', + AuthenticationPackageName: 'Negotiate', + }, + opcode: 'Info', + version: 2, + record_id: 57818, + task: 'Logon', + event_id: 4624, + provider_guid: '{54849625-5478-4994-a5ba-3e3b0328c30d}', + activity_id: '{d2485217-6bac-0000-8fbb-3f7e2571d601}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Security-Auditing', + }, + log: { level: 'information' }, + source: { domain: '-' }, + message: + 'An account was successfully logged on.\n\nSubject:\n\tSecurity ID:\t\tS-1-5-18\n\tAccount Name:\t\tSIEM-WINDOWS$\n\tAccount Domain:\t\tWORKGROUP\n\tLogon ID:\t\t0x3E7\n\nLogon Information:\n\tLogon Type:\t\t5\n\tRestricted Admin Mode:\t-\n\tVirtual Account:\t\tNo\n\tElevated Token:\t\tYes\n\nImpersonation Level:\t\tImpersonation\n\nNew Logon:\n\tSecurity ID:\t\tS-1-5-18\n\tAccount Name:\t\tSYSTEM\n\tAccount Domain:\t\tNT AUTHORITY\n\tLogon ID:\t\t0x3E7\n\tLinked Logon ID:\t\t0x0\n\tNetwork Account Name:\t-\n\tNetwork Account Domain:\t-\n\tLogon GUID:\t\t{00000000-0000-0000-0000-000000000000}\n\nProcess Information:\n\tProcess ID:\t\t0x234\n\tProcess Name:\t\tC:\\Windows\\System32\\services.exe\n\nNetwork Information:\n\tWorkstation Name:\t-\n\tSource Network Address:\t-\n\tSource Port:\t\t-\n\nDetailed Authentication Information:\n\tLogon Process:\t\tAdvapi \n\tAuthentication Package:\tNegotiate\n\tTransited Services:\t-\n\tPackage Name (NTLM only):\t-\n\tKey Length:\t\t0\n\nThis event is generated when a logon session is created. It is generated on the computer that was accessed.\n\nThe subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.\n\nThe logon type field indicates the kind of logon that occurred. The most common types are 2 (interactive) and 3 (network).\n\nThe New Logon fields indicate the account for whom the new logon was created, i.e. the account that was logged on.\n\nThe network fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.\n\nThe impersonation level field indicates the extent to which a process in the logon session can impersonate.\n\nThe authentication information fields provide detailed information about this specific logon request.\n\t- Logon GUID is a unique identifier that can be used to correlate this event with a KDC event.\n\t- Transited services indicate which intermediate services have participated in this logon request.\n\t- Package name indicates which sub-protocol was used among the NTLM protocols.\n\t- Key length indicates the length of the generated session key. This will be 0 if no session key was requested.', + cloud: { + availability_zone: 'us-central1-c', + instance: { name: 'siem-windows', id: '9156726559029788564' }, + provider: 'gcp', + machine: { type: 'g1-small' }, + project: { id: 'elastic-siem' }, + }, + '@timestamp': '2020-09-04T13:08:02.532Z', + related: { user: ['SYSTEM', 'SIEM-WINDOWS$'] }, + ecs: { version: '1.5.0' }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 4624, + provider: 'Microsoft-Windows-Security-Auditing', + created: '2020-09-04T13:08:03.638Z', + kind: 'event', + module: 'security', + action: 'logged-in', + category: 'authentication', + type: 'start', + outcome: 'success', + }, + user: { domain: 'NT AUTHORITY', name: 'SYSTEM', id: 'S-1-5-18' }, + }, + sort: [1599224882532], + }, + ], + }, + }, + }, + }, + { + key: 'tsg', + doc_count: 1, + failures: { + doc_count: 0, + lastFailure: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + successes: { + doc_count: 1, + lastSuccess: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-system.auth-default-000001', + _id: '9_sfWXQBc39KFIJbIsDh', + _score: null, + _source: { + agent: { + hostname: 'siem-kibana', + name: 'siem-kibana', + id: 'aa3d9dc7-fef1-4c2f-a68d-25785d624e35', + ephemeral_id: 'e503bd85-11c7-4bc9-ae7d-70be1d919fb7', + type: 'filebeat', + version: '7.9.1', + }, + process: { name: 'sshd', pid: 20764 }, + log: { file: { path: '/var/log/auth.log' }, offset: 552463 }, + source: { + geo: { + continent_name: 'Europe', + region_iso_code: 'DE-BE', + city_name: 'Berlin', + country_iso_code: 'DE', + region_name: 'Land Berlin', + location: { lon: 13.3512, lat: 52.5727 }, + }, + as: { number: 6805, organization: { name: 'Telefonica Germany' } }, + port: 57457, + ip: '77.183.42.188', + }, + cloud: { + availability_zone: 'us-east1-b', + instance: { name: 'siem-kibana', id: '5412578377715150143' }, + provider: 'gcp', + machine: { type: 'n1-standard-2' }, + project: { id: 'elastic-beats' }, + }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T11:49:21.000Z', + system: { + auth: { + ssh: { + method: 'publickey', + signature: 'RSA SHA256:vv64JNLzKZWYA9vonnGWuW7zxWhyZrL/BFxyIGbISx8', + event: 'Accepted', + }, + }, + }, + ecs: { version: '1.5.0' }, + data_stream: { namespace: 'default', type: 'logs', dataset: 'system.auth' }, + host: { + hostname: 'siem-kibana', + os: { + kernel: '4.9.0-8-amd64', + codename: 'stretch', + name: 'Debian GNU/Linux', + family: 'debian', + version: '9 (stretch)', + platform: 'debian', + }, + containerized: false, + ip: ['10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'aa7ca589f1b8220002f2fc61c64cfbf1', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + timezone: '+00:00', + action: 'ssh_login', + type: 'authentication_success', + category: 'authentication', + dataset: 'system.auth', + outcome: 'success', + }, + user: { name: 'tsg' }, + }, + sort: [1599220161000], + }, + ], + }, + }, + }, + }, + { + key: 'admin', + doc_count: 23, + failures: { + doc_count: 23, + lastFailure: { + hits: { + total: 23, + max_score: 0, + hits: [ + { + _index: '.ds-logs-system.auth-default-000001', + _id: 'ZfxZWXQBc39KFIJbLN5U', + _score: null, + _source: { + agent: { + hostname: 'siem-kibana', + name: 'siem-kibana', + id: 'aa3d9dc7-fef1-4c2f-a68d-25785d624e35', + ephemeral_id: 'e503bd85-11c7-4bc9-ae7d-70be1d919fb7', + type: 'filebeat', + version: '7.9.1', + }, + process: { name: 'sshd', pid: 22913 }, + log: { file: { path: '/var/log/auth.log' }, offset: 562910 }, + source: { + geo: { + continent_name: 'Asia', + region_iso_code: 'KR-28', + city_name: 'Incheon', + country_iso_code: 'KR', + region_name: 'Incheon', + location: { lon: 126.7288, lat: 37.4562 }, + }, + as: { number: 4766, organization: { name: 'Korea Telecom' } }, + ip: '59.15.3.197', + }, + cloud: { + availability_zone: 'us-east1-b', + instance: { name: 'siem-kibana', id: '5412578377715150143' }, + provider: 'gcp', + machine: { type: 'n1-standard-2' }, + project: { id: 'elastic-beats' }, + }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T13:40:46.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + data_stream: { namespace: 'default', type: 'logs', dataset: 'system.auth' }, + host: { + hostname: 'siem-kibana', + os: { + kernel: '4.9.0-8-amd64', + codename: 'stretch', + name: 'Debian GNU/Linux', + family: 'debian', + version: '9 (stretch)', + platform: 'debian', + }, + containerized: false, + ip: ['10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'aa7ca589f1b8220002f2fc61c64cfbf1', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + timezone: '+00:00', + action: 'ssh_login', + type: 'authentication_failure', + category: 'authentication', + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'admin' }, + }, + sort: [1599226846000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'user', + doc_count: 21, + failures: { + doc_count: 21, + lastFailure: { + hits: { + total: 21, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'M_xLWXQBc39KFIJbY7Cb', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + type: 'filebeat', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 20671 }, + log: { file: { path: '/var/log/auth.log' }, offset: 1028103 }, + source: { + geo: { + continent_name: 'North America', + region_iso_code: 'US-NY', + city_name: 'New York', + country_iso_code: 'US', + region_name: 'New York', + location: { lon: -74, lat: 40.7157 }, + }, + ip: '64.227.88.245', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T13:25:43.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['64.227.88.245'], user: ['user'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T13:25:47.034172Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'user' }, + }, + sort: [1599225943000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'ubuntu', + doc_count: 18, + failures: { + doc_count: 18, + lastFailure: { + hits: { + total: 18, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'nPxKWXQBc39KFIJb7q4w', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + type: 'filebeat', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 20665 }, + log: { file: { path: '/var/log/auth.log' }, offset: 1027372 }, + source: { + geo: { + continent_name: 'North America', + region_iso_code: 'US-NY', + city_name: 'New York', + country_iso_code: 'US', + region_name: 'New York', + location: { lon: -74, lat: 40.7157 }, + }, + ip: '64.227.88.245', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T13:25:07.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['64.227.88.245'], user: ['ubuntu'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T13:25:16.974606Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'ubuntu' }, + }, + sort: [1599225907000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'odoo', + doc_count: 17, + failures: { + doc_count: 17, + lastFailure: { + hits: { + total: 17, + max_score: 0, + hits: [ + { + _index: '.ds-logs-system.auth-default-000001', + _id: 'mPsfWXQBc39KFIJbI8HI', + _score: null, + _source: { + agent: { + hostname: 'siem-kibana', + name: 'siem-kibana', + id: 'aa3d9dc7-fef1-4c2f-a68d-25785d624e35', + type: 'filebeat', + ephemeral_id: 'e503bd85-11c7-4bc9-ae7d-70be1d919fb7', + version: '7.9.1', + }, + process: { name: 'sshd', pid: 21506 }, + log: { file: { path: '/var/log/auth.log' }, offset: 556761 }, + source: { + geo: { + continent_name: 'Asia', + region_iso_code: 'IN-DL', + city_name: 'New Delhi', + country_iso_code: 'IN', + region_name: 'National Capital Territory of Delhi', + location: { lon: 77.2245, lat: 28.6358 }, + }, + as: { number: 10029, organization: { name: 'SHYAM SPECTRA PVT LTD' } }, + ip: '180.151.228.166', + }, + cloud: { + availability_zone: 'us-east1-b', + instance: { name: 'siem-kibana', id: '5412578377715150143' }, + provider: 'gcp', + machine: { type: 'n1-standard-2' }, + project: { id: 'elastic-beats' }, + }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T12:26:36.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + data_stream: { namespace: 'default', type: 'logs', dataset: 'system.auth' }, + host: { + hostname: 'siem-kibana', + os: { + kernel: '4.9.0-8-amd64', + codename: 'stretch', + name: 'Debian GNU/Linux', + family: 'debian', + version: '9 (stretch)', + platform: 'debian', + }, + containerized: false, + ip: ['10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'aa7ca589f1b8220002f2fc61c64cfbf1', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + timezone: '+00:00', + action: 'ssh_login', + type: 'authentication_failure', + category: 'authentication', + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'odoo' }, + }, + sort: [1599222396000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'pi', + doc_count: 17, + failures: { + doc_count: 17, + lastFailure: { + hits: { + total: 17, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'aaToWHQBA6bGZw2uR-St', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + type: 'filebeat', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 20475 }, + log: { file: { path: '/var/log/auth.log' }, offset: 1019218 }, + source: { + geo: { + continent_name: 'Europe', + region_iso_code: 'SE-AB', + city_name: 'Stockholm', + country_iso_code: 'SE', + region_name: 'Stockholm', + location: { lon: 17.7833, lat: 59.25 }, + }, + as: { number: 8473, organization: { name: 'Bahnhof AB' } }, + ip: '178.174.148.58', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T11:37:22.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['178.174.148.58'], user: ['pi'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T11:37:31.797423Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'pi' }, + }, + sort: [1599219442000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'demo', + doc_count: 14, + failures: { + doc_count: 14, + lastFailure: { + hits: { + total: 14, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'VaP_V3QBA6bGZw2upUbg', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + type: 'filebeat', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 19849 }, + log: { file: { path: '/var/log/auth.log' }, offset: 981036 }, + source: { + geo: { + continent_name: 'Europe', + country_iso_code: 'HR', + location: { lon: 15.5, lat: 45.1667 }, + }, + as: { + number: 42864, + organization: { name: 'Giganet Internet Szolgaltato Kft' }, + }, + ip: '45.95.168.157', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T07:23:22.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['45.95.168.157'], user: ['demo'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T07:23:26.046346Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'demo' }, + }, + sort: [1599204202000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'git', + doc_count: 13, + failures: { + doc_count: 13, + lastFailure: { + hits: { + total: 13, + max_score: 0, + hits: [ + { + _index: '.ds-logs-system.auth-default-000001', + _id: 'PqYfWXQBA6bGZw2uIhVU', + _score: null, + _source: { + agent: { + hostname: 'siem-kibana', + name: 'siem-kibana', + id: 'aa3d9dc7-fef1-4c2f-a68d-25785d624e35', + ephemeral_id: 'e503bd85-11c7-4bc9-ae7d-70be1d919fb7', + type: 'filebeat', + version: '7.9.1', + }, + process: { name: 'sshd', pid: 20396 }, + log: { file: { path: '/var/log/auth.log' }, offset: 550795 }, + source: { + geo: { + continent_name: 'Asia', + region_iso_code: 'CN-BJ', + city_name: 'Beijing', + country_iso_code: 'CN', + region_name: 'Beijing', + location: { lon: 116.3889, lat: 39.9288 }, + }, + as: { + number: 45090, + organization: { + name: 'Shenzhen Tencent Computer Systems Company Limited', + }, + }, + ip: '123.206.30.76', + }, + cloud: { + availability_zone: 'us-east1-b', + instance: { name: 'siem-kibana', id: '5412578377715150143' }, + provider: 'gcp', + machine: { type: 'n1-standard-2' }, + project: { id: 'elastic-beats' }, + }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T11:20:26.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + data_stream: { namespace: 'default', type: 'logs', dataset: 'system.auth' }, + host: { + hostname: 'siem-kibana', + os: { + kernel: '4.9.0-8-amd64', + codename: 'stretch', + name: 'Debian GNU/Linux', + family: 'debian', + version: '9 (stretch)', + platform: 'debian', + }, + containerized: false, + ip: ['10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'aa7ca589f1b8220002f2fc61c64cfbf1', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + timezone: '+00:00', + action: 'ssh_login', + type: 'authentication_failure', + category: 'authentication', + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'git' }, + }, + sort: [1599218426000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + { + key: 'webadmin', + doc_count: 13, + failures: { + doc_count: 13, + lastFailure: { + hits: { + total: 13, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'iMABWHQBB-gskclyitP-', + _score: null, + _source: { + agent: { + name: 'bastion00.siem.estc.dev', + id: 'f9a321c1-ec27-49fa-aacf-6a50ef6d836f', + type: 'filebeat', + ephemeral_id: '734ee3da-1a4f-4bc9-b400-e0cf0e5eeebc', + version: '8.0.0', + }, + process: { name: 'sshd', pid: 19870 }, + log: { file: { path: '/var/log/auth.log' }, offset: 984133 }, + source: { + geo: { + continent_name: 'Europe', + country_iso_code: 'HR', + location: { lon: 15.5, lat: 45.1667 }, + }, + as: { + number: 42864, + organization: { name: 'Giganet Internet Szolgaltato Kft' }, + }, + ip: '45.95.168.157', + }, + fileset: { name: 'auth' }, + input: { type: 'log' }, + '@timestamp': '2020-09-04T07:25:28.000Z', + system: { auth: { ssh: { event: 'Invalid' } } }, + ecs: { version: '1.5.0' }, + related: { ip: ['45.95.168.157'], user: ['webadmin'] }, + service: { type: 'system' }, + host: { hostname: 'bastion00', name: 'bastion00.siem.estc.dev' }, + event: { + ingested: '2020-09-04T07:25:30.236651Z', + timezone: '+00:00', + kind: 'event', + module: 'system', + action: 'ssh_login', + type: ['authentication_failure', 'info'], + category: ['authentication'], + dataset: 'system.auth', + outcome: 'failure', + }, + user: { name: 'webadmin' }, + }, + sort: [1599204328000], + }, + ], + }, + }, + }, + successes: { + doc_count: 0, + lastSuccess: { hits: { total: 0, max_score: 0, hits: [] } }, + }, + }, + ], + }, + user_count: { value: 188 }, + }, + }, + total: 21, + loaded: 21, + inspect: { + dsl: [ + '{\n "allowNoIndices": true,\n "index": [\n "apm-*-transaction*",\n "auditbeat-*",\n "endgame-*",\n "filebeat-*",\n "logs-*",\n "packetbeat-*",\n "winlogbeat-*"\n ],\n "ignoreUnavailable": true,\n "body": {\n "aggregations": {\n "user_count": {\n "cardinality": {\n "field": "user.name"\n }\n },\n "group_by_users": {\n "terms": {\n "size": 10,\n "field": "user.name",\n "order": [\n {\n "successes.doc_count": "desc"\n },\n {\n "failures.doc_count": "desc"\n }\n ]\n },\n "aggs": {\n "failures": {\n "filter": {\n "term": {\n "event.outcome": "failure"\n }\n },\n "aggs": {\n "lastFailure": {\n "top_hits": {\n "size": 1,\n "_source": [],\n "sort": [\n {\n "@timestamp": {\n "order": "desc"\n }\n }\n ]\n }\n }\n }\n },\n "successes": {\n "filter": {\n "term": {\n "event.outcome": "success"\n }\n },\n "aggs": {\n "lastSuccess": {\n "top_hits": {\n "size": 1,\n "_source": [],\n "sort": [\n {\n "@timestamp": {\n "order": "desc"\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n },\n "query": {\n "bool": {\n "filter": [\n "{\\"bool\\":{\\"must\\":[],\\"filter\\":[{\\"match_all\\":{}}],\\"should\\":[],\\"must_not\\":[]}}",\n {\n "term": {\n "event.category": "authentication"\n }\n },\n {\n "range": {\n "@timestamp": {\n "gte": "2020-09-02T15:17:13.678Z",\n "lte": "2020-09-03T15:17:13.678Z",\n "format": "strict_date_optional_time"\n }\n }\n }\n ]\n }\n },\n "size": 0\n },\n "track_total_hits": false\n}', + ], + }, + edges: [ + { + node: { + failures: 0, + successes: 4, + _id: 'SYSTEM+281', + user: { name: ['SYSTEM'] }, + lastSuccess: { + timestamp: ['2020-09-04T13:08:02.532Z'], + host: { id: ['ce1d3c9b-a815-4643-9641-ada0f2c00609'], name: ['siem-windows'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 0, + successes: 1, + _id: 'tsg+1', + user: { name: ['tsg'] }, + lastSuccess: { + timestamp: ['2020-09-04T11:49:21.000Z'], + source: { ip: ['77.183.42.188'] }, + host: { id: ['aa7ca589f1b8220002f2fc61c64cfbf1'], name: ['siem-kibana'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 23, + successes: 0, + _id: 'admin+23', + user: { name: ['admin'] }, + lastFailure: { + timestamp: ['2020-09-04T13:40:46.000Z'], + source: { ip: ['59.15.3.197'] }, + host: { id: ['aa7ca589f1b8220002f2fc61c64cfbf1'], name: ['siem-kibana'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 21, + successes: 0, + _id: 'user+21', + user: { name: ['user'] }, + lastFailure: { + timestamp: ['2020-09-04T13:25:43.000Z'], + source: { ip: ['64.227.88.245'] }, + host: { name: ['bastion00.siem.estc.dev'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 18, + successes: 0, + _id: 'ubuntu+18', + user: { name: ['ubuntu'] }, + lastFailure: { + timestamp: ['2020-09-04T13:25:07.000Z'], + source: { ip: ['64.227.88.245'] }, + host: { name: ['bastion00.siem.estc.dev'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 17, + successes: 0, + _id: 'odoo+17', + user: { name: ['odoo'] }, + lastFailure: { + timestamp: ['2020-09-04T12:26:36.000Z'], + source: { ip: ['180.151.228.166'] }, + host: { id: ['aa7ca589f1b8220002f2fc61c64cfbf1'], name: ['siem-kibana'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 17, + successes: 0, + _id: 'pi+17', + user: { name: ['pi'] }, + lastFailure: { + timestamp: ['2020-09-04T11:37:22.000Z'], + source: { ip: ['178.174.148.58'] }, + host: { name: ['bastion00.siem.estc.dev'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 14, + successes: 0, + _id: 'demo+14', + user: { name: ['demo'] }, + lastFailure: { + timestamp: ['2020-09-04T07:23:22.000Z'], + source: { ip: ['45.95.168.157'] }, + host: { name: ['bastion00.siem.estc.dev'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 13, + successes: 0, + _id: 'git+13', + user: { name: ['git'] }, + lastFailure: { + timestamp: ['2020-09-04T11:20:26.000Z'], + source: { ip: ['123.206.30.76'] }, + host: { id: ['aa7ca589f1b8220002f2fc61c64cfbf1'], name: ['siem-kibana'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + { + node: { + failures: 13, + successes: 0, + _id: 'webadmin+13', + user: { name: ['webadmin'] }, + lastFailure: { + timestamp: ['2020-09-04T07:25:28.000Z'], + source: { ip: ['45.95.168.157'] }, + host: { name: ['bastion00.siem.estc.dev'] }, + }, + }, + cursor: { value: '', tiebreaker: null }, + }, + ], + totalCount: 188, + pageInfo: { activePage: 0, fakeTotalCount: 50, showMorePagesIndicator: true }, +}; + +export const expectedDsl = { + allowNoIndices: true, + index: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + ignoreUnavailable: true, + body: { + aggregations: { + user_count: { cardinality: { field: 'user.name' } }, + group_by_users: { + terms: { + size: 10, + field: 'user.name', + order: [{ 'successes.doc_count': 'desc' }, { 'failures.doc_count': 'desc' }], + }, + aggs: { + failures: { + filter: { term: { 'event.outcome': 'failure' } }, + aggs: { + lastFailure: { + top_hits: { size: 1, _source: [], sort: [{ '@timestamp': { order: 'desc' } }] }, + }, + }, + }, + successes: { + filter: { term: { 'event.outcome': 'success' } }, + aggs: { + lastSuccess: { + top_hits: { size: 1, _source: [], sort: [{ '@timestamp': { order: 'desc' } }] }, + }, + }, + }, + }, + }, + }, + query: { + bool: { + filter: [ + '{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[]}}', + { term: { 'event.category': 'authentication' } }, + { + range: { + '@timestamp': { + gte: '2020-09-02T15:17:13.678Z', + lte: '2020-09-03T15:17:13.678Z', + format: 'strict_date_optional_time', + }, + }, + }, + ], + }, + }, + size: 0, + }, + track_total_hits: false, +}; + +export const mockHit: AuthenticationHit = { + _index: 'index-123', + _type: 'type-123', + _id: 'id-123', + _score: 10, + _source: { + '@timestamp': 'time-1', + }, + cursor: 'cursor-1', + sort: [0], + user: 'Evan', + failures: 10, + successes: 20, +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/dsl/query.dsl.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/dsl/query.dsl.test.ts new file mode 100644 index 0000000000000..31e4069e458be --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/dsl/query.dsl.test.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { buildQuery } from './query.dsl'; +import { mockOptions, expectedDsl } from '../__mocks__/'; + +describe('buildQuery', () => { + test('build query from options correctly', () => { + expect(buildQuery(mockOptions)).toEqual(expectedDsl); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/helpers.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/helpers.test.ts new file mode 100644 index 0000000000000..c2c5bc9181c74 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/helpers.test.ts @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { AuthenticationsEdges } from '../../../../../../common/search_strategy/security_solution/hosts/authentications'; +import { auditdFieldsMap } from './dsl/query.dsl'; + +import { formatAuthenticationData } from './helpers'; +import { mockHit } from './__mocks__'; + +describe('#formatAuthenticationsData', () => { + test('it formats a authentication with an empty set', () => { + const fields: readonly string[] = ['']; + const data = formatAuthenticationData(fields, mockHit, auditdFieldsMap); + const expected: AuthenticationsEdges = { + cursor: { + tiebreaker: null, + value: 'cursor-1', + }, + node: { + _id: 'id-123', + failures: 10, + successes: 20, + user: { + name: ['Evan'], + }, + }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a authentications with a source ip correctly', () => { + const fields: readonly string[] = ['lastSuccess.source.ip']; + const data = formatAuthenticationData(fields, mockHit, auditdFieldsMap); + const expected: AuthenticationsEdges = { + cursor: { + tiebreaker: null, + value: 'cursor-1', + }, + node: { + _id: 'id-123', + failures: 10, + successes: 20, + user: { + name: ['Evan'], + }, + }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a authentications with a host name only', () => { + const fields: readonly string[] = ['lastSuccess.host.name']; + const data = formatAuthenticationData(fields, mockHit, auditdFieldsMap); + const expected: AuthenticationsEdges = { + cursor: { + tiebreaker: null, + value: 'cursor-1', + }, + node: { + _id: 'id-123', + failures: 10, + successes: 20, + user: { + name: ['Evan'], + }, + }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a authentications with a host id only', () => { + const fields: readonly string[] = ['lastSuccess.host.id']; + const data = formatAuthenticationData(fields, mockHit, auditdFieldsMap); + const expected: AuthenticationsEdges = { + cursor: { + tiebreaker: null, + value: 'cursor-1', + }, + node: { + _id: 'id-123', + failures: 10, + successes: 20, + user: { + name: ['Evan'], + }, + }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a authentications with a host name and id correctly', () => { + const fields: readonly string[] = ['lastSuccess.host.name', 'lastSuccess.host.id']; + const data = formatAuthenticationData(fields, mockHit, auditdFieldsMap); + const expected: AuthenticationsEdges = { + cursor: { + tiebreaker: null, + value: 'cursor-1', + }, + node: { + _id: 'id-123', + failures: 10, + successes: 20, + user: { + name: ['Evan'], + }, + }, + }; + + expect(data).toEqual(expected); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/helpers.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/helpers.ts index c6b68bd1c0762..d61914fda7d06 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/helpers.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/helpers.ts @@ -3,7 +3,7 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { get, getOr } from 'lodash/fp'; +import { get, getOr, isEmpty } from 'lodash/fp'; import { set } from '@elastic/safer-lodash-set/fp'; import { mergeFieldsWithHit } from '../../../../../utils/build_query'; import { toArray } from '../../../../helpers/to_array'; @@ -31,10 +31,11 @@ export const authenticationFields = [ ]; export const formatAuthenticationData = ( + fields: readonly string[] = authenticationFields, hit: AuthenticationHit, fieldMap: Readonly> ): AuthenticationsEdges => - authenticationFields.reduce( + fields.reduce( (flattenedFields, fieldName) => { if (hit.cursor) { flattenedFields.cursor.value = hit.cursor; @@ -51,8 +52,11 @@ export const formatAuthenticationData = ( const mergedResult = mergeFieldsWithHit(fieldName, flattenedFields, fieldMap, hit); const fieldPath = `node.${fieldName}`; const fieldValue = get(fieldPath, mergedResult); - - return set(fieldPath, toArray(fieldValue), mergedResult); + if (!isEmpty(fieldValue)) { + return set(fieldPath, toArray(fieldValue), mergedResult); + } else { + return mergedResult; + } }, { node: { diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/index.test.tsx b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/index.test.tsx new file mode 100644 index 0000000000000..9e8e2ead0ed4a --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/index.test.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { DEFAULT_MAX_TABLE_QUERY_SIZE } from '../../../../../../common/constants'; + +import { HostAuthenticationsRequestOptions } from '../../../../../../common/search_strategy/security_solution/hosts/authentications'; +import * as buildQuery from './dsl/query.dsl'; +import { authentications } from '.'; +import { + mockOptions, + mockSearchStrategyResponse, + formattedSearchStrategyResponse, +} from './__mocks__'; + +describe('authentications search strategy', () => { + const buildAuthenticationQuery = jest.spyOn(buildQuery, 'buildQuery'); + + afterEach(() => { + buildAuthenticationQuery.mockClear(); + }); + + describe('buildDsl', () => { + test('should build dsl query', () => { + authentications.buildDsl(mockOptions); + expect(buildAuthenticationQuery).toHaveBeenCalledWith(mockOptions); + }); + + test('should throw error if query size is greater equal than DEFAULT_MAX_TABLE_QUERY_SIZE ', () => { + const overSizeOptions = { + ...mockOptions, + pagination: { + ...mockOptions.pagination, + querySize: DEFAULT_MAX_TABLE_QUERY_SIZE, + }, + } as HostAuthenticationsRequestOptions; + + expect(() => { + authentications.buildDsl(overSizeOptions); + }).toThrowError(`No query size above ${DEFAULT_MAX_TABLE_QUERY_SIZE}`); + }); + }); + + describe('parse', () => { + test('should parse data correctly', async () => { + const result = await authentications.parse(mockOptions, mockSearchStrategyResponse); + expect(result).toMatchObject(formattedSearchStrategyResponse); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/index.tsx b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/index.tsx index ded9a7917d921..d5bdeac38cee5 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/index.tsx +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/authentications/index.tsx @@ -20,7 +20,7 @@ import { import { inspectStringifyObject } from '../../../../../utils/build_query'; import { SecuritySolutionFactory } from '../../types'; import { auditdFieldsMap, buildQuery as buildAuthenticationQuery } from './dsl/query.dsl'; -import { formatAuthenticationData, getHits } from './helpers'; +import { authenticationFields, formatAuthenticationData, getHits } from './helpers'; export const authentications: SecuritySolutionFactory = { buildDsl: (options: HostAuthenticationsRequestOptions) => { @@ -40,7 +40,7 @@ export const authentications: SecuritySolutionFactory - formatAuthenticationData(hit, auditdFieldsMap) + formatAuthenticationData(authenticationFields, hit, auditdFieldsMap) ); const edges = authenticationEdges.splice(cursorStart, querySize - cursorStart); From 8556427038f8f6dff2403ee1f36f3555ab12966a Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Mon, 7 Sep 2020 14:56:35 +0100 Subject: [PATCH 06/58] [Security Solution] Add unit test for all hosts (#76752) * add unit test for all hosts * fix types Co-authored-by: Elastic Machine --- .../factory/hosts/all/__mocks__/index.ts | 777 ++++++++++++++++++ .../factory/hosts/all/helpers.test.ts | 87 ++ .../factory/hosts/all/helpers.ts | 23 +- .../factory/hosts/all/index.test.ts | 52 ++ .../factory/hosts/all/index.ts | 5 +- .../hosts/all/query.all_hosts.dsl.test.ts | 13 + 6 files changed, 946 insertions(+), 11 deletions(-) create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/__mocks__/index.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/helpers.test.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/index.test.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/query.all_hosts.dsl.test.ts diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/__mocks__/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/__mocks__/index.ts new file mode 100644 index 0000000000000..b9f04502286e5 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/__mocks__/index.ts @@ -0,0 +1,777 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { IEsSearchResponse } from '../../../../../../../../../../src/plugins/data/common'; + +import { + Direction, + HostAggEsItem, + HostsFields, + HostsQueries, + HostsRequestOptions, +} from '../../../../../../../common/search_strategy'; + +export const mockOptions: HostsRequestOptions = { + defaultIndex: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + docValueFields: [ + { field: '@timestamp', format: 'date_time' }, + { field: 'event.created', format: 'date_time' }, + { field: 'event.end', format: 'date_time' }, + { field: 'event.ingested', format: 'date_time' }, + { field: 'event.start', format: 'date_time' }, + { field: 'file.accessed', format: 'date_time' }, + { field: 'file.created', format: 'date_time' }, + { field: 'file.ctime', format: 'date_time' }, + { field: 'file.mtime', format: 'date_time' }, + { field: 'package.installed', format: 'date_time' }, + { field: 'process.parent.start', format: 'date_time' }, + { field: 'process.start', format: 'date_time' }, + { field: 'system.audit.host.boottime', format: 'date_time' }, + { field: 'system.audit.package.installtime', format: 'date_time' }, + { field: 'system.audit.user.password.last_changed', format: 'date_time' }, + { field: 'tls.client.not_after', format: 'date_time' }, + { field: 'tls.client.not_before', format: 'date_time' }, + { field: 'tls.server.not_after', format: 'date_time' }, + { field: 'tls.server.not_before', format: 'date_time' }, + { field: 'aws.cloudtrail.user_identity.session_context.creation_date', format: 'date_time' }, + { field: 'azure.auditlogs.properties.activity_datetime', format: 'date_time' }, + { field: 'azure.enqueued_time', format: 'date_time' }, + { field: 'azure.signinlogs.properties.created_at', format: 'date_time' }, + { field: 'cef.extensions.agentReceiptTime', format: 'date_time' }, + { field: 'cef.extensions.deviceCustomDate1', format: 'date_time' }, + { field: 'cef.extensions.deviceCustomDate2', format: 'date_time' }, + { field: 'cef.extensions.deviceReceiptTime', format: 'date_time' }, + { field: 'cef.extensions.endTime', format: 'date_time' }, + { field: 'cef.extensions.fileCreateTime', format: 'date_time' }, + { field: 'cef.extensions.fileModificationTime', format: 'date_time' }, + { field: 'cef.extensions.flexDate1', format: 'date_time' }, + { field: 'cef.extensions.managerReceiptTime', format: 'date_time' }, + { field: 'cef.extensions.oldFileCreateTime', format: 'date_time' }, + { field: 'cef.extensions.oldFileModificationTime', format: 'date_time' }, + { field: 'cef.extensions.startTime', format: 'date_time' }, + { field: 'checkpoint.subs_exp', format: 'date_time' }, + { field: 'crowdstrike.event.EndTimestamp', format: 'date_time' }, + { field: 'crowdstrike.event.IncidentEndTime', format: 'date_time' }, + { field: 'crowdstrike.event.IncidentStartTime', format: 'date_time' }, + { field: 'crowdstrike.event.ProcessEndTime', format: 'date_time' }, + { field: 'crowdstrike.event.ProcessStartTime', format: 'date_time' }, + { field: 'crowdstrike.event.StartTimestamp', format: 'date_time' }, + { field: 'crowdstrike.event.Timestamp', format: 'date_time' }, + { field: 'crowdstrike.event.UTCTimestamp', format: 'date_time' }, + { field: 'crowdstrike.metadata.eventCreationTime', format: 'date_time' }, + { field: 'gsuite.admin.email.log_search_filter.end_date', format: 'date_time' }, + { field: 'gsuite.admin.email.log_search_filter.start_date', format: 'date_time' }, + { field: 'gsuite.admin.user.birthdate', format: 'date_time' }, + { field: 'kafka.block_timestamp', format: 'date_time' }, + { field: 'microsoft.defender_atp.lastUpdateTime', format: 'date_time' }, + { field: 'microsoft.defender_atp.resolvedTime', format: 'date_time' }, + { field: 'misp.campaign.first_seen', format: 'date_time' }, + { field: 'misp.campaign.last_seen', format: 'date_time' }, + { field: 'misp.intrusion_set.first_seen', format: 'date_time' }, + { field: 'misp.intrusion_set.last_seen', format: 'date_time' }, + { field: 'misp.observed_data.first_observed', format: 'date_time' }, + { field: 'misp.observed_data.last_observed', format: 'date_time' }, + { field: 'misp.report.published', format: 'date_time' }, + { field: 'misp.threat_indicator.valid_from', format: 'date_time' }, + { field: 'misp.threat_indicator.valid_until', format: 'date_time' }, + { field: 'netflow.collection_time_milliseconds', format: 'date_time' }, + { field: 'netflow.exporter.timestamp', format: 'date_time' }, + { field: 'netflow.flow_end_microseconds', format: 'date_time' }, + { field: 'netflow.flow_end_milliseconds', format: 'date_time' }, + { field: 'netflow.flow_end_nanoseconds', format: 'date_time' }, + { field: 'netflow.flow_end_seconds', format: 'date_time' }, + { field: 'netflow.flow_start_microseconds', format: 'date_time' }, + { field: 'netflow.flow_start_milliseconds', format: 'date_time' }, + { field: 'netflow.flow_start_nanoseconds', format: 'date_time' }, + { field: 'netflow.flow_start_seconds', format: 'date_time' }, + { field: 'netflow.max_export_seconds', format: 'date_time' }, + { field: 'netflow.max_flow_end_microseconds', format: 'date_time' }, + { field: 'netflow.max_flow_end_milliseconds', format: 'date_time' }, + { field: 'netflow.max_flow_end_nanoseconds', format: 'date_time' }, + { field: 'netflow.max_flow_end_seconds', format: 'date_time' }, + { field: 'netflow.min_export_seconds', format: 'date_time' }, + { field: 'netflow.min_flow_start_microseconds', format: 'date_time' }, + { field: 'netflow.min_flow_start_milliseconds', format: 'date_time' }, + { field: 'netflow.min_flow_start_nanoseconds', format: 'date_time' }, + { field: 'netflow.min_flow_start_seconds', format: 'date_time' }, + { field: 'netflow.monitoring_interval_end_milli_seconds', format: 'date_time' }, + { field: 'netflow.monitoring_interval_start_milli_seconds', format: 'date_time' }, + { field: 'netflow.observation_time_microseconds', format: 'date_time' }, + { field: 'netflow.observation_time_milliseconds', format: 'date_time' }, + { field: 'netflow.observation_time_nanoseconds', format: 'date_time' }, + { field: 'netflow.observation_time_seconds', format: 'date_time' }, + { field: 'netflow.system_init_time_milliseconds', format: 'date_time' }, + { field: 'rsa.internal.lc_ctime', format: 'date_time' }, + { field: 'rsa.internal.time', format: 'date_time' }, + { field: 'rsa.time.effective_time', format: 'date_time' }, + { field: 'rsa.time.endtime', format: 'date_time' }, + { field: 'rsa.time.event_queue_time', format: 'date_time' }, + { field: 'rsa.time.event_time', format: 'date_time' }, + { field: 'rsa.time.expire_time', format: 'date_time' }, + { field: 'rsa.time.recorded_time', format: 'date_time' }, + { field: 'rsa.time.stamp', format: 'date_time' }, + { field: 'rsa.time.starttime', format: 'date_time' }, + { field: 'sophos.xg.date', format: 'date_time' }, + { field: 'sophos.xg.eventtime', format: 'date_time' }, + { field: 'sophos.xg.start_time', format: 'date_time' }, + ], + factoryQueryType: HostsQueries.hosts, + filterQuery: '{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[]}}', + pagination: { activePage: 0, cursorStart: 0, fakePossibleCount: 50, querySize: 10 }, + timerange: { interval: '12h', from: '2020-09-03T09:15:21.415Z', to: '2020-09-04T09:15:21.415Z' }, + sort: { direction: Direction.desc, field: HostsFields.lastSeen }, +}; + +export const mockSearchStrategyResponse: IEsSearchResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 169, + timed_out: false, + _shards: { total: 21, successful: 21, skipped: 0, failed: 0 }, + hits: { total: -1, max_score: 0, hits: [] }, + aggregations: { + host_data: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'bastion00.siem.estc.dev', + doc_count: 774875, + lastSeen: { value: 1599210921410, value_as_string: '2020-09-04T09:15:21.410Z' }, + os: { + hits: { + total: 774875, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'f6NmWHQBA6bGZw2uJepK', + _score: null, + _source: {}, + sort: [1599210921410], + }, + ], + }, + }, + }, + { + key: 'es02.siem.estc.dev', + doc_count: 10496, + lastSeen: { value: 1599210907990, value_as_string: '2020-09-04T09:15:07.990Z' }, + os: { + hits: { + total: 10496, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: '4_lmWHQBc39KFIJbFdYv', + _score: null, + _source: {}, + sort: [1599210907990], + }, + ], + }, + }, + }, + { + key: 'es00.siem.estc.dev', + doc_count: 19722, + lastSeen: { value: 1599210906783, value_as_string: '2020-09-04T09:15:06.783Z' }, + os: { + hits: { + total: 19722, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'z_lmWHQBc39KFIJbAdZP', + _score: null, + _source: {}, + sort: [1599210906783], + }, + ], + }, + }, + }, + { + key: 'es01.siem.estc.dev', + doc_count: 16770, + lastSeen: { value: 1599210900781, value_as_string: '2020-09-04T09:15:00.781Z' }, + os: { + hits: { + total: 16770, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'uPllWHQBc39KFIJb6tbR', + _score: null, + _source: {}, + sort: [1599210900781], + }, + ], + }, + }, + }, + { + key: 'siem-windows', + doc_count: 1941, + lastSeen: { value: 1599210880354, value_as_string: '2020-09-04T09:14:40.354Z' }, + os: { + hits: { + total: 1941, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '56NlWHQBA6bGZw2uiOfb', + _score: null, + _source: { + host: { + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + }, + }, + sort: [1599210880354], + }, + ], + }, + }, + }, + { + key: 'filebeat-cloud', + doc_count: 50, + lastSeen: { value: 1599207421000, value_as_string: '2020-09-04T08:17:01.000Z' }, + os: { + hits: { + total: 50, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'FKMwWHQBA6bGZw2uw5Z3', + _score: null, + _source: {}, + sort: [1599207421000], + }, + ], + }, + }, + }, + { + key: 'kibana00.siem.estc.dev', + doc_count: 50, + lastSeen: { value: 1599207421000, value_as_string: '2020-09-04T08:17:01.000Z' }, + os: { + hits: { + total: 50, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'MKMwWHQBA6bGZw2u0ZZw', + _score: null, + _source: {}, + sort: [1599207421000], + }, + ], + }, + }, + }, + { + key: 'DESKTOP-QBBSCUT', + doc_count: 128973, + lastSeen: { value: 1599150487957, value_as_string: '2020-09-03T16:28:07.957Z' }, + os: { + hits: { + total: 128973, + max_score: 0, + hits: [ + { + _index: '.ds-logs-elastic.agent-default-000001', + _id: 'tvTLVHQBc39KFIJb_ykQ', + _score: null, + _source: { + host: { + os: { + build: '18362.1016', + kernel: '10.0.18362.1016 (WinBuild.160101.0800)', + name: 'Windows 10 Pro', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + }, + }, + sort: [1599150487957], + }, + ], + }, + }, + }, + { + key: 'mainqa-atlcolo-10-0-7-195.eng.endgames.local', + doc_count: 21213, + lastSeen: { value: 1599150457515, value_as_string: '2020-09-03T16:27:37.515Z' }, + os: { + hits: { + total: 21213, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.network-default-000001', + _id: 'efTLVHQBc39KFIJbiCgD', + _score: null, + _source: { + host: { + os: { + Ext: { variant: 'macOS' }, + kernel: + 'Darwin Kernel Version 18.2.0: Fri Oct 5 19:40:55 PDT 2018; root:xnu-4903.221.2~1/RELEASE_X86_64', + name: 'macOS', + family: 'macos', + version: '10.14.1', + platform: 'macos', + full: 'macOS 10.14.1', + }, + }, + }, + sort: [1599150457515], + }, + ], + }, + }, + }, + ], + }, + host_count: { value: 9 }, + }, + }, + total: 21, + loaded: 21, +}; + +export const formattedSearchStrategyResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 169, + timed_out: false, + _shards: { total: 21, successful: 21, skipped: 0, failed: 0 }, + hits: { total: -1, max_score: 0, hits: [] }, + aggregations: { + host_data: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'bastion00.siem.estc.dev', + doc_count: 774875, + lastSeen: { value: 1599210921410, value_as_string: '2020-09-04T09:15:21.410Z' }, + os: { + hits: { + total: 774875, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'f6NmWHQBA6bGZw2uJepK', + _score: null, + _source: {}, + sort: [1599210921410], + }, + ], + }, + }, + }, + { + key: 'es02.siem.estc.dev', + doc_count: 10496, + lastSeen: { value: 1599210907990, value_as_string: '2020-09-04T09:15:07.990Z' }, + os: { + hits: { + total: 10496, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: '4_lmWHQBc39KFIJbFdYv', + _score: null, + _source: {}, + sort: [1599210907990], + }, + ], + }, + }, + }, + { + key: 'es00.siem.estc.dev', + doc_count: 19722, + lastSeen: { value: 1599210906783, value_as_string: '2020-09-04T09:15:06.783Z' }, + os: { + hits: { + total: 19722, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'z_lmWHQBc39KFIJbAdZP', + _score: null, + _source: {}, + sort: [1599210906783], + }, + ], + }, + }, + }, + { + key: 'es01.siem.estc.dev', + doc_count: 16770, + lastSeen: { value: 1599210900781, value_as_string: '2020-09-04T09:15:00.781Z' }, + os: { + hits: { + total: 16770, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'uPllWHQBc39KFIJb6tbR', + _score: null, + _source: {}, + sort: [1599210900781], + }, + ], + }, + }, + }, + { + key: 'siem-windows', + doc_count: 1941, + lastSeen: { value: 1599210880354, value_as_string: '2020-09-04T09:14:40.354Z' }, + os: { + hits: { + total: 1941, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '56NlWHQBA6bGZw2uiOfb', + _score: null, + _source: { + host: { + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + }, + }, + sort: [1599210880354], + }, + ], + }, + }, + }, + { + key: 'filebeat-cloud', + doc_count: 50, + lastSeen: { value: 1599207421000, value_as_string: '2020-09-04T08:17:01.000Z' }, + os: { + hits: { + total: 50, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'FKMwWHQBA6bGZw2uw5Z3', + _score: null, + _source: {}, + sort: [1599207421000], + }, + ], + }, + }, + }, + { + key: 'kibana00.siem.estc.dev', + doc_count: 50, + lastSeen: { value: 1599207421000, value_as_string: '2020-09-04T08:17:01.000Z' }, + os: { + hits: { + total: 50, + max_score: 0, + hits: [ + { + _index: 'filebeat-8.0.0-2020.09.02-000001', + _id: 'MKMwWHQBA6bGZw2u0ZZw', + _score: null, + _source: {}, + sort: [1599207421000], + }, + ], + }, + }, + }, + { + key: 'DESKTOP-QBBSCUT', + doc_count: 128973, + lastSeen: { value: 1599150487957, value_as_string: '2020-09-03T16:28:07.957Z' }, + os: { + hits: { + total: 128973, + max_score: 0, + hits: [ + { + _index: '.ds-logs-elastic.agent-default-000001', + _id: 'tvTLVHQBc39KFIJb_ykQ', + _score: null, + _source: { + host: { + os: { + build: '18362.1016', + kernel: '10.0.18362.1016 (WinBuild.160101.0800)', + name: 'Windows 10 Pro', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + }, + }, + sort: [1599150487957], + }, + ], + }, + }, + }, + { + key: 'mainqa-atlcolo-10-0-7-195.eng.endgames.local', + doc_count: 21213, + lastSeen: { value: 1599150457515, value_as_string: '2020-09-03T16:27:37.515Z' }, + os: { + hits: { + total: 21213, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.network-default-000001', + _id: 'efTLVHQBc39KFIJbiCgD', + _score: null, + _source: { + host: { + os: { + Ext: { variant: 'macOS' }, + kernel: + 'Darwin Kernel Version 18.2.0: Fri Oct 5 19:40:55 PDT 2018; root:xnu-4903.221.2~1/RELEASE_X86_64', + name: 'macOS', + family: 'macos', + version: '10.14.1', + platform: 'macos', + full: 'macOS 10.14.1', + }, + }, + }, + sort: [1599150457515], + }, + ], + }, + }, + }, + ], + }, + host_count: { value: 9 }, + }, + }, + total: 21, + loaded: 21, + inspect: { + dsl: [ + '{\n "allowNoIndices": true,\n "index": [\n "apm-*-transaction*",\n "auditbeat-*",\n "endgame-*",\n "filebeat-*",\n "logs-*",\n "packetbeat-*",\n "winlogbeat-*"\n ],\n "ignoreUnavailable": true,\n "body": {\n "aggregations": {\n "host_count": {\n "cardinality": {\n "field": "host.name"\n }\n },\n "host_data": {\n "terms": {\n "size": 10,\n "field": "host.name",\n "order": {\n "lastSeen": "desc"\n }\n },\n "aggs": {\n "lastSeen": {\n "max": {\n "field": "@timestamp"\n }\n },\n "os": {\n "top_hits": {\n "size": 1,\n "sort": [\n {\n "@timestamp": {\n "order": "desc"\n }\n }\n ],\n "_source": {\n "includes": [\n "host.os.*"\n ]\n }\n }\n }\n }\n }\n },\n "query": {\n "bool": {\n "filter": [\n {\n "bool": {\n "must": [],\n "filter": [\n {\n "match_all": {}\n }\n ],\n "should": [],\n "must_not": []\n }\n },\n {\n "range": {\n "@timestamp": {\n "gte": "2020-09-03T09:15:21.415Z",\n "lte": "2020-09-04T09:15:21.415Z",\n "format": "strict_date_optional_time"\n }\n }\n }\n ]\n }\n },\n "size": 0,\n "track_total_hits": false\n }\n}', + ], + }, + edges: [ + { + node: { + _id: 'bastion00.siem.estc.dev', + lastSeen: ['2020-09-04T09:15:21.410Z'], + host: { name: ['bastion00.siem.estc.dev'] }, + }, + cursor: { value: 'bastion00.siem.estc.dev', tiebreaker: null }, + }, + { + node: { + _id: 'es02.siem.estc.dev', + lastSeen: ['2020-09-04T09:15:07.990Z'], + host: { name: ['es02.siem.estc.dev'] }, + }, + cursor: { value: 'es02.siem.estc.dev', tiebreaker: null }, + }, + { + node: { + _id: 'es00.siem.estc.dev', + lastSeen: ['2020-09-04T09:15:06.783Z'], + host: { name: ['es00.siem.estc.dev'] }, + }, + cursor: { value: 'es00.siem.estc.dev', tiebreaker: null }, + }, + { + node: { + _id: 'es01.siem.estc.dev', + lastSeen: ['2020-09-04T09:15:00.781Z'], + host: { name: ['es01.siem.estc.dev'] }, + }, + cursor: { value: 'es01.siem.estc.dev', tiebreaker: null }, + }, + { + node: { + _id: 'siem-windows', + lastSeen: ['2020-09-04T09:14:40.354Z'], + host: { + name: ['siem-windows'], + os: { name: ['Windows Server 2019 Datacenter'], version: ['10.0'] }, + }, + }, + cursor: { value: 'siem-windows', tiebreaker: null }, + }, + { + node: { + _id: 'filebeat-cloud', + lastSeen: ['2020-09-04T08:17:01.000Z'], + host: { name: ['filebeat-cloud'] }, + }, + cursor: { value: 'filebeat-cloud', tiebreaker: null }, + }, + { + node: { + _id: 'kibana00.siem.estc.dev', + lastSeen: ['2020-09-04T08:17:01.000Z'], + host: { name: ['kibana00.siem.estc.dev'] }, + }, + cursor: { value: 'kibana00.siem.estc.dev', tiebreaker: null }, + }, + { + node: { + _id: 'DESKTOP-QBBSCUT', + lastSeen: ['2020-09-03T16:28:07.957Z'], + host: { name: ['DESKTOP-QBBSCUT'], os: { name: ['Windows 10 Pro'], version: ['10.0'] } }, + }, + cursor: { value: 'DESKTOP-QBBSCUT', tiebreaker: null }, + }, + { + node: { + _id: 'mainqa-atlcolo-10-0-7-195.eng.endgames.local', + lastSeen: ['2020-09-03T16:27:37.515Z'], + host: { + name: ['mainqa-atlcolo-10-0-7-195.eng.endgames.local'], + os: { name: ['macOS'], version: ['10.14.1'] }, + }, + }, + cursor: { value: 'mainqa-atlcolo-10-0-7-195.eng.endgames.local', tiebreaker: null }, + }, + ], + totalCount: 9, + pageInfo: { activePage: 0, fakeTotalCount: 9, showMorePagesIndicator: false }, +}; + +export const mockBuckets: HostAggEsItem = { + key: 'zeek-london', + os: { + hits: { + total: { + value: 242338, + relation: 'eq', + }, + max_score: null, + hits: [ + { + _index: 'auditbeat-8.0.0-2019.09.06-000022', + _id: 'dl0T_m0BHe9nqdOiF2A8', + _score: null, + _source: { + host: { + os: { + kernel: ['5.0.0-1013-gcp'], + name: ['Ubuntu'], + family: ['debian'], + version: ['18.04.2 LTS (Bionic Beaver)'], + platform: ['ubuntu'], + }, + }, + }, + sort: [1571925726017], + }, + ], + }, + }, +}; + +export const expectedDsl = { + allowNoIndices: true, + body: { + aggregations: { + host_count: { cardinality: { field: 'host.name' } }, + host_data: { + aggs: { + lastSeen: { max: { field: '@timestamp' } }, + os: { + top_hits: { + _source: { includes: ['host.os.*'] }, + size: 1, + sort: [{ '@timestamp': { order: 'desc' } }], + }, + }, + }, + terms: { field: 'host.name', order: { lastSeen: 'desc' }, size: 10 }, + }, + }, + query: { + bool: { + filter: [ + { bool: { filter: [{ match_all: {} }], must: [], must_not: [], should: [] } }, + { + range: { + '@timestamp': { + format: 'strict_date_optional_time', + gte: '2020-09-03T09:15:21.415Z', + lte: '2020-09-04T09:15:21.415Z', + }, + }, + }, + ], + }, + }, + size: 0, + track_total_hits: false, + }, + ignoreUnavailable: true, + index: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/helpers.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/helpers.test.ts new file mode 100644 index 0000000000000..78f214c69f14f --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/helpers.test.ts @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { HostsEdges } from '../../../../../../common/search_strategy/security_solution'; + +import { formatHostEdgesData } from './helpers'; +import { mockBuckets } from './__mocks__'; + +describe('#formatHostsData', () => { + test('it formats a host with a source of name correctly', () => { + const mockFields: readonly string[] = ['host.name']; + const data = formatHostEdgesData(mockFields, mockBuckets); + const expected: HostsEdges = { + cursor: { tiebreaker: null, value: 'zeek-london' }, + node: { host: { name: ['zeek-london'] }, _id: 'zeek-london' }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a host with a source of os correctly', () => { + const mockFields: readonly string[] = ['host.os.name']; + const data = formatHostEdgesData(mockFields, mockBuckets); + const expected: HostsEdges = { + cursor: { tiebreaker: null, value: 'zeek-london' }, + node: { host: { os: { name: ['Ubuntu'] } }, _id: 'zeek-london' }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a host with a source of version correctly', () => { + const mockFields: readonly string[] = ['host.os.version']; + const data = formatHostEdgesData(mockFields, mockBuckets); + const expected: HostsEdges = { + cursor: { tiebreaker: null, value: 'zeek-london' }, + node: { host: { os: { version: ['18.04.2 LTS (Bionic Beaver)'] } }, _id: 'zeek-london' }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a host with a source of id correctly', () => { + const mockFields: readonly string[] = ['host.name']; + const data = formatHostEdgesData(mockFields, mockBuckets); + const expected: HostsEdges = { + cursor: { tiebreaker: null, value: 'zeek-london' }, + node: { _id: 'zeek-london', host: { name: ['zeek-london'] } }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a host with a source of name, lastBeat, os, and version correctly', () => { + const mockFields: readonly string[] = ['host.name', 'host.os.name', 'host.os.version']; + const data = formatHostEdgesData(mockFields, mockBuckets); + const expected: HostsEdges = { + cursor: { tiebreaker: null, value: 'zeek-london' }, + node: { + _id: 'zeek-london', + host: { + name: ['zeek-london'], + os: { name: ['Ubuntu'], version: ['18.04.2 LTS (Bionic Beaver)'] }, + }, + }, + }; + + expect(data).toEqual(expected); + }); + + test('it formats a host without any data if mockFields are empty', () => { + const mockFields: readonly string[] = []; + const data = formatHostEdgesData(mockFields, mockBuckets); + const expected: HostsEdges = { + cursor: { + tiebreaker: null, + value: '', + }, + node: {}, + }; + + expect(data).toEqual(expected); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/helpers.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/helpers.ts index 3550824028478..b06c36fd24e1a 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/helpers.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/helpers.ts @@ -9,22 +9,29 @@ import { hostFieldsMap } from '../../../../../../common/ecs/ecs_fields'; import { HostsEdges } from '../../../../../../common/search_strategy/security_solution/hosts'; import { HostAggEsItem, HostBuckets, HostValue } from '../../../../../lib/hosts/types'; +import { toArray } from '../../../../helpers/to_array'; -const HOSTS_FIELDS = ['_id', 'lastSeen', 'host.id', 'host.name', 'host.os.name', 'host.os.version']; +export const HOSTS_FIELDS: readonly string[] = [ + '_id', + 'lastSeen', + 'host.id', + 'host.name', + 'host.os.name', + 'host.os.version', +]; -export const formatHostEdgesData = (bucket: HostAggEsItem): HostsEdges => - HOSTS_FIELDS.reduce( +export const formatHostEdgesData = ( + fields: readonly string[] = HOSTS_FIELDS, + bucket: HostAggEsItem +): HostsEdges => + fields.reduce( (flattenedFields, fieldName) => { const hostId = get('key', bucket); flattenedFields.node._id = hostId || null; flattenedFields.cursor.value = hostId || ''; const fieldValue = getHostFieldValue(fieldName, bucket); if (fieldValue != null) { - return set( - `node.${fieldName}`, - Array.isArray(fieldValue) ? fieldValue : [fieldValue], - flattenedFields - ); + return set(`node.${fieldName}`, toArray(fieldValue), flattenedFields); } return flattenedFields; }, diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/index.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/index.test.ts new file mode 100644 index 0000000000000..b57112b02fffe --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/index.test.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { DEFAULT_MAX_TABLE_QUERY_SIZE } from '../../../../../../common/constants'; + +import { HostsRequestOptions } from '../../../../../../common/search_strategy/security_solution'; +import * as buildQuery from './query.all_hosts.dsl'; +import { allHosts } from '.'; +import { + mockOptions, + mockSearchStrategyResponse, + formattedSearchStrategyResponse, +} from './__mocks__'; + +describe('allHosts search strategy', () => { + const buildAllHostsQuery = jest.spyOn(buildQuery, 'buildHostsQuery'); + + afterEach(() => { + buildAllHostsQuery.mockClear(); + }); + + describe('buildDsl', () => { + test('should build dsl query', () => { + allHosts.buildDsl(mockOptions); + expect(buildAllHostsQuery).toHaveBeenCalledWith(mockOptions); + }); + + test('should throw error if query size is greater equal than DEFAULT_MAX_TABLE_QUERY_SIZE ', () => { + const overSizeOptions = { + ...mockOptions, + pagination: { + ...mockOptions.pagination, + querySize: DEFAULT_MAX_TABLE_QUERY_SIZE, + }, + } as HostsRequestOptions; + + expect(() => { + allHosts.buildDsl(overSizeOptions); + }).toThrowError(`No query size above ${DEFAULT_MAX_TABLE_QUERY_SIZE}`); + }); + }); + + describe('parse', () => { + test('should parse data correctly', async () => { + const result = await allHosts.parse(mockOptions, mockSearchStrategyResponse); + expect(result).toMatchObject(formattedSearchStrategyResponse); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/index.ts index d4c2214b98645..aacfc227a36ad 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/index.ts @@ -18,7 +18,7 @@ import { import { inspectStringifyObject } from '../../../../../utils/build_query'; import { SecuritySolutionFactory } from '../../types'; import { buildHostsQuery } from './query.all_hosts.dsl'; -import { formatHostEdgesData } from './helpers'; +import { formatHostEdgesData, HOSTS_FIELDS } from './helpers'; export const allHosts: SecuritySolutionFactory = { buildDsl: (options: HostsRequestOptions) => { @@ -38,12 +38,11 @@ export const allHosts: SecuritySolutionFactory = { 'aggregations.host_data.buckets', response.rawResponse ); - const hostsEdges = buckets.map((bucket) => formatHostEdgesData(bucket)); + const hostsEdges = buckets.map((bucket) => formatHostEdgesData(HOSTS_FIELDS, bucket)); const fakeTotalCount = fakePossibleCount <= totalCount ? fakePossibleCount : totalCount; const edges = hostsEdges.splice(cursorStart, querySize - cursorStart); const inspect = { dsl: [inspectStringifyObject(buildHostsQuery(options))], - response: [inspectStringifyObject(response)], }; const showMorePagesIndicator = totalCount > fakeTotalCount; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/query.all_hosts.dsl.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/query.all_hosts.dsl.test.ts new file mode 100644 index 0000000000000..f5999d15e8950 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/all/query.all_hosts.dsl.test.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { buildHostsQuery } from './query.all_hosts.dsl'; +import { mockOptions, expectedDsl } from './__mocks__/'; + +describe('buildHostsQuery', () => { + test('build query from options correctly', () => { + expect(buildHostsQuery(mockOptions)).toEqual(expectedDsl); + }); +}); From 203f25645feb06600742d653bc75ee610e0cf13d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20G=C3=B3mez?= Date: Mon, 7 Sep 2020 16:08:27 +0200 Subject: [PATCH 07/58] [Logs UI] Shared `` component (#76262) --- .../public/components/log_stream/README.md | 73 ++++++++++ .../public/components/log_stream/index.tsx | 133 ++++++++++++++++++ .../log_stream/lazy_log_stream_wrapper.tsx | 16 +++ .../scrollable_log_text_stream_view.tsx | 4 +- .../containers/logs/log_stream/index.ts | 89 ++++++++++++ .../view_log_in_context.ts | 50 +------ x-pack/plugins/infra/public/index.ts | 4 +- .../logs/stream/page_view_log_in_context.tsx | 76 ++++------ 8 files changed, 351 insertions(+), 94 deletions(-) create mode 100644 x-pack/plugins/infra/public/components/log_stream/README.md create mode 100644 x-pack/plugins/infra/public/components/log_stream/index.tsx create mode 100644 x-pack/plugins/infra/public/components/log_stream/lazy_log_stream_wrapper.tsx create mode 100644 x-pack/plugins/infra/public/containers/logs/log_stream/index.ts diff --git a/x-pack/plugins/infra/public/components/log_stream/README.md b/x-pack/plugins/infra/public/components/log_stream/README.md new file mode 100644 index 0000000000000..59b3edfab736c --- /dev/null +++ b/x-pack/plugins/infra/public/components/log_stream/README.md @@ -0,0 +1,73 @@ +# Embeddable `` component + +The purpose of this component is to allow you, the developer, to have your very own Log Stream in your plugin. + +The plugin is exposed through `infra/public`. Since Kibana uses relative paths is up to you to find how to import it (sorry). + +```tsx +import { LogStream } from '../../../../../../infra/public'; +``` + +## Prerequisites + +To use the component, there are several things you need to ensure in your plugin: + +- In your plugin's `kibana.json` plugin, add `"infra"` to `requiredPlugins`. +- The component needs to be mounted inside the hiearchy of a [`kibana-react` provider](https://github.com/elastic/kibana/blob/b2d0aa7b7fae1c89c8f9e8854ae73e71be64e765/src/plugins/kibana_react/README.md#L45). + +## Usage + +The simplest way to use the component is with a date range, passed with the `startTimestamp` and `endTimestamp` props. + +```tsx +const endTimestamp = Date.now(); +const startTimestamp = endTimestamp - 15 * 60 * 1000; // 15 minutes + +; +``` + +This will show a list of log entries between the time range, in ascending order (oldest first), but with the scroll position all the way to the bottom (showing the newest entries) + +### Filtering data + +You might want to show specific data for the purpose of your plugin. Maybe you want to show log lines from a specific host, or for an APM trace. You can pass a KQL expression via the `query` prop. + +```tsx + +``` + +### Modifying rendering + +By default the component will initially load at the bottom of the list, showing the newest entries. You can change what log line is shown in the center via the `center` prop. The prop takes a [`LogEntriesCursor`](https://github.com/elastic/kibana/blob/0a6c748cc837c016901f69ff05d81395aa2d41c8/x-pack/plugins/infra/common/http_api/log_entries/common.ts#L9-L13). + +```tsx + +``` + +If you want to highlight a specific log line, you can do so by passing its ID in the `highlight` prop. + +```tsx + +``` + +### Source configuration + +The infra plugin has the concept of "source configuration" to store settings for the logs UI. The component will use the source configuration to determine which indices to query or what columns to show. + +By default the `` uses the `"default"` source confiuration, but if your plugin uses a different one you can specify it via the `sourceId` prop. + +```tsx + +``` + +### Considerations + +As mentioned in the prerequisites, the component relies on `kibana-react` to access kibana's core services. If this is not the case the component will throw an exception when rendering. We advise to use an `` in your component hierarchy to catch this error if necessary. diff --git a/x-pack/plugins/infra/public/components/log_stream/index.tsx b/x-pack/plugins/infra/public/components/log_stream/index.tsx new file mode 100644 index 0000000000000..f9bfbf9564798 --- /dev/null +++ b/x-pack/plugins/infra/public/components/log_stream/index.tsx @@ -0,0 +1,133 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useMemo } from 'react'; +import { noop } from 'lodash'; +import { useMount } from 'react-use'; +import { euiStyled } from '../../../../observability/public'; + +import { LogEntriesCursor } from '../../../common/http_api'; + +import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; +import { useLogSource } from '../../containers/logs/log_source'; +import { useLogStream } from '../../containers/logs/log_stream'; + +import { ScrollableLogTextStreamView } from '../logging/log_text_stream'; + +export interface LogStreamProps { + sourceId?: string; + startTimestamp: number; + endTimestamp: number; + query?: string; + center?: LogEntriesCursor; + highlight?: string; + height?: string | number; +} + +export const LogStream: React.FC = ({ + sourceId = 'default', + startTimestamp, + endTimestamp, + query, + center, + highlight, + height = '400px', +}) => { + // source boilerplate + const { services } = useKibana(); + if (!services?.http?.fetch) { + throw new Error( + ` cannot access kibana core services. + +Ensure the component is mounted within kibana-react's hierarchy. +Read more at https://github.com/elastic/kibana/blob/master/src/plugins/kibana_react/README.md" +` + ); + } + + const { + sourceConfiguration, + loadSourceConfiguration, + isLoadingSourceConfiguration, + } = useLogSource({ + sourceId, + fetch: services.http.fetch, + }); + + // Internal state + const { loadingState, entries, fetchEntries } = useLogStream({ + sourceId, + startTimestamp, + endTimestamp, + query, + center, + }); + + // Derived state + const isReloading = + isLoadingSourceConfiguration || loadingState === 'uninitialized' || loadingState === 'loading'; + + const columnConfigurations = useMemo(() => { + return sourceConfiguration ? sourceConfiguration.configuration.logColumns : []; + }, [sourceConfiguration]); + + const streamItems = useMemo( + () => + entries.map((entry) => ({ + kind: 'logEntry' as const, + logEntry: entry, + highlights: [], + })), + [entries] + ); + + // Component lifetime + useMount(() => { + loadSourceConfiguration(); + fetchEntries(); + }); + + const parsedHeight = typeof height === 'number' ? `${height}px` : height; + + return ( + + + + ); +}; + +const LogStreamContent = euiStyled.div<{ height: string }>` + display: flex; + background-color: ${(props) => props.theme.eui.euiColorEmptyShade}; + height: ${(props) => props.height}; +`; + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default LogStream; diff --git a/x-pack/plugins/infra/public/components/log_stream/lazy_log_stream_wrapper.tsx b/x-pack/plugins/infra/public/components/log_stream/lazy_log_stream_wrapper.tsx new file mode 100644 index 0000000000000..65433aab15716 --- /dev/null +++ b/x-pack/plugins/infra/public/components/log_stream/lazy_log_stream_wrapper.tsx @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import type { LogStreamProps } from './'; + +const LazyLogStream = React.lazy(() => import('./')); + +export const LazyLogStreamWrapper: React.FC = (props) => ( + }> + + +); diff --git a/x-pack/plugins/infra/public/components/logging/log_text_stream/scrollable_log_text_stream_view.tsx b/x-pack/plugins/infra/public/components/logging/log_text_stream/scrollable_log_text_stream_view.tsx index fc0c50b9044dc..ae375392b6b93 100644 --- a/x-pack/plugins/infra/public/components/logging/log_text_stream/scrollable_log_text_stream_view.tsx +++ b/x-pack/plugins/infra/public/components/logging/log_text_stream/scrollable_log_text_stream_view.tsx @@ -60,6 +60,7 @@ interface ScrollableLogTextStreamViewProps { endDateExpression: string; updateDateRange: (range: { startDateExpression?: string; endDateExpression?: string }) => void; startLiveStreaming: () => void; + hideScrollbar?: boolean; } interface ScrollableLogTextStreamViewState { @@ -146,6 +147,7 @@ export class ScrollableLogTextStreamView extends React.PureComponent< setFlyoutVisibility, setContextEntry, } = this.props; + const hideScrollbar = this.props.hideScrollbar ?? true; const { targetId, items, isScrollLocked } = this.state; const hasItems = items.length > 0; @@ -196,7 +198,7 @@ export class ScrollableLogTextStreamView extends React.PureComponent< width={width} onVisibleChildrenChange={this.handleVisibleChildrenChange} target={targetId} - hideScrollbar={true} + hideScrollbar={hideScrollbar} data-test-subj={'logStream'} isLocked={isScrollLocked} entriesCount={items.length} diff --git a/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts b/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts new file mode 100644 index 0000000000000..b414408512db2 --- /dev/null +++ b/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useState, useMemo } from 'react'; +import { esKuery } from '../../../../../../../src/plugins/data/public'; +import { fetchLogEntries } from '../log_entries/api/fetch_log_entries'; +import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { LogEntry, LogEntriesCursor } from '../../../../common/http_api'; + +interface LogStreamProps { + sourceId: string; + startTimestamp: number; + endTimestamp: number; + query?: string; + center?: LogEntriesCursor; +} + +interface LogStreamState { + entries: LogEntry[]; + fetchEntries: () => void; + loadingState: 'uninitialized' | 'loading' | 'success' | 'error'; +} + +export function useLogStream({ + sourceId, + startTimestamp, + endTimestamp, + query, + center, +}: LogStreamProps): LogStreamState { + const [entries, setEntries] = useState([]); + + const parsedQuery = useMemo(() => { + return query + ? JSON.stringify(esKuery.toElasticsearchQuery(esKuery.fromKueryExpression(query))) + : null; + }, [query]); + + // Callbacks + const [entriesPromise, fetchEntries] = useTrackedPromise( + { + cancelPreviousOn: 'creation', + createPromise: () => { + setEntries([]); + const fetchPosition = center ? { center } : { before: 'last' }; + + return fetchLogEntries({ + sourceId, + startTimestamp, + endTimestamp, + query: parsedQuery, + ...fetchPosition, + }); + }, + onResolve: ({ data }) => { + setEntries(data.entries); + }, + }, + [sourceId, startTimestamp, endTimestamp, query] + ); + + const loadingState = useMemo(() => convertPromiseStateToLoadingState(entriesPromise.state), [ + entriesPromise.state, + ]); + + return { + entries, + fetchEntries, + loadingState, + }; +} + +function convertPromiseStateToLoadingState( + state: 'uninitialized' | 'pending' | 'resolved' | 'rejected' +): LogStreamState['loadingState'] { + switch (state) { + case 'uninitialized': + return 'uninitialized'; + case 'pending': + return 'loading'; + case 'resolved': + return 'success'; + case 'rejected': + return 'error'; + } +} diff --git a/x-pack/plugins/infra/public/containers/logs/view_log_in_context/view_log_in_context.ts b/x-pack/plugins/infra/public/containers/logs/view_log_in_context/view_log_in_context.ts index bc719cbd694e4..61e1ea353880a 100644 --- a/x-pack/plugins/infra/public/containers/logs/view_log_in_context/view_log_in_context.ts +++ b/x-pack/plugins/infra/public/containers/logs/view_log_in_context/view_log_in_context.ts @@ -3,24 +3,9 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { useState, useEffect, useCallback } from 'react'; +import { useState } from 'react'; import createContainer from 'constate'; import { LogEntry } from '../../../../common/http_api'; -import { fetchLogEntries } from '../log_entries/api/fetch_log_entries'; -import { esKuery } from '../../../../../../../src/plugins/data/public'; - -function getQueryFromLogEntry(entry: LogEntry) { - const expression = Object.entries(entry.context).reduce((kuery, [key, value]) => { - const currentExpression = `${key} : "${value}"`; - if (kuery.length > 0) { - return `${kuery} AND ${currentExpression}`; - } else { - return currentExpression; - } - }, ''); - - return JSON.stringify(esKuery.toElasticsearchQuery(esKuery.fromKueryExpression(expression))); -} interface ViewLogInContextProps { sourceId: string; @@ -28,9 +13,7 @@ interface ViewLogInContextProps { endTimestamp: number; } -export interface ViewLogInContextState { - entries: LogEntry[]; - isLoading: boolean; +export interface ViewLogInContextState extends ViewLogInContextProps { contextEntry?: LogEntry; } @@ -42,37 +25,14 @@ export const useViewLogInContext = ( props: ViewLogInContextProps ): [ViewLogInContextState, ViewLogInContextCallbacks] => { const [contextEntry, setContextEntry] = useState(); - const [entries, setEntries] = useState([]); - const [isLoading, setIsLoading] = useState(false); const { startTimestamp, endTimestamp, sourceId } = props; - const maybeFetchLogs = useCallback(async () => { - if (contextEntry) { - setIsLoading(true); - const { data } = await fetchLogEntries({ - sourceId, - startTimestamp, - endTimestamp, - center: contextEntry.cursor, - query: getQueryFromLogEntry(contextEntry), - }); - setEntries(data.entries); - setIsLoading(false); - } else { - setEntries([]); - setIsLoading(false); - } - }, [contextEntry, startTimestamp, endTimestamp, sourceId]); - - useEffect(() => { - maybeFetchLogs(); - }, [maybeFetchLogs]); - return [ { + startTimestamp, + endTimestamp, + sourceId, contextEntry, - entries, - isLoading, }, { setContextEntry, diff --git a/x-pack/plugins/infra/public/index.ts b/x-pack/plugins/infra/public/index.ts index cadf9a4837866..873e3b1ce0583 100644 --- a/x-pack/plugins/infra/public/index.ts +++ b/x-pack/plugins/infra/public/index.ts @@ -3,7 +3,6 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - import { PluginInitializer, PluginInitializerContext } from 'kibana/public'; import { Plugin } from './plugin'; import { @@ -26,3 +25,6 @@ export { FORMATTERS } from '../common/formatters'; export { InfraFormatterType } from './lib/lib'; export type InfraAppId = 'logs' | 'metrics'; + +// Shared components +export { LazyLogStreamWrapper as LogStream } from './components/log_stream/lazy_log_stream_wrapper'; diff --git a/x-pack/plugins/infra/public/pages/logs/stream/page_view_log_in_context.tsx b/x-pack/plugins/infra/public/pages/logs/stream/page_view_log_in_context.tsx index 3ef32c920e293..4ac3d15a82222 100644 --- a/x-pack/plugins/infra/public/pages/logs/stream/page_view_log_in_context.tsx +++ b/x-pack/plugins/infra/public/pages/logs/stream/page_view_log_in_context.tsx @@ -12,43 +12,38 @@ import { EuiText, EuiTextColor, EuiToolTip, - EuiSpacer, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { noop } from 'lodash'; +import { isEmpty } from 'lodash'; import React, { useCallback, useContext, useMemo } from 'react'; import { LogEntry } from '../../../../common/http_api'; -import { ScrollableLogTextStreamView } from '../../../components/logging/log_text_stream'; -import { useLogSourceContext } from '../../../containers/logs/log_source'; -import { LogViewConfiguration } from '../../../containers/logs/log_view_configuration'; import { ViewLogInContext } from '../../../containers/logs/view_log_in_context'; import { useViewportDimensions } from '../../../utils/use_viewport_dimensions'; import { euiStyled } from '../../../../../observability/public'; +import { LogStream } from '../../../components/log_stream'; const MODAL_MARGIN = 25; export const PageViewLogInContext: React.FC = () => { - const { sourceConfiguration } = useLogSourceContext(); - const { textScale, textWrap } = useContext(LogViewConfiguration.Context); - /* eslint-disable-next-line react-hooks/exhaustive-deps */ - const columnConfigurations = useMemo(() => sourceConfiguration?.configuration.logColumns ?? [], [ - sourceConfiguration, - ]); - const [{ contextEntry, entries, isLoading }, { setContextEntry }] = useContext( - ViewLogInContext.Context - ); + const [ + { contextEntry, startTimestamp, endTimestamp, sourceId }, + { setContextEntry }, + ] = useContext(ViewLogInContext.Context); const closeModal = useCallback(() => setContextEntry(undefined), [setContextEntry]); const { width: vw, height: vh } = useViewportDimensions(); - const streamItems = useMemo( - () => - entries.map((entry) => ({ - kind: 'logEntry' as const, - logEntry: entry, - highlights: [], - })), - [entries] - ); + const contextQuery = useMemo(() => { + if (contextEntry && !isEmpty(contextEntry.context)) { + return Object.entries(contextEntry.context).reduce((kuery, [key, value]) => { + const currentExpression = `${key} : "${value}"`; + if (kuery.length > 0) { + return `${kuery} AND ${currentExpression}`; + } else { + return currentExpression; + } + }, ''); + } + }, [contextEntry]); if (!contextEntry) { return null; @@ -64,31 +59,18 @@ export const PageViewLogInContext: React.FC = () => { wrap={false} style={{ height: '100%' }} > - + - - + + From a7d742abc3f9004ad34b48d71ccc3be71feeff3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yulia=20=C4=8Cech?= <6585477+yuliacech@users.noreply.github.com> Date: Mon, 7 Sep 2020 16:16:20 +0200 Subject: [PATCH 08/58] [ILM] Clean up remaining js files and any typings (#76803) * [ILM] Clean up remaining js files and any typings * [ILM] Fix jest test Co-authored-by: Elastic Machine --- .../edit_policy/constants.ts | 2 +- ...it_policy.test.js => edit_policy.test.tsx} | 95 ++++++++++--------- .../components/helpers/http_requests.ts | 2 +- .../__jest__/components/policy_table.test.tsx | 2 +- .../__jest__/extend_index_management.test.tsx | 2 +- .../common/types/index.ts | 7 ++ .../types.ts => common/types/policies.ts} | 8 +- .../public/application/constants/policy.ts | 2 +- .../edit_policy/components/min_age_input.tsx | 2 +- .../components/node_allocation.tsx | 2 +- .../components/policy_json_flyout.tsx | 2 +- .../components/set_priority_input.tsx | 2 +- .../sections/edit_policy/edit_policy.tsx | 7 +- .../edit_policy/phases/cold_phase.tsx | 2 +- .../edit_policy/phases/delete_phase.tsx | 2 +- .../edit_policy/phases/frozen_phase.tsx | 2 +- .../sections/edit_policy/phases/hot_phase.tsx | 2 +- .../edit_policy/phases/warm_phase.tsx | 5 +- .../add_policy_to_template_confirm_modal.tsx | 2 +- .../components/confirm_delete.tsx | 2 +- .../policy_table/components/table_content.tsx | 2 +- .../sections/policy_table/policy_table.tsx | 2 +- .../public/application/services/api.ts | 4 +- .../services/policies/cold_phase.ts | 4 +- .../services/policies/delete_phase.ts | 2 +- .../services/policies/frozen_phase.ts | 4 +- .../services/policies/hot_phase.ts | 2 +- .../services/policies/policy_save.ts | 4 +- .../services/policies/policy_serialization.ts | 4 +- .../services/policies/policy_validation.ts | 13 ++- .../services/policies/warm_phase.ts | 5 +- .../public/application/services/sort_table.ts | 2 +- .../public/application/services/ui_metric.ts | 8 +- .../add_lifecycle_confirm_modal.tsx | 2 +- .../components/index_lifecycle_summary.tsx | 2 +- .../public/extend_index_management/index.tsx | 2 +- .../server/plugin.ts | 15 ++- .../api/policies/register_fetch_route.ts | 22 +++-- .../templates/register_add_policy_route.ts | 3 +- .../api/templates/register_fetch_route.ts | 13 ++- .../index_management/common/types/indices.ts | 8 ++ .../plugins/index_management/server/index.ts | 2 +- 42 files changed, 156 insertions(+), 121 deletions(-) rename x-pack/plugins/index_lifecycle_management/__jest__/components/{edit_policy.test.js => edit_policy.test.tsx} (90%) create mode 100644 x-pack/plugins/index_lifecycle_management/common/types/index.ts rename x-pack/plugins/index_lifecycle_management/{public/application/services/policies/types.ts => common/types/policies.ts} (96%) diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/constants.ts b/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/constants.ts index acf642f250a7b..4dff70518c115 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/constants.ts +++ b/x-pack/plugins/index_lifecycle_management/__jest__/client_integration/edit_policy/constants.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { PolicyFromES } from '../../../public/application/services/policies/types'; +import { PolicyFromES } from '../../../common/types'; export const POLICY_NAME = 'my_policy'; export const SNAPSHOT_POLICY_NAME = 'my_snapshot_policy'; diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.js b/x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.tsx similarity index 90% rename from x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.js rename to x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.tsx index e4227bac520fe..28b25c3eb4530 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.js +++ b/x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.tsx @@ -4,13 +4,16 @@ * you may not use this file except in compliance with the Elastic License. */ -import React from 'react'; +import React, { ReactElement } from 'react'; import { act } from 'react-dom/test-utils'; import moment from 'moment-timezone'; -// axios has a $http like interface so using it to simulate $http + +import { findTestSubject } from '@elastic/eui/lib/test'; +import { mountWithIntl } from 'test_utils/enzyme_helpers'; +import { SinonFakeServer } from 'sinon'; +import { ReactWrapper } from 'enzyme'; import axios from 'axios'; import axiosXhrAdapter from 'axios/lib/adapters/xhr'; -import { findTestSubject } from '@elastic/eui/lib/test'; import { init as initHttpRequests } from './helpers/http_requests'; import { @@ -19,11 +22,11 @@ import { } from '../../../../../src/core/public/mocks'; import { usageCollectionPluginMock } from '../../../../../src/plugins/usage_collection/public/mocks'; -import { mountWithIntl } from '../../../../test_utils/enzyme_helpers'; import { EditPolicy } from '../../public/application/sections/edit_policy/edit_policy'; import { init as initHttp } from '../../public/application/services/http'; import { init as initUiMetric } from '../../public/application/services/ui_metric'; import { init as initNotification } from '../../public/application/services/notification'; +import { PolicyFromES } from '../../common/types'; import { positiveNumbersAboveZeroErrorMessage, positiveNumberRequiredMessage, @@ -38,7 +41,10 @@ import { policyNameAlreadyUsedErrorMessage, maximumDocumentsRequiredMessage, } from '../../public/application/services/policies/policy_validation'; +import { HttpResponse } from './helpers/http_requests'; +import { createMemoryHistory } from 'history'; +// @ts-ignore initHttp(axios.create({ adapter: axiosXhrAdapter })); initUiMetric(usageCollectionPluginMock.createSetupContract()); initNotification( @@ -46,8 +52,13 @@ initNotification( fatalErrorsServiceMock.createSetupContract() ); -let server; -let httpRequestsMockHelpers; +const history = createMemoryHistory(); +let server: SinonFakeServer; +let httpRequestsMockHelpers: { + setPoliciesResponse: (response: HttpResponse) => void; + setNodesListResponse: (response: HttpResponse) => void; + setNodesDetailsResponse: (nodeAttributes: string, response: HttpResponse) => void; +}; const policy = { phases: { hot: { @@ -60,32 +71,33 @@ const policy = { }, }, }; -const policies = []; +const policies: PolicyFromES[] = []; for (let i = 0; i < 105; i++) { policies.push({ version: i, - modified_date: moment().subtract(i, 'days').valueOf(), - linkedIndices: i % 2 === 0 ? [`index${i}`] : null, + modified_date: moment().subtract(i, 'days').toISOString(), + linkedIndices: i % 2 === 0 ? [`index${i}`] : undefined, name: `testy${i}`, policy: { ...policy, + name: `testy${i}`, }, }); } window.scrollTo = jest.fn(); -window.TextEncoder = null; -let component; -const activatePhase = async (rendered, phase) => { + +let component: ReactElement; +const activatePhase = async (rendered: ReactWrapper, phase: string) => { const testSubject = `enablePhaseSwitch-${phase}`; await act(async () => { await findTestSubject(rendered, testSubject).simulate('click'); }); rendered.update(); }; -const expectedErrorMessages = (rendered, expectedErrorMessages) => { +const expectedErrorMessages = (rendered: ReactWrapper, expectedMessages: string[]) => { const errorMessages = rendered.find('.euiFormErrorText'); - expect(errorMessages.length).toBe(expectedErrorMessages.length); - expectedErrorMessages.forEach((expectedErrorMessage) => { + expect(errorMessages.length).toBe(expectedMessages.length); + expectedMessages.forEach((expectedErrorMessage) => { let foundErrorMessage; for (let i = 0; i < errorMessages.length; i++) { if (errorMessages.at(i).text() === expectedErrorMessage) { @@ -95,29 +107,29 @@ const expectedErrorMessages = (rendered, expectedErrorMessages) => { expect(foundErrorMessage).toBe(true); }); }; -const noRollover = (rendered) => { +const noRollover = (rendered: ReactWrapper) => { findTestSubject(rendered, 'rolloverSwitch').simulate('click'); rendered.update(); }; -const getNodeAttributeSelect = (rendered, phase) => { +const getNodeAttributeSelect = (rendered: ReactWrapper, phase: string) => { return rendered.find(`select#${phase}-selectedNodeAttrs`); }; -const setPolicyName = (rendered, policyName) => { +const setPolicyName = (rendered: ReactWrapper, policyName: string) => { const policyNameField = findTestSubject(rendered, 'policyNameField'); policyNameField.simulate('change', { target: { value: policyName } }); rendered.update(); }; -const setPhaseAfter = (rendered, phase, after) => { +const setPhaseAfter = (rendered: ReactWrapper, phase: string, after: string) => { const afterInput = rendered.find(`input#${phase}-selectedMinimumAge`); afterInput.simulate('change', { target: { value: after } }); rendered.update(); }; -const setPhaseIndexPriority = (rendered, phase, priority) => { +const setPhaseIndexPriority = (rendered: ReactWrapper, phase: string, priority: string) => { const priorityInput = rendered.find(`input#${phase}-phaseIndexPriority`); priorityInput.simulate('change', { target: { value: priority } }); rendered.update(); }; -const save = (rendered) => { +const save = (rendered: ReactWrapper) => { const saveButton = findTestSubject(rendered, 'savePolicyButton'); saveButton.simulate('click'); rendered.update(); @@ -125,12 +137,7 @@ const save = (rendered) => { describe('edit policy', () => { beforeEach(() => { component = ( - {} }} - getUrlForApp={() => {}} - policies={policies} - policyName={''} - /> + ); ({ server, httpRequestsMockHelpers } = initHttpRequests()); @@ -162,8 +169,8 @@ describe('edit policy', () => { {}} - history={{ push: () => {} }} + getUrlForApp={jest.fn()} + history={history} /> ); const rendered = mountWithIntl(component); @@ -272,7 +279,7 @@ describe('edit policy', () => { const rendered = mountWithIntl(component); noRollover(rendered); setPolicyName(rendered, 'mypolicy'); - setPhaseIndexPriority(rendered, 'hot', -1); + setPhaseIndexPriority(rendered, 'hot', '-1'); save(rendered); expectedErrorMessages(rendered, [positiveNumberRequiredMessage]); }); @@ -300,7 +307,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'warm'); - setPhaseAfter(rendered, 'warm', 0); + setPhaseAfter(rendered, 'warm', '0'); save(rendered); expectedErrorMessages(rendered, []); }); @@ -309,7 +316,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'warm'); - setPhaseAfter(rendered, 'warm', -1); + setPhaseAfter(rendered, 'warm', '-1'); save(rendered); expectedErrorMessages(rendered, [positiveNumberRequiredMessage]); }); @@ -318,8 +325,8 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'warm'); - setPhaseAfter(rendered, 'warm', 1); - setPhaseIndexPriority(rendered, 'warm', -1); + setPhaseAfter(rendered, 'warm', '1'); + setPhaseIndexPriority(rendered, 'warm', '-1'); save(rendered); expectedErrorMessages(rendered, [positiveNumberRequiredMessage]); }); @@ -330,7 +337,7 @@ describe('edit policy', () => { await activatePhase(rendered, 'warm'); findTestSubject(rendered, 'shrinkSwitch').simulate('click'); rendered.update(); - setPhaseAfter(rendered, 'warm', 1); + setPhaseAfter(rendered, 'warm', '1'); const shrinkInput = rendered.find('input#warm-selectedPrimaryShardCount'); shrinkInput.simulate('change', { target: { value: '0' } }); rendered.update(); @@ -342,7 +349,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'warm'); - setPhaseAfter(rendered, 'warm', 1); + setPhaseAfter(rendered, 'warm', '1'); findTestSubject(rendered, 'shrinkSwitch').simulate('click'); rendered.update(); const shrinkInput = rendered.find('input#warm-selectedPrimaryShardCount'); @@ -356,7 +363,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'warm'); - setPhaseAfter(rendered, 'warm', 1); + setPhaseAfter(rendered, 'warm', '1'); findTestSubject(rendered, 'forceMergeSwitch').simulate('click'); rendered.update(); const shrinkInput = rendered.find('input#warm-selectedForceMergeSegments'); @@ -370,7 +377,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'warm'); - setPhaseAfter(rendered, 'warm', 1); + setPhaseAfter(rendered, 'warm', '1'); findTestSubject(rendered, 'forceMergeSwitch').simulate('click'); rendered.update(); const shrinkInput = rendered.find('input#warm-selectedForceMergeSegments'); @@ -446,7 +453,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'cold'); - setPhaseAfter(rendered, 'cold', 0); + setPhaseAfter(rendered, 'cold', '0'); save(rendered); expectedErrorMessages(rendered, []); }); @@ -455,7 +462,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'cold'); - setPhaseAfter(rendered, 'cold', -1); + setPhaseAfter(rendered, 'cold', '-1'); save(rendered); expectedErrorMessages(rendered, [positiveNumberRequiredMessage]); }); @@ -517,8 +524,8 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'cold'); - setPhaseAfter(rendered, 'cold', 1); - setPhaseIndexPriority(rendered, 'cold', -1); + setPhaseAfter(rendered, 'cold', '1'); + setPhaseIndexPriority(rendered, 'cold', '-1'); save(rendered); expectedErrorMessages(rendered, [positiveNumberRequiredMessage]); }); @@ -529,7 +536,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'delete'); - setPhaseAfter(rendered, 'delete', 0); + setPhaseAfter(rendered, 'delete', '0'); save(rendered); expectedErrorMessages(rendered, []); }); @@ -538,7 +545,7 @@ describe('edit policy', () => { noRollover(rendered); setPolicyName(rendered, 'mypolicy'); await activatePhase(rendered, 'delete'); - setPhaseAfter(rendered, 'delete', -1); + setPhaseAfter(rendered, 'delete', '-1'); save(rendered); expectedErrorMessages(rendered, [positiveNumberRequiredMessage]); }); diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/components/helpers/http_requests.ts b/x-pack/plugins/index_lifecycle_management/__jest__/components/helpers/http_requests.ts index 668cbedbf0c95..6cbe3bdf1f8c6 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/components/helpers/http_requests.ts +++ b/x-pack/plugins/index_lifecycle_management/__jest__/components/helpers/http_requests.ts @@ -6,7 +6,7 @@ import sinon, { SinonFakeServer } from 'sinon'; -type HttpResponse = Record | any[]; +export type HttpResponse = Record | any[]; const registerHttpRequestMockHelpers = (server: SinonFakeServer) => { const setPoliciesResponse = (response: HttpResponse = []) => { diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/components/policy_table.test.tsx b/x-pack/plugins/index_lifecycle_management/__jest__/components/policy_table.test.tsx index d95b4503c266b..0d66d9a8cdf9f 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/components/policy_table.test.tsx +++ b/x-pack/plugins/index_lifecycle_management/__jest__/components/policy_table.test.tsx @@ -17,10 +17,10 @@ import { import { HttpService } from '../../../../../src/core/public/http'; import { usageCollectionPluginMock } from '../../../../../src/plugins/usage_collection/public/mocks'; +import { PolicyFromES } from '../../common/types'; import { PolicyTable } from '../../public/application/sections/policy_table/policy_table'; import { init as initHttp } from '../../public/application/services/http'; import { init as initUiMetric } from '../../public/application/services/ui_metric'; -import { PolicyFromES } from '../../public/application/services/policies/types'; initHttp( new HttpService().setup({ diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/extend_index_management.test.tsx b/x-pack/plugins/index_lifecycle_management/__jest__/extend_index_management.test.tsx index 17573cb81c408..ca3121bf6b7a6 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/extend_index_management.test.tsx +++ b/x-pack/plugins/index_lifecycle_management/__jest__/extend_index_management.test.tsx @@ -10,6 +10,7 @@ import axiosXhrAdapter from 'axios/lib/adapters/xhr'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import { usageCollectionPluginMock } from '../../../../src/plugins/usage_collection/public/mocks'; +import { Index } from '../common/types'; import { retryLifecycleActionExtension, removeLifecyclePolicyActionExtension, @@ -20,7 +21,6 @@ import { } from '../public/extend_index_management'; import { init as initHttp } from '../public/application/services/http'; import { init as initUiMetric } from '../public/application/services/ui_metric'; -import { Index } from '../public/application/services/policies/types'; // We need to init the http with a mock for any tests that depend upon the http service. // For example, add_lifecycle_confirm_modal makes an API request in its componentDidMount diff --git a/x-pack/plugins/index_lifecycle_management/common/types/index.ts b/x-pack/plugins/index_lifecycle_management/common/types/index.ts new file mode 100644 index 0000000000000..fef79c7782bb0 --- /dev/null +++ b/x-pack/plugins/index_lifecycle_management/common/types/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export * from './policies'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/types.ts b/x-pack/plugins/index_lifecycle_management/common/types/policies.ts similarity index 96% rename from x-pack/plugins/index_lifecycle_management/public/application/services/policies/types.ts rename to x-pack/plugins/index_lifecycle_management/common/types/policies.ts index 0e00b5a02b71d..d88d5b5021a25 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/types.ts +++ b/x-pack/plugins/index_lifecycle_management/common/types/policies.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { Index as IndexInterface } from '../../../../../index_management/public'; +import { Index as IndexInterface } from '../../../index_management/common/types'; export interface SerializedPolicy { name: string; @@ -28,7 +28,7 @@ export interface PolicyFromES { } export interface SerializedPhase { - min_age: string; + min_age?: string; actions: { [action: string]: any; }; @@ -94,10 +94,10 @@ export interface SerializedDeletePhase extends SerializedPhase { } export interface AllocateAction { - number_of_replicas: number; + number_of_replicas?: number; include: {}; exclude: {}; - require: { + require?: { [attribute: string]: string; }; } diff --git a/x-pack/plugins/index_lifecycle_management/public/application/constants/policy.ts b/x-pack/plugins/index_lifecycle_management/public/application/constants/policy.ts index fb626e7d7fe76..4fd74da06f1b3 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/constants/policy.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/constants/policy.ts @@ -11,7 +11,7 @@ import { HotPhase, WarmPhase, FrozenPhase, -} from '../services/policies/types'; +} from '../../../common/types'; export const defaultNewHotPhase: HotPhase = { phaseEnabled: true, diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/min_age_input.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/min_age_input.tsx index 5128ba1c881a0..d7edbac3d1c54 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/min_age_input.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/min_age_input.tsx @@ -12,7 +12,7 @@ import { EuiFieldNumber, EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiSelect } from import { LearnMoreLink } from './learn_more_link'; import { ErrableFormRow } from './form_errors'; import { PhaseValidationErrors, propertyof } from '../../../services/policies/policy_validation'; -import { PhaseWithMinAge, Phases } from '../../../services/policies/types'; +import { PhaseWithMinAge, Phases } from '../../../../../common/types'; function getTimingLabelForPhase(phase: keyof Phases) { // NOTE: Hot phase isn't necessary, because indices begin in the hot phase. diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/node_allocation.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/node_allocation.tsx index b4ff62bfb03dc..6f80afccbff5e 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/node_allocation.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/node_allocation.tsx @@ -20,7 +20,7 @@ import { LearnMoreLink } from './learn_more_link'; import { ErrableFormRow } from './form_errors'; import { useLoadNodes } from '../../../services/api'; import { NodeAttrsDetails } from './node_attrs_details'; -import { PhaseWithAllocationAction, Phases } from '../../../services/policies/types'; +import { PhaseWithAllocationAction, Phases } from '../../../../../common/types'; import { PhaseValidationErrors, propertyof } from '../../../services/policies/policy_validation'; const learnMoreLink = ( diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/policy_json_flyout.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/policy_json_flyout.tsx index 2f246f21aaf2e..98d2409ffea6d 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/policy_json_flyout.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/policy_json_flyout.tsx @@ -18,7 +18,7 @@ import { EuiText, EuiTitle, } from '@elastic/eui'; -import { Policy, PolicyFromES } from '../../../services/policies/types'; +import { Policy, PolicyFromES } from '../../../../../common/types'; import { serializePolicy } from '../../../services/policies/policy_serialization'; interface Props { diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/set_priority_input.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/set_priority_input.tsx index 1505532a2b16e..7f839fc94918b 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/set_priority_input.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/set_priority_input.tsx @@ -10,7 +10,7 @@ import { EuiFieldNumber, EuiTextColor, EuiDescribedFormGroup } from '@elastic/eu import { LearnMoreLink } from './'; import { OptionalLabel } from './'; import { ErrableFormRow } from './'; -import { PhaseWithIndexPriority, Phases } from '../../../services/policies/types'; +import { PhaseWithIndexPriority, Phases } from '../../../../../common/types'; import { PhaseValidationErrors, propertyof } from '../../../services/policies/policy_validation'; interface Props { diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/edit_policy.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/edit_policy.tsx index db58c64a8ae8c..f1c287788e08d 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/edit_policy.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/edit_policy.tsx @@ -5,7 +5,9 @@ */ import React, { Fragment, useEffect, useState } from 'react'; +import { RouteComponentProps } from 'react-router-dom'; import { FormattedMessage } from '@kbn/i18n/react'; + import { i18n } from '@kbn/i18n'; import { @@ -25,10 +27,9 @@ import { EuiText, EuiTitle, } from '@elastic/eui'; - import { toasts } from '../../services/notification'; -import { Phases, Policy, PolicyFromES } from '../../services/policies/types'; +import { Phases, Policy, PolicyFromES } from '../../../../common/types'; import { validatePolicy, ValidationErrors, @@ -54,7 +55,7 @@ interface Props { absolute?: boolean; } ) => string; - history: any; + history: RouteComponentProps['history']; } export const EditPolicy: React.FunctionComponent = ({ policies, diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/cold_phase.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/cold_phase.tsx index 9df6da7a88b2f..ae2858e7a84ae 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/cold_phase.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/cold_phase.tsx @@ -18,7 +18,7 @@ import { EuiTextColor, } from '@elastic/eui'; -import { ColdPhase as ColdPhaseInterface, Phases } from '../../../services/policies/types'; +import { ColdPhase as ColdPhaseInterface, Phases } from '../../../../../common/types'; import { PhaseValidationErrors } from '../../../services/policies/policy_validation'; import { diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/delete_phase.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/delete_phase.tsx index eab93777a72bd..11adebdd094bf 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/delete_phase.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/delete_phase.tsx @@ -8,7 +8,7 @@ import React, { PureComponent, Fragment } from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiDescribedFormGroup, EuiSwitch, EuiTextColor, EuiFormRow } from '@elastic/eui'; -import { DeletePhase as DeletePhaseInterface, Phases } from '../../../services/policies/types'; +import { DeletePhase as DeletePhaseInterface, Phases } from '../../../../../common/types'; import { PhaseValidationErrors } from '../../../services/policies/policy_validation'; import { diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/frozen_phase.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/frozen_phase.tsx index 782906a56a9ba..bfaf141438169 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/frozen_phase.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/frozen_phase.tsx @@ -18,7 +18,7 @@ import { EuiTextColor, } from '@elastic/eui'; -import { FrozenPhase as FrozenPhaseInterface, Phases } from '../../../services/policies/types'; +import { FrozenPhase as FrozenPhaseInterface, Phases } from '../../../../../common/types'; import { PhaseValidationErrors } from '../../../services/policies/policy_validation'; import { diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/hot_phase.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/hot_phase.tsx index 106e3b9139a9b..59949ad93fa5d 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/hot_phase.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/hot_phase.tsx @@ -18,7 +18,7 @@ import { EuiDescribedFormGroup, } from '@elastic/eui'; -import { HotPhase as HotPhaseInterface, Phases } from '../../../services/policies/types'; +import { HotPhase as HotPhaseInterface, Phases } from '../../../../../common/types'; import { PhaseValidationErrors } from '../../../services/policies/policy_validation'; import { diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/warm_phase.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/warm_phase.tsx index 2733d01ac222d..71286475bcfe9 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/warm_phase.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/warm_phase.tsx @@ -18,6 +18,8 @@ import { EuiDescribedFormGroup, } from '@elastic/eui'; +import { Phases, WarmPhase as WarmPhaseInterface } from '../../../../../common/types'; +import { PhaseValidationErrors } from '../../../services/policies/policy_validation'; import { LearnMoreLink, ActiveBadge, @@ -29,9 +31,6 @@ import { MinAgeInput, } from '../components'; -import { Phases, WarmPhase as WarmPhaseInterface } from '../../../services/policies/types'; -import { PhaseValidationErrors } from '../../../services/policies/policy_validation'; - const shrinkLabel = i18n.translate('xpack.indexLifecycleMgmt.warmPhase.shrinkIndexLabel', { defaultMessage: 'Shrink index', }); diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/add_policy_to_template_confirm_modal.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/add_policy_to_template_confirm_modal.tsx index 90ac3c03856de..265d5146b2c37 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/add_policy_to_template_confirm_modal.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/add_policy_to_template_confirm_modal.tsx @@ -20,8 +20,8 @@ import { EuiText, } from '@elastic/eui'; +import { PolicyFromES } from '../../../../../common/types'; import { LearnMoreLink } from '../../edit_policy/components'; -import { PolicyFromES } from '../../../services/policies/types'; import { addLifecyclePolicyToTemplate, loadIndexTemplates } from '../../../services/api'; import { toasts } from '../../../services/notification'; import { showApiError } from '../../../services/api_errors'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/confirm_delete.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/confirm_delete.tsx index 8d8e5ac2a2472..59e213fae846b 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/confirm_delete.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/confirm_delete.tsx @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiOverlayMask, EuiConfirmModal } from '@elastic/eui'; -import { PolicyFromES } from '../../../services/policies/types'; +import { PolicyFromES } from '../../../../../common/types'; import { toasts } from '../../../services/notification'; import { showApiError } from '../../../services/api_errors'; import { deletePolicy } from '../../../services/api'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/table_content.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/table_content.tsx index da36ff4df98f5..3481a2f0d4a2a 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/table_content.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/components/table_content.tsx @@ -34,7 +34,7 @@ import { METRIC_TYPE } from '@kbn/analytics'; import { RouteComponentProps } from 'react-router-dom'; import { reactRouterNavigate } from '../../../../../../../../src/plugins/kibana_react/public'; import { getIndexListUri } from '../../../../../../index_management/public'; -import { PolicyFromES } from '../../../services/policies/types'; +import { PolicyFromES } from '../../../../../common/types'; import { getPolicyPath } from '../../../services/navigation'; import { sortTable } from '../../../services'; import { trackUiMetric } from '../../../services/ui_metric'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/policy_table.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/policy_table.tsx index 048ab922a65b5..0c396dae75783 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/policy_table.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/policy_table/policy_table.tsx @@ -23,7 +23,7 @@ import { import { ApplicationStart } from 'kibana/public'; import { RouteComponentProps } from 'react-router-dom'; import { reactRouterNavigate } from '../../../../../../../src/plugins/kibana_react/public'; -import { PolicyFromES } from '../../services/policies/types'; +import { PolicyFromES } from '../../../../common/types'; import { filterItems } from '../../services'; import { TableContent } from './components/table_content'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/api.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/api.ts index e9365bfe06ea4..3d068433becbd 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/api.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/api.ts @@ -6,6 +6,8 @@ import { METRIC_TYPE } from '@kbn/analytics'; +import { PolicyFromES, SerializedPolicy } from '../../../common/types'; + import { UIM_POLICY_DELETE, UIM_POLICY_ATTACH_INDEX, @@ -13,10 +15,8 @@ import { UIM_POLICY_DETACH_INDEX, UIM_INDEX_RETRY_STEP, } from '../constants'; - import { trackUiMetric } from './ui_metric'; import { sendGet, sendPost, sendDelete, useRequest } from './http'; -import { PolicyFromES, SerializedPolicy } from './policies/types'; interface GenericObject { [key: string]: any; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/cold_phase.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/cold_phase.ts index 7fa82a004b872..3b71c11349752 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/cold_phase.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/cold_phase.ts @@ -5,8 +5,8 @@ */ import { isEmpty } from 'lodash'; +import { AllocateAction, ColdPhase, SerializedColdPhase } from '../../../../common/types'; import { serializedPhaseInitialization } from '../../constants'; -import { AllocateAction, ColdPhase, SerializedColdPhase } from './types'; import { isNumber, splitSizeAndUnits } from './policy_serialization'; import { numberRequiredMessage, @@ -90,7 +90,6 @@ export const coldPhaseToES = ( }; } else { if (esPhase.actions.allocate) { - // @ts-expect-error delete esPhase.actions.allocate.require; } } @@ -100,7 +99,6 @@ export const coldPhaseToES = ( esPhase.actions.allocate.number_of_replicas = parseInt(phase.selectedReplicaCount, 10); } else { if (esPhase.actions.allocate) { - // @ts-expect-error delete esPhase.actions.allocate.number_of_replicas; } } diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/delete_phase.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/delete_phase.ts index 70e7c21da8cb6..6ada039d45cd9 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/delete_phase.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/delete_phase.ts @@ -4,8 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import { DeletePhase, SerializedDeletePhase } from '../../../../common/types'; import { serializedPhaseInitialization } from '../../constants'; -import { DeletePhase, SerializedDeletePhase } from './types'; import { isNumber, splitSizeAndUnits } from './policy_serialization'; import { numberRequiredMessage, diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/frozen_phase.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/frozen_phase.ts index bad43bfcf8a9c..6249507bcb407 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/frozen_phase.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/frozen_phase.ts @@ -6,7 +6,7 @@ import { isEmpty } from 'lodash'; import { serializedPhaseInitialization } from '../../constants'; -import { AllocateAction, FrozenPhase, SerializedFrozenPhase } from './types'; +import { AllocateAction, FrozenPhase, SerializedFrozenPhase } from '../../../../common/types'; import { isNumber, splitSizeAndUnits } from './policy_serialization'; import { numberRequiredMessage, @@ -90,7 +90,6 @@ export const frozenPhaseToES = ( }; } else { if (esPhase.actions.allocate) { - // @ts-expect-error delete esPhase.actions.allocate.require; } } @@ -100,7 +99,6 @@ export const frozenPhaseToES = ( esPhase.actions.allocate.number_of_replicas = parseInt(phase.selectedReplicaCount, 10); } else { if (esPhase.actions.allocate) { - // @ts-expect-error delete esPhase.actions.allocate.number_of_replicas; } } diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/hot_phase.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/hot_phase.ts index 34ac8f3e270e6..fb7f74efeb66e 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/hot_phase.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/hot_phase.ts @@ -4,9 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ +import { HotPhase, SerializedHotPhase } from '../../../../common/types'; import { serializedPhaseInitialization } from '../../constants'; import { isNumber, splitSizeAndUnits } from './policy_serialization'; -import { HotPhase, SerializedHotPhase } from './types'; import { maximumAgeRequiredMessage, maximumDocumentsRequiredMessage, diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_save.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_save.ts index 12df071544952..a96b6f57a0f9f 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_save.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_save.ts @@ -7,12 +7,12 @@ import { i18n } from '@kbn/i18n'; import { METRIC_TYPE } from '@kbn/analytics'; +import { Policy, PolicyFromES } from '../../../../common/types'; import { savePolicy as savePolicyApi } from '../api'; import { showApiError } from '../api_errors'; import { getUiMetricsForPhases, trackUiMetric } from '../ui_metric'; -import { UIM_POLICY_CREATE, UIM_POLICY_UPDATE } from '../../constants/ui_metric'; +import { UIM_POLICY_CREATE, UIM_POLICY_UPDATE } from '../../constants'; import { toasts } from '../notification'; -import { Policy, PolicyFromES } from './types'; import { serializePolicy } from './policy_serialization'; export const savePolicy = async ( diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_serialization.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_serialization.ts index 807a6fe8ec395..31c063aba2c4a 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_serialization.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_serialization.ts @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import { Policy, PolicyFromES, SerializedPolicy } from '../../../../common/types'; + import { defaultNewColdPhase, defaultNewDeletePhase, @@ -13,8 +15,6 @@ import { serializedPhaseInitialization, } from '../../constants'; -import { Policy, PolicyFromES, SerializedPolicy } from './types'; - import { hotPhaseFromES, hotPhaseToES } from './hot_phase'; import { warmPhaseFromES, warmPhaseToES } from './warm_phase'; import { coldPhaseFromES, coldPhaseToES } from './cold_phase'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_validation.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_validation.ts index 6fdbc4babd3f3..f5197e6ffec99 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_validation.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/policy_validation.ts @@ -5,12 +5,6 @@ */ import { i18n } from '@kbn/i18n'; -import { validateHotPhase } from './hot_phase'; -import { validateWarmPhase } from './warm_phase'; -import { validateColdPhase } from './cold_phase'; -import { validateDeletePhase } from './delete_phase'; -import { validateFrozenPhase } from './frozen_phase'; - import { ColdPhase, DeletePhase, @@ -19,7 +13,12 @@ import { Policy, PolicyFromES, WarmPhase, -} from './types'; +} from '../../../../common/types'; +import { validateHotPhase } from './hot_phase'; +import { validateWarmPhase } from './warm_phase'; +import { validateColdPhase } from './cold_phase'; +import { validateDeletePhase } from './delete_phase'; +import { validateFrozenPhase } from './frozen_phase'; export const propertyof = (propertyName: keyof T & string) => propertyName; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/warm_phase.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/warm_phase.ts index c331f4ccce38f..cc815d67dbc18 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/policies/warm_phase.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/policies/warm_phase.ts @@ -5,8 +5,8 @@ */ import { isEmpty } from 'lodash'; +import { AllocateAction, WarmPhase, SerializedWarmPhase } from '../../../../common/types'; import { serializedPhaseInitialization } from '../../constants'; -import { AllocateAction, WarmPhase, SerializedWarmPhase } from './types'; import { isNumber, splitSizeAndUnits } from './policy_serialization'; import { @@ -96,7 +96,6 @@ export const warmPhaseToES = ( // An index lifecycle switches to warm phase when rollover occurs, so you cannot specify a warm phase time // They are mutually exclusive if (phase.warmPhaseOnRollover) { - // @ts-expect-error delete esPhase.min_age; } @@ -110,7 +109,6 @@ export const warmPhaseToES = ( }; } else { if (esPhase.actions.allocate) { - // @ts-expect-error delete esPhase.actions.allocate.require; } } @@ -120,7 +118,6 @@ export const warmPhaseToES = ( esPhase.actions.allocate.number_of_replicas = parseInt(phase.selectedReplicaCount, 10); } else { if (esPhase.actions.allocate) { - // @ts-expect-error delete esPhase.actions.allocate.number_of_replicas; } } diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/sort_table.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/sort_table.ts index 6b41d671b673f..509c827904232 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/sort_table.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/sort_table.ts @@ -5,7 +5,7 @@ */ import { sortBy } from 'lodash'; -import { PolicyFromES } from './policies/types'; +import { PolicyFromES } from '../../../common/types'; export const sortTable = ( array: PolicyFromES[] = [], diff --git a/x-pack/plugins/index_lifecycle_management/public/application/services/ui_metric.ts b/x-pack/plugins/index_lifecycle_management/public/application/services/ui_metric.ts index b38a734770546..aeb2c8ce917c6 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/services/ui_metric.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/services/ui_metric.ts @@ -18,9 +18,9 @@ import { defaultNewWarmPhase, } from '../constants'; -import { Phases } from './policies/types'; +import { Phases } from '../../../common/types'; -export let trackUiMetric = (metricType: UiStatsMetricType, eventName: string) => {}; +export let trackUiMetric = (metricType: UiStatsMetricType, eventName: string | string[]) => {}; export function init(usageCollection?: UsageCollectionSetup): void { if (usageCollection) { @@ -28,7 +28,7 @@ export function init(usageCollection?: UsageCollectionSetup): void { } } -export function getUiMetricsForPhases(phases: Phases): any { +export function getUiMetricsForPhases(phases: Phases): string[] { const phaseUiMetrics = [ { metric: UIM_CONFIG_COLD_PHASE, @@ -72,7 +72,7 @@ export function getUiMetricsForPhases(phases: Phases): any { }, ]; - return phaseUiMetrics.reduce((tracked: any, { metric, isTracked }) => { + return phaseUiMetrics.reduce((tracked: string[], { metric, isTracked }) => { if (isTracked()) { tracked.push(metric); } diff --git a/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/add_lifecycle_confirm_modal.tsx b/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/add_lifecycle_confirm_modal.tsx index 060b208006bf3..54b09b95c51ec 100644 --- a/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/add_lifecycle_confirm_modal.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/add_lifecycle_confirm_modal.tsx @@ -28,7 +28,7 @@ import { import { loadPolicies, addLifecyclePolicyToIndex } from '../../application/services/api'; import { showApiError } from '../../application/services/api_errors'; import { toasts } from '../../application/services/notification'; -import { Index, PolicyFromES } from '../../application/services/policies/types'; +import { Index, PolicyFromES } from '../../../common/types'; interface Props { indexName: string; diff --git a/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/index_lifecycle_summary.tsx b/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/index_lifecycle_summary.tsx index 02e4595a333bc..ce36a3650c2ff 100644 --- a/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/index_lifecycle_summary.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/index_lifecycle_summary.tsx @@ -26,7 +26,7 @@ import { import { ApplicationStart } from 'kibana/public'; import { getPolicyPath } from '../../application/services/navigation'; -import { Index, IndexLifecyclePolicy } from '../../application/services/policies/types'; +import { Index, IndexLifecyclePolicy } from '../../../common/types'; const getHeaders = (): Array<[keyof IndexLifecyclePolicy, string]> => { return [ diff --git a/x-pack/plugins/index_lifecycle_management/public/extend_index_management/index.tsx b/x-pack/plugins/index_lifecycle_management/public/extend_index_management/index.tsx index bb5642cf3a476..e36f376961794 100644 --- a/x-pack/plugins/index_lifecycle_management/public/extend_index_management/index.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/extend_index_management/index.tsx @@ -17,7 +17,7 @@ import { IndexLifecycleSummary } from './components/index_lifecycle_summary'; import { AddLifecyclePolicyConfirmModal } from './components/add_lifecycle_confirm_modal'; import { RemoveLifecyclePolicyConfirmModal } from './components/remove_lifecycle_confirm_modal'; -import { Index } from '../application/services/policies/types'; +import { Index } from '../../common/types'; const stepPath = 'ilm.step'; diff --git a/x-pack/plugins/index_lifecycle_management/server/plugin.ts b/x-pack/plugins/index_lifecycle_management/server/plugin.ts index ed17925522610..76d8539eb4a07 100644 --- a/x-pack/plugins/index_lifecycle_management/server/plugin.ts +++ b/x-pack/plugins/index_lifecycle_management/server/plugin.ts @@ -15,16 +15,21 @@ import { LegacyAPICaller, } from 'src/core/server'; +import { Index as IndexWithoutIlm } from '../../index_management/common/types'; import { PLUGIN } from '../common/constants'; +import { Index, IndexLifecyclePolicy } from '../common/types'; import { Dependencies } from './types'; import { registerApiRoutes } from './routes'; import { License } from './services'; import { IndexLifecycleManagementConfig } from './config'; import { isEsError } from './shared_imports'; -const indexLifecycleDataEnricher = async (indicesList: any, callAsCurrentUser: LegacyAPICaller) => { +const indexLifecycleDataEnricher = async ( + indicesList: IndexWithoutIlm[], + callAsCurrentUser: LegacyAPICaller +): Promise => { if (!indicesList || !indicesList.length) { - return; + return []; } const params = { @@ -32,9 +37,11 @@ const indexLifecycleDataEnricher = async (indicesList: any, callAsCurrentUser: L method: 'GET', }; - const { indices: ilmIndicesData } = await callAsCurrentUser('transport.request', params); + const { indices: ilmIndicesData } = await callAsCurrentUser<{ + indices: { [indexName: string]: IndexLifecyclePolicy }; + }>('transport.request', params); - return indicesList.map((index: any): any => { + return indicesList.map((index: IndexWithoutIlm) => { return { ...index, ilm: { ...(ilmIndicesData[index.name] || {}) }, diff --git a/x-pack/plugins/index_lifecycle_management/server/routes/api/policies/register_fetch_route.ts b/x-pack/plugins/index_lifecycle_management/server/routes/api/policies/register_fetch_route.ts index 2dc1ed1006adb..4fb21ea8c6a62 100644 --- a/x-pack/plugins/index_lifecycle_management/server/routes/api/policies/register_fetch_route.ts +++ b/x-pack/plugins/index_lifecycle_management/server/routes/api/policies/register_fetch_route.ts @@ -7,15 +7,21 @@ import { schema } from '@kbn/config-schema'; import { LegacyAPICaller } from 'src/core/server'; +import { IndexLifecyclePolicy, PolicyFromES } from '../../../../common/types'; import { RouteDependencies } from '../../../types'; import { addBasePath } from '../../../services'; -function formatPolicies(policiesMap: any): any { +type PoliciesMap = { + [K: string]: Omit; +} & { + status?: number; +}; +function formatPolicies(policiesMap: PoliciesMap): PolicyFromES[] { if (policiesMap.status === 404) { return []; } - return Object.keys(policiesMap).reduce((accum: any[], lifecycleName: string) => { + return Object.keys(policiesMap).reduce((accum: PolicyFromES[], lifecycleName: string) => { const policyEntry = policiesMap[lifecycleName]; accum.push({ ...policyEntry, @@ -25,7 +31,7 @@ function formatPolicies(policiesMap: any): any { }, []); } -async function fetchPolicies(callAsCurrentUser: LegacyAPICaller): Promise { +async function fetchPolicies(callAsCurrentUser: LegacyAPICaller): Promise { const params = { method: 'GET', path: '/_ilm/policy', @@ -36,7 +42,7 @@ async function fetchPolicies(callAsCurrentUser: LegacyAPICaller): Promise { return await callAsCurrentUser('transport.request', params); } -async function addLinkedIndices(callAsCurrentUser: LegacyAPICaller, policiesMap: any) { +async function addLinkedIndices(callAsCurrentUser: LegacyAPICaller, policiesMap: PoliciesMap) { if (policiesMap.status === 404) { return policiesMap; } @@ -47,11 +53,13 @@ async function addLinkedIndices(callAsCurrentUser: LegacyAPICaller, policiesMap: ignore: [404], }; - const policyExplanation: any = await callAsCurrentUser('transport.request', params); - Object.entries(policyExplanation.indices).forEach(([indexName, { policy }]: [string, any]) => { + const policyExplanation: { + indices: { [indexName: string]: IndexLifecyclePolicy }; + } = await callAsCurrentUser('transport.request', params); + Object.entries(policyExplanation.indices).forEach(([indexName, { policy }]) => { if (policy && policiesMap[policy]) { policiesMap[policy].linkedIndices = policiesMap[policy].linkedIndices || []; - policiesMap[policy].linkedIndices.push(indexName); + policiesMap[policy].linkedIndices!.push(indexName); } }); } diff --git a/x-pack/plugins/index_lifecycle_management/server/routes/api/templates/register_add_policy_route.ts b/x-pack/plugins/index_lifecycle_management/server/routes/api/templates/register_add_policy_route.ts index 21a389b9a0e35..c11d981b33dfe 100644 --- a/x-pack/plugins/index_lifecycle_management/server/routes/api/templates/register_add_policy_route.ts +++ b/x-pack/plugins/index_lifecycle_management/server/routes/api/templates/register_add_policy_route.ts @@ -8,13 +8,14 @@ import { merge } from 'lodash'; import { schema } from '@kbn/config-schema'; import { LegacyAPICaller } from 'src/core/server'; +import { LegacyTemplateSerialized } from '../../../../../index_management/server'; import { RouteDependencies } from '../../../types'; import { addBasePath } from '../../../services'; async function getIndexTemplate( callAsCurrentUser: LegacyAPICaller, templateName: string -): Promise { +): Promise { const response = await callAsCurrentUser('indices.getTemplate', { name: templateName }); return response[templateName]; } diff --git a/x-pack/plugins/index_lifecycle_management/server/routes/api/templates/register_fetch_route.ts b/x-pack/plugins/index_lifecycle_management/server/routes/api/templates/register_fetch_route.ts index c8d02783864e1..afbee246af0d9 100644 --- a/x-pack/plugins/index_lifecycle_management/server/routes/api/templates/register_fetch_route.ts +++ b/x-pack/plugins/index_lifecycle_management/server/routes/api/templates/register_fetch_route.ts @@ -5,6 +5,7 @@ */ import { LegacyAPICaller } from 'src/core/server'; +import { LegacyTemplateSerialized } from '../../../../../index_management/server'; import { RouteDependencies } from '../../../types'; import { addBasePath } from '../../../services'; @@ -27,7 +28,9 @@ function isReservedSystemTemplate(templateName: string, indexPatterns: string[]) ); } -function filterAndFormatTemplates(templates: any): any { +function filterAndFormatTemplates(templates: { + [templateName: string]: LegacyTemplateSerialized; +}): Array<{}> { const formattedTemplates = []; const templateNames = Object.keys(templates); for (const templateName of templateNames) { @@ -38,10 +41,10 @@ function filterAndFormatTemplates(templates: any): any { } const formattedTemplate = { index_lifecycle_name: - settings.index && settings.index.lifecycle ? settings.index.lifecycle.name : undefined, + settings!.index && settings!.index.lifecycle ? settings!.index.lifecycle.name : undefined, index_patterns, allocation_rules: - settings.index && settings.index.routing ? settings.index.routing : undefined, + settings!.index && settings!.index.routing ? settings!.index.routing : undefined, settings, name: templateName, }; @@ -50,7 +53,9 @@ function filterAndFormatTemplates(templates: any): any { return formattedTemplates; } -async function fetchTemplates(callAsCurrentUser: LegacyAPICaller): Promise { +async function fetchTemplates( + callAsCurrentUser: LegacyAPICaller +): Promise<{ [templateName: string]: LegacyTemplateSerialized }> { const params = { method: 'GET', path: '/_template', diff --git a/x-pack/plugins/index_management/common/types/indices.ts b/x-pack/plugins/index_management/common/types/indices.ts index 354e4fe67cd19..6e471047ffc20 100644 --- a/x-pack/plugins/index_management/common/types/indices.ts +++ b/x-pack/plugins/index_management/common/types/indices.ts @@ -15,6 +15,14 @@ interface IndexModule { number_of_replicas: number; auto_expand_replicas: false | string; lifecycle: LifecycleModule; + routing: { + allocation: { + enable: 'all' | 'primaries' | 'new_primaries' | 'none'; + }; + rebalance: { + enable: 'all' | 'primaries' | 'replicas' | 'none'; + }; + }; } interface AnalysisModule { diff --git a/x-pack/plugins/index_management/server/index.ts b/x-pack/plugins/index_management/server/index.ts index bf52d8a09c84c..b8d9124b4135a 100644 --- a/x-pack/plugins/index_management/server/index.ts +++ b/x-pack/plugins/index_management/server/index.ts @@ -18,5 +18,5 @@ export const config = { /** @public */ export { Dependencies } from './types'; export { IndexManagementPluginSetup } from './plugin'; -export { Index } from '../common'; +export { Index, LegacyTemplateSerialized } from '../common'; export { IndexManagementConfig } from './config'; From 992f5cc86c14c0359c498a8660998effb54ab57f Mon Sep 17 00:00:00 2001 From: Ahmad Bamieh Date: Mon, 7 Sep 2020 17:28:01 +0300 Subject: [PATCH 09/58] [telemetry] expose getIsOptedIn function in plugin start contract (#75143) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Alejandro Fernández Haro --- src/plugins/telemetry/README.md | 58 ++++++++++++++++++++++++ src/plugins/telemetry/server/index.ts | 2 +- src/plugins/telemetry/server/mocks.ts | 46 +++++++++++++++++++ src/plugins/telemetry/server/plugin.ts | 62 +++++++++++++++++++++++--- 4 files changed, 161 insertions(+), 7 deletions(-) create mode 100644 src/plugins/telemetry/server/mocks.ts diff --git a/src/plugins/telemetry/README.md b/src/plugins/telemetry/README.md index 196d596fb784f..0a05facfbbe0f 100644 --- a/src/plugins/telemetry/README.md +++ b/src/plugins/telemetry/README.md @@ -7,3 +7,61 @@ Telemetry allows Kibana features to have usage tracked in the wild. The general 3. Viewing usage data in the Kibana instance of the telemetry cluster (Viewing). This plugin is responsible for sending usage data to the telemetry cluster. For collecting usage data, use the [`usageCollection` plugin](../usage_collection/README.md) + +## Telemetry Plugin public API + +### Setup + +The `setup` function exposes the following interface: + +- `getTelemetryUrl: () => Promise`: + An async function that resolves into the telemetry Url used to send telemetry. The url is wrapped with node's [URL constructor](https://nodejs.org/api/url.html). Here is an example on how to grab the url origin: + ``` + const telemetryUrl = await getTelemetryUrl(); + > telemetryUrl.origin; // 'https://telemetry.elastic.co' + ``` + Note that the telemetry URL is a kibana.yml configuration hence it is recommended to call the `getTelemetryUrl` everytime before using the actual url. + +### Start + +The `start` function exposes the following interface: + +- `async getIsOptedIn(): Promise`: + An async function that resolves into `true` if the user has opted into send Elastic usage data. + Resolves to `false` if the user explicitly opted out of sending usage data to Elastic or did not choose + to opt-in or out yet after a minor or major upgrade (only when previously opted out). + +### Usage + +To use the exposed plugin start and setup contracts: + +1. Make sure `telemetry` is in your `optionalPlugins` in the `kibana.json` file: + +```json5 +// /kibana.json +{ +"id": "...", +"optionalPlugins": ["telemetry"] +} +``` + +2. Use the exposed contracts: +```ts +// /server/plugin.ts + +import { TelemetryPluginsStart } from '../telemetry/server`; + +interface MyPlyginStartDeps { + telemetry?: TelemetryPluginsStart; +} + +class MyPlugin { + public async start( + core: CoreStart, + { telemetry }: MyPlyginStartDeps + ) { + const isOptedIn = await telemetry?.getIsOptedIn(); + ... + } +} +``` diff --git a/src/plugins/telemetry/server/index.ts b/src/plugins/telemetry/server/index.ts index 42259d2e5187c..e9887456e2f36 100644 --- a/src/plugins/telemetry/server/index.ts +++ b/src/plugins/telemetry/server/index.ts @@ -24,7 +24,7 @@ import { configSchema, TelemetryConfigType } from './config'; export { FetcherTask } from './fetcher'; export { handleOldSettings } from './handle_old_settings'; -export { TelemetryPluginsSetup } from './plugin'; +export { TelemetryPluginSetup, TelemetryPluginStart } from './plugin'; export const config: PluginConfigDescriptor = { schema: configSchema, diff --git a/src/plugins/telemetry/server/mocks.ts b/src/plugins/telemetry/server/mocks.ts new file mode 100644 index 0000000000000..8952dd619f426 --- /dev/null +++ b/src/plugins/telemetry/server/mocks.ts @@ -0,0 +1,46 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { URL } from 'url'; +import { TelemetryPluginStart, TelemetryPluginSetup } from './plugin'; + +export type Setup = jest.Mocked; +export type Start = jest.Mocked; + +export const telemetryPluginMock = { + createSetupContract, + createStartContract, +}; + +function createSetupContract(): Setup { + const telemetryUrl = new URL('https://telemetry-staging.elastic.co/xpack/MOCK_URL/send'); + const setupContract: Setup = { + getTelemetryUrl: jest.fn().mockResolvedValue(telemetryUrl), + }; + + return setupContract; +} + +function createStartContract(): Start { + const startContract: Start = { + getIsOptedIn: jest.fn(), + }; + + return startContract; +} diff --git a/src/plugins/telemetry/server/plugin.ts b/src/plugins/telemetry/server/plugin.ts index bd7a2a8c1a8ca..005c5f96d98d0 100644 --- a/src/plugins/telemetry/server/plugin.ts +++ b/src/plugins/telemetry/server/plugin.ts @@ -17,12 +17,14 @@ * under the License. */ +import { URL } from 'url'; import { Observable } from 'rxjs'; import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; import { TelemetryCollectionManagerPluginSetup, TelemetryCollectionManagerPluginStart, } from 'src/plugins/telemetry_collection_manager/server'; +import { take } from 'rxjs/operators'; import { CoreSetup, PluginInitializerContext, @@ -42,19 +44,38 @@ import { import { TelemetryConfigType } from './config'; import { FetcherTask } from './fetcher'; import { handleOldSettings } from './handle_old_settings'; +import { getTelemetrySavedObject } from './telemetry_repository'; +import { getTelemetryOptIn } from '../common/telemetry_config'; -export interface TelemetryPluginsSetup { +interface TelemetryPluginsDepsSetup { usageCollection: UsageCollectionSetup; telemetryCollectionManager: TelemetryCollectionManagerPluginSetup; } -export interface TelemetryPluginsStart { +interface TelemetryPluginsDepsStart { telemetryCollectionManager: TelemetryCollectionManagerPluginStart; } +export interface TelemetryPluginSetup { + /** + * Resolves into the telemetry Url used to send telemetry. + * The url is wrapped with node's [URL constructor](https://nodejs.org/api/url.html). + */ + getTelemetryUrl: () => Promise; +} + +export interface TelemetryPluginStart { + /** + * Resolves `true` if the user has opted into send Elastic usage data. + * Resolves `false` if the user explicitly opted out of sending usage data to Elastic + * or did not choose to opt-in or out -yet- after a minor or major upgrade (only when previously opted-out). + */ + getIsOptedIn: () => Promise; +} + type SavedObjectsRegisterType = CoreSetup['savedObjects']['registerType']; -export class TelemetryPlugin implements Plugin { +export class TelemetryPlugin implements Plugin { private readonly logger: Logger; private readonly currentKibanaVersion: string; private readonly config$: Observable; @@ -76,8 +97,8 @@ export class TelemetryPlugin implements Plugin { public async setup( { elasticsearch, http, savedObjects }: CoreSetup, - { usageCollection, telemetryCollectionManager }: TelemetryPluginsSetup - ) { + { usageCollection, telemetryCollectionManager }: TelemetryPluginsDepsSetup + ): Promise { const currentKibanaVersion = this.currentKibanaVersion; const config$ = this.config$; const isDev = this.isDev; @@ -96,9 +117,19 @@ export class TelemetryPlugin implements Plugin { this.registerMappings((opts) => savedObjects.registerType(opts)); this.registerUsageCollectors(usageCollection); + + return { + getTelemetryUrl: async () => { + const config = await config$.pipe(take(1)).toPromise(); + return new URL(config.url); + }, + }; } - public async start(core: CoreStart, { telemetryCollectionManager }: TelemetryPluginsStart) { + public async start( + core: CoreStart, + { telemetryCollectionManager }: TelemetryPluginsDepsStart + ): Promise { const { savedObjects, uiSettings } = core; this.savedObjectsClient = savedObjects.createInternalRepository(); const savedObjectsClient = new SavedObjectsClient(this.savedObjectsClient); @@ -111,6 +142,25 @@ export class TelemetryPlugin implements Plugin { } this.fetcherTask.start(core, { telemetryCollectionManager }); + + return { + getIsOptedIn: async () => { + const internalRepository = new SavedObjectsClient(savedObjects.createInternalRepository()); + const telemetrySavedObject = await getTelemetrySavedObject(internalRepository!); + const config = await this.config$.pipe(take(1)).toPromise(); + const allowChangingOptInStatus = config.allowChangingOptInStatus; + const configTelemetryOptIn = typeof config.optIn === 'undefined' ? null : config.optIn; + const currentKibanaVersion = this.currentKibanaVersion; + const isOptedIn = getTelemetryOptIn({ + currentKibanaVersion, + telemetrySavedObject, + allowChangingOptInStatus, + configTelemetryOptIn, + }); + + return isOptedIn === true; + }, + }; } private registerMappings(registerType: SavedObjectsRegisterType) { From 478800522769688e53159f6c986caf02e9dd8394 Mon Sep 17 00:00:00 2001 From: Uladzislau Lasitsa Date: Mon, 7 Sep 2020 18:05:31 +0300 Subject: [PATCH 10/58] Use Search API in Timelion (sync) (#75115) * New Search API for timelion * Using timeout from config * Use only es strategy) * Fixed remarks * Fixed tests * Fixed fixtures * Fixed ci * Fixed typecheck * Fixed eslint * Fixed remarks * Fix changes Co-authored-by: Elastic Machine --- ...-plugins-data-server.es_search_strategy.md | 11 +++++ ...plugin-plugins-data-server.isearchstart.md | 2 +- ...plugins-data-server.isearchstart.search.md | 2 +- .../kibana-plugin-plugins-data-server.md | 1 + src/plugins/data/server/index.ts | 1 + .../data/server/search/routes/search.test.ts | 19 ++++++- src/plugins/data/server/search/types.ts | 6 +-- src/plugins/data/server/server.api.md | 33 +++++++------ .../vis_type_timelion/server/plugin.ts | 8 ++- .../vis_type_timelion/server/routes/run.ts | 7 ++- .../server/routes/validate_es.ts | 40 ++++++++------- .../server/series_functions/es/es.test.js | 49 ++++++++++--------- .../server/series_functions/es/index.js | 13 +++-- .../series_functions/es/lib/build_request.js | 4 +- .../series_functions/fixtures/tl_config.js | 14 ++++-- 15 files changed, 136 insertions(+), 74 deletions(-) create mode 100644 docs/development/plugins/data/server/kibana-plugin-plugins-data-server.es_search_strategy.md diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.es_search_strategy.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.es_search_strategy.md new file mode 100644 index 0000000000000..8fac5cf4d7a9e --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.es_search_strategy.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [ES\_SEARCH\_STRATEGY](./kibana-plugin-plugins-data-server.es_search_strategy.md) + +## ES\_SEARCH\_STRATEGY variable + +Signature: + +```typescript +ES_SEARCH_STRATEGY = "es" +``` diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md index 62d954cb80eb7..577532d22b3d3 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md @@ -16,5 +16,5 @@ export interface ISearchStartAggsStart | | | [getSearchStrategy](./kibana-plugin-plugins-data-server.isearchstart.getsearchstrategy.md) | (name: string) => ISearchStrategy<SearchStrategyRequest, SearchStrategyResponse> | Get other registered search strategies. For example, if a new strategy needs to use the already-registered ES search strategy, it can use this function to accomplish that. | -| [search](./kibana-plugin-plugins-data-server.isearchstart.search.md) | (context: RequestHandlerContext, request: IKibanaSearchRequest, options: ISearchOptions) => Promise<IKibanaSearchResponse> | | +| [search](./kibana-plugin-plugins-data-server.isearchstart.search.md) | (context: RequestHandlerContext, request: IEsSearchRequest, options: ISearchOptions) => Promise<IEsSearchResponse> | | diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.search.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.search.md index 1c2ae91699559..33ca818afc769 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.search.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.search.md @@ -7,5 +7,5 @@ Signature: ```typescript -search: (context: RequestHandlerContext, request: IKibanaSearchRequest, options: ISearchOptions) => Promise; +search: (context: RequestHandlerContext, request: IEsSearchRequest, options: ISearchOptions) => Promise; ``` diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md index 0292e08063fbb..70c32adeab9fd 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md @@ -71,6 +71,7 @@ | [AggGroupNames](./kibana-plugin-plugins-data-server.agggroupnames.md) | | | [castEsToKbnFieldTypeName](./kibana-plugin-plugins-data-server.castestokbnfieldtypename.md) | Get the KbnFieldType name for an esType string | | [config](./kibana-plugin-plugins-data-server.config.md) | | +| [ES\_SEARCH\_STRATEGY](./kibana-plugin-plugins-data-server.es_search_strategy.md) | | | [esFilters](./kibana-plugin-plugins-data-server.esfilters.md) | | | [esKuery](./kibana-plugin-plugins-data-server.eskuery.md) | | | [esQuery](./kibana-plugin-plugins-data-server.esquery.md) | | diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts index f300fb0779e38..71ed83290e697 100644 --- a/src/plugins/data/server/index.ts +++ b/src/plugins/data/server/index.ts @@ -201,6 +201,7 @@ export { ISearchOptions, IEsSearchRequest, IEsSearchResponse, + ES_SEARCH_STRATEGY, // tabify TabbedAggColumn, TabbedAggRow, diff --git a/src/plugins/data/server/search/routes/search.test.ts b/src/plugins/data/server/search/routes/search.test.ts index e2518acd7d505..d4404c318ab47 100644 --- a/src/plugins/data/server/search/routes/search.test.ts +++ b/src/plugins/data/server/search/routes/search.test.ts @@ -48,7 +48,24 @@ describe('Search service', () => { }); it('handler calls context.search.search with the given request and strategy', async () => { - const response = { id: 'yay' }; + const response = { + id: 'yay', + rawResponse: { + took: 100, + timed_out: true, + _shards: { + total: 0, + successful: 0, + failed: 0, + skipped: 0, + }, + hits: { + total: 0, + max_score: 0, + hits: [], + }, + }, + }; mockDataStart.search.search.mockResolvedValue(response); const mockContext = {}; const mockBody = { id: undefined, params: {} }; diff --git a/src/plugins/data/server/search/types.ts b/src/plugins/data/server/search/types.ts index 6ce8430d0573b..b2b958454de48 100644 --- a/src/plugins/data/server/search/types.ts +++ b/src/plugins/data/server/search/types.ts @@ -18,7 +18,7 @@ */ import { RequestHandlerContext } from '../../../../core/server'; -import { IKibanaSearchResponse, IKibanaSearchRequest, ISearchOptions } from '../../common/search'; +import { ISearchOptions } from '../../common/search'; import { AggsSetup, AggsStart } from './aggs'; import { SearchUsage } from './collectors/usage'; import { IEsSearchRequest, IEsSearchResponse } from './es_search'; @@ -66,9 +66,9 @@ export interface ISearchStart< ) => ISearchStrategy; search: ( context: RequestHandlerContext, - request: IKibanaSearchRequest, + request: IEsSearchRequest, options: ISearchOptions - ) => Promise; + ) => Promise; } /** diff --git a/src/plugins/data/server/server.api.md b/src/plugins/data/server/server.api.md index 93f924493c3b4..a4f5f590e1774 100644 --- a/src/plugins/data/server/server.api.md +++ b/src/plugins/data/server/server.api.md @@ -323,6 +323,11 @@ export enum ES_FIELD_TYPES { _TYPE = "_type" } +// Warning: (ae-missing-release-tag) "ES_SEARCH_STRATEGY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const ES_SEARCH_STRATEGY = "es"; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionDefinition" needs to be exported by the entry point index.d.ts // Warning: (ae-forgotten-export) The symbol "Input" needs to be exported by the entry point index.d.ts // Warning: (ae-forgotten-export) The symbol "Arguments" needs to be exported by the entry point index.d.ts @@ -710,7 +715,7 @@ export interface ISearchStart Promise; + search: (context: RequestHandlerContext, request: IEsSearchRequest, options: ISearchOptions) => Promise; } // Warning: (ae-missing-release-tag) "ISearchStrategy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -1086,19 +1091,19 @@ export function usageProvider(core: CoreSetup_2): SearchUsage; // src/plugins/data/server/index.ts:101:26 - (ae-forgotten-export) The symbol "TruncateFormat" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index.ts:127:27 - (ae-forgotten-export) The symbol "isFilterable" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index.ts:127:27 - (ae-forgotten-export) The symbol "isNestedField" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:221:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:221:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:221:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:221:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:223:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:224:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:233:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:234:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:235:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:239:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:240:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:244:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:247:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:224:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:225:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:234:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:235:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:236:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:240:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:241:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:245:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:248:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts // src/plugins/data/server/plugin.ts:88:66 - (ae-forgotten-export) The symbol "DataEnhancements" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/src/plugins/vis_type_timelion/server/plugin.ts b/src/plugins/vis_type_timelion/server/plugin.ts index 5e6557e305692..52c50b0646299 100644 --- a/src/plugins/vis_type_timelion/server/plugin.ts +++ b/src/plugins/vis_type_timelion/server/plugin.ts @@ -22,6 +22,7 @@ import { first } from 'rxjs/operators'; import { TypeOf, schema } from '@kbn/config-schema'; import { RecursiveReadonly } from '@kbn/utility-types'; +import { PluginStart } from '../../../../src/plugins/data/server'; import { CoreSetup, PluginInitializerContext } from '../../../../src/core/server'; import { deepFreeze } from '../../../../src/core/server'; import { configSchema } from '../config'; @@ -42,6 +43,10 @@ export interface PluginSetupContract { uiEnabled: boolean; } +export interface TimelionPluginStartDeps { + data: PluginStart; +} + /** * Represents Timelion Plugin instance that will be managed by the Kibana plugin system. */ @@ -80,11 +85,12 @@ export class Plugin { functions, getFunction, logger, + core, }; functionsRoute(router, deps); runRoute(router, deps); - validateEsRoute(router); + validateEsRoute(router, core); core.uiSettings.register({ 'timelion:es.timefield': { diff --git a/src/plugins/vis_type_timelion/server/routes/run.ts b/src/plugins/vis_type_timelion/server/routes/run.ts index b8cefc8a07f28..19bb5238f9de0 100644 --- a/src/plugins/vis_type_timelion/server/routes/run.ts +++ b/src/plugins/vis_type_timelion/server/routes/run.ts @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { IRouter, Logger } from 'kibana/server'; +import { IRouter, Logger, CoreSetup } from 'kibana/server'; import { schema } from '@kbn/config-schema'; import Bluebird from 'bluebird'; import _ from 'lodash'; @@ -37,10 +37,12 @@ export function runRoute( logger, getFunction, configManager, + core, }: { logger: Logger; getFunction: (name: string) => TimelionFunctionInterface; configManager: ConfigManager; + core: CoreSetup; } ) { router.post( @@ -81,13 +83,14 @@ export function runRoute( const uiSettings = await context.core.uiSettings.client.getAll(); const tlConfig = getTlConfig({ + context, request, settings: _.defaults(uiSettings, timelionDefaults), // Just in case they delete some setting. getFunction, + getStartServices: core.getStartServices, allowedGraphiteUrls: configManager.getGraphiteUrls(), esShardTimeout: configManager.getEsShardTimeout(), savedObjectsClient: context.core.savedObjects.client, - esDataClient: () => context.core.elasticsearch.legacy.client, }); const chainRunner = chainRunnerFn(tlConfig); const sheet = await Bluebird.all(chainRunner.processRequest(request.body)); diff --git a/src/plugins/vis_type_timelion/server/routes/validate_es.ts b/src/plugins/vis_type_timelion/server/routes/validate_es.ts index d5ce80dc151a2..ea08310499a96 100644 --- a/src/plugins/vis_type_timelion/server/routes/validate_es.ts +++ b/src/plugins/vis_type_timelion/server/routes/validate_es.ts @@ -18,9 +18,11 @@ */ import _ from 'lodash'; -import { IRouter } from 'kibana/server'; +import { IRouter, CoreSetup } from 'kibana/server'; +import { ES_SEARCH_STRATEGY } from '../../../data/server'; +import { TimelionPluginStartDeps } from '../plugin'; -export function validateEsRoute(router: IRouter) { +export function validateEsRoute(router: IRouter, core: CoreSetup) { router.get( { path: '/api/timelion/validate/es', @@ -28,33 +30,37 @@ export function validateEsRoute(router: IRouter) { }, async function (context, request, response) { const uiSettings = await context.core.uiSettings.client.getAll(); - - const { callAsCurrentUser } = context.core.elasticsearch.legacy.client; + const deps = (await core.getStartServices())[1] as TimelionPluginStartDeps; const timefield = uiSettings['timelion:es.timefield']; const body = { - index: uiSettings['es.default_index'], - body: { - aggs: { - maxAgg: { - max: { - field: timefield, + params: { + index: uiSettings['es.default_index'], + body: { + aggs: { + maxAgg: { + max: { + field: timefield, + }, }, - }, - minAgg: { - min: { - field: timefield, + minAgg: { + min: { + field: timefield, + }, }, }, + size: 0, }, - size: 0, }, }; - let resp = {}; + let resp; try { - resp = await callAsCurrentUser('search', body); + resp = await deps.data.search.search(context, body, { + strategy: ES_SEARCH_STRATEGY, + }); + resp = resp.rawResponse; } catch (errResp) { resp = errResp; } diff --git a/src/plugins/vis_type_timelion/server/series_functions/es/es.test.js b/src/plugins/vis_type_timelion/server/series_functions/es/es.test.js index a624ff72ead69..4b5aab85cfc4e 100644 --- a/src/plugins/vis_type_timelion/server/series_functions/es/es.test.js +++ b/src/plugins/vis_type_timelion/server/series_functions/es/es.test.js @@ -25,7 +25,6 @@ import buildRequest from './lib/build_request'; import createDateAgg from './lib/create_date_agg'; import esResponse from '../fixtures/es_response'; -import Bluebird from 'bluebird'; import _ from 'lodash'; import { expect } from 'chai'; import sinon from 'sinon'; @@ -34,14 +33,14 @@ import { UI_SETTINGS } from '../../../../data/server'; function stubRequestAndServer(response, indexPatternSavedObjects = []) { return { - esDataClient: sinon.stub().returns({ - callAsCurrentUser: function () { - return Bluebird.resolve(response); - }, - }), + getStartServices: sinon + .stub() + .returns( + Promise.resolve([{}, { data: { search: { search: () => Promise.resolve(response) } } }]) + ), savedObjectsClient: { find: function () { - return Bluebird.resolve({ + return Promise.resolve({ saved_objects: indexPatternSavedObjects, }); }, @@ -55,7 +54,9 @@ describe('es', () => { describe('seriesList processor', () => { it('throws an error then the index is missing', () => { tlConfig = stubRequestAndServer({ - _shards: { total: 0 }, + rawResponse: { + _shards: { total: 0 }, + }, }); return invoke(es, [5], tlConfig) .then(expect.fail) @@ -65,7 +66,7 @@ describe('es', () => { }); it('returns a seriesList', () => { - tlConfig = stubRequestAndServer(esResponse); + tlConfig = stubRequestAndServer({ rawResponse: esResponse }); return invoke(es, [5], tlConfig).then((r) => { expect(r.output.type).to.eql('seriesList'); }); @@ -168,22 +169,22 @@ describe('es', () => { config.index = 'beer'; const request = fn(config, tlConfig, emptyScriptedFields); - expect(request.index).to.equal('beer'); + expect(request.params.index).to.equal('beer'); }); it('always sets body.size to 0', () => { const request = fn(config, tlConfig, emptyScriptedFields); - expect(request.body.size).to.equal(0); + expect(request.params.body.size).to.equal(0); }); it('creates a filters agg that contains each of the queries passed', () => { config.q = ['foo', 'bar']; const request = fn(config, tlConfig, emptyScriptedFields); - expect(request.body.aggs.q.meta.type).to.equal('split'); + expect(request.params.body.aggs.q.meta.type).to.equal('split'); - const filters = request.body.aggs.q.filters.filters; + const filters = request.params.body.aggs.q.filters.filters; expect(filters.foo.query_string.query).to.eql('foo'); expect(filters.bar.query_string.query).to.eql('bar'); }); @@ -193,14 +194,14 @@ describe('es', () => { config.index = 'beer'; const request = fn(config, tlConfig, emptyScriptedFields, 30000); - expect(request.timeout).to.equal('30000ms'); + expect(request.params.timeout).to.equal('30000ms'); }); it('sets no timeout if elasticsearch.shardTimeout is set to 0', () => { config.index = 'beer'; const request = fn(config, tlConfig, emptyScriptedFields, 0); - expect(request).to.not.have.property('timeout'); + expect(request.params).to.not.have.property('timeout'); }); }); @@ -220,7 +221,7 @@ describe('es', () => { tlConfig.settings[UI_SETTINGS.SEARCH_INCLUDE_FROZEN] = false; const request = fn(config, tlConfig, emptyScriptedFields); - expect(request.ignore_throttled).to.equal(true); + expect(request.params.ignore_throttled).to.equal(true); }); it('sets no timeout if elasticsearch.shardTimeout is set to 0', () => { @@ -228,7 +229,7 @@ describe('es', () => { config.index = 'beer'; const request = fn(config, tlConfig, emptyScriptedFields); - expect(request.ignore_throttled).to.equal(false); + expect(request.params.ignore_throttled).to.equal(false); }); }); @@ -262,7 +263,7 @@ describe('es', () => { it('adds the contents of body.extended.es.filter to a filter clause of the bool', () => { config.kibana = true; const request = fn(config, tlConfig, emptyScriptedFields); - const filter = request.body.query.bool.filter.bool; + const filter = request.params.body.query.bool.filter.bool; expect(filter.must.length).to.eql(1); expect(filter.must_not.length).to.eql(2); }); @@ -270,13 +271,13 @@ describe('es', () => { it('does not include filters if config.kibana = false', () => { config.kibana = false; const request = fn(config, tlConfig, emptyScriptedFields); - expect(request.body.query.bool.filter).to.eql(undefined); + expect(request.params.body.query.bool.filter).to.eql(undefined); }); it('adds a time filter to the bool querys must clause', () => { let request = fn(config, tlConfig, emptyScriptedFields); - expect(request.body.query.bool.must.length).to.eql(1); - expect(request.body.query.bool.must[0]).to.eql({ + expect(request.params.body.query.bool.must.length).to.eql(1); + expect(request.params.body.query.bool.must[0]).to.eql({ range: { '@timestamp': { format: 'strict_date_optional_time', @@ -288,7 +289,7 @@ describe('es', () => { config.kibana = true; request = fn(config, tlConfig, emptyScriptedFields); - expect(request.body.query.bool.must.length).to.eql(1); + expect(request.params.body.query.bool.must.length).to.eql(1); }); }); @@ -297,7 +298,7 @@ describe('es', () => { config.split = ['beer:5', 'wine:10']; const request = fn(config, tlConfig, emptyScriptedFields); - const aggs = request.body.aggs.q.aggs; + const aggs = request.params.body.aggs.q.aggs; expect(aggs.beer.meta.type).to.eql('split'); expect(aggs.beer.terms.field).to.eql('beer'); @@ -324,7 +325,7 @@ describe('es', () => { ]; const request = fn(config, tlConfig, scriptedFields); - const aggs = request.body.aggs.q.aggs; + const aggs = request.params.body.aggs.q.aggs; expect(aggs.scriptedBeer.meta.type).to.eql('split'); expect(aggs.scriptedBeer.terms.script).to.eql({ diff --git a/src/plugins/vis_type_timelion/server/series_functions/es/index.js b/src/plugins/vis_type_timelion/server/series_functions/es/index.js index fd392f599c1d2..bfa8d75900d11 100644 --- a/src/plugins/vis_type_timelion/server/series_functions/es/index.js +++ b/src/plugins/vis_type_timelion/server/series_functions/es/index.js @@ -19,6 +19,7 @@ import { i18n } from '@kbn/i18n'; import _ from 'lodash'; +import { ES_SEARCH_STRATEGY } from '../../../../data/server'; import Datasource from '../../lib/classes/datasource'; import buildRequest from './lib/build_request'; import toSeriesList from './lib/agg_response_to_series_list'; @@ -129,9 +130,13 @@ export default new Datasource('es', { const body = buildRequest(config, tlConfig, scriptedFields, esShardTimeout); - const { callAsCurrentUser: callWithRequest } = tlConfig.esDataClient(); - const resp = await callWithRequest('search', body); - if (!resp._shards.total) { + const deps = (await tlConfig.getStartServices())[1]; + + const resp = await deps.data.search.search(tlConfig.context, body, { + strategy: ES_SEARCH_STRATEGY, + }); + + if (!resp.rawResponse._shards.total) { throw new Error( i18n.translate('timelion.serverSideErrors.esFunction.indexNotFoundErrorMessage', { defaultMessage: 'Elasticsearch index not found: {index}', @@ -143,7 +148,7 @@ export default new Datasource('es', { } return { type: 'seriesList', - list: toSeriesList(resp.aggregations, config), + list: toSeriesList(resp.rawResponse.aggregations, config), }; }, }); diff --git a/src/plugins/vis_type_timelion/server/series_functions/es/lib/build_request.js b/src/plugins/vis_type_timelion/server/series_functions/es/lib/build_request.js index e407636c41567..a8a7be6fd8609 100644 --- a/src/plugins/vis_type_timelion/server/series_functions/es/lib/build_request.js +++ b/src/plugins/vis_type_timelion/server/series_functions/es/lib/build_request.js @@ -93,5 +93,7 @@ export default function buildRequest(config, tlConfig, scriptedFields, timeout) request.timeout = `${timeout}ms`; } - return request; + return { + params: request, + }; } diff --git a/src/plugins/vis_type_timelion/server/series_functions/fixtures/tl_config.js b/src/plugins/vis_type_timelion/server/series_functions/fixtures/tl_config.js index 6107a2845a7cc..38d70278fbf00 100644 --- a/src/plugins/vis_type_timelion/server/series_functions/fixtures/tl_config.js +++ b/src/plugins/vis_type_timelion/server/series_functions/fixtures/tl_config.js @@ -30,11 +30,15 @@ export default function () { if (!functions[name]) throw new Error('No such function: ' + name); return functions[name]; }, - esDataClient: sinon.stub().returns({ - callAsCurrentUser: function () { - return Promise.resolve(esResponse); - }, - }), + getStartServices: sinon + .stub() + .returns( + Promise.resolve([ + {}, + { data: { search: { search: () => Promise.resolve({ rawResponse: esResponse }) } } }, + ]) + ), + esShardTimeout: moment.duration(30000), allowedGraphiteUrls: ['https://www.hostedgraphite.com/UID/ACCESS_KEY/graphite'], }); From 219d0b5eb4038cb0fc6823a4bba07863870008bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Kopyci=C5=84ski?= Date: Mon, 7 Sep 2020 18:57:16 +0200 Subject: [PATCH 11/58] [Security Solution] Refactor OverviewHost and OverviewNetwork to use Search Strategy (#76409) --- .../security_solution/hosts/all/index.ts | 1 - .../security_solution/hosts/details/index.ts | 23 ++ .../security_solution/hosts/index.ts | 4 +- .../security_solution/hosts/overview/index.ts | 83 ++++- .../security_solution/index.ts | 16 +- .../security_solution/network/index.ts | 2 + .../network/overview/index.ts | 62 ++++ .../cypress/fixtures/overview.json | 31 -- .../fixtures/overview_search_strategy.json | 33 ++ .../cypress/integration/overview.spec.ts | 1 + .../cypress/support/commands.js | 9 + .../cypress/support/index.d.ts | 1 + .../hosts/{overview => details}/_index.tsx | 42 +-- .../host_overview.gql_query.ts | 0 .../hosts/{overview => details}/index.tsx | 0 .../{overview => details}/translations.ts | 0 .../public/hosts/pages/details/index.tsx | 2 +- .../components/event_counts/index.test.tsx | 19 +- .../components/overview_host/index.test.tsx | 108 ++----- .../components/overview_host/index.tsx | 111 ++++--- .../overview_network/index.test.tsx | 107 ++----- .../components/overview_network/index.tsx | 109 +++---- .../containers/overview_host/index.tsx | 210 ++++++++----- .../containers/overview_host/translations.ts | 21 ++ .../containers/overview_network/index.tsx | 189 +++++++---- .../overview_network/translations.ts | 21 ++ .../hosts/{overview => details}/helpers.ts | 0 .../factory/hosts/details/index.ts | 38 +++ .../query.host_details.dsl.ts} | 6 +- .../security_solution/factory/hosts/index.ts | 6 +- .../factory/hosts/overview/index.ts | 58 +++- .../hosts/overview/query.overview_host.dsl.ts | 295 ++++++++++++++++++ .../factory/network/index.ts | 2 + .../factory/network/overview/index.ts | 63 ++++ .../overview/query.overview_network.dsl.ts | 105 +++++++ .../apis/security_solution/hosts.ts | 2 +- 36 files changed, 1279 insertions(+), 501 deletions(-) create mode 100644 x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/details/index.ts create mode 100644 x-pack/plugins/security_solution/common/search_strategy/security_solution/network/overview/index.ts create mode 100644 x-pack/plugins/security_solution/cypress/fixtures/overview_search_strategy.json rename x-pack/plugins/security_solution/public/hosts/containers/hosts/{overview => details}/_index.tsx (79%) rename x-pack/plugins/security_solution/public/hosts/containers/hosts/{overview => details}/host_overview.gql_query.ts (100%) rename x-pack/plugins/security_solution/public/hosts/containers/hosts/{overview => details}/index.tsx (100%) rename x-pack/plugins/security_solution/public/hosts/containers/hosts/{overview => details}/translations.ts (100%) create mode 100644 x-pack/plugins/security_solution/public/overview/containers/overview_host/translations.ts create mode 100644 x-pack/plugins/security_solution/public/overview/containers/overview_network/translations.ts rename x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/{overview => details}/helpers.ts (100%) create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/index.ts rename x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/{overview/query.host_overview.dsl.ts => details/query.host_details.dsl.ts} (86%) create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.overview_host.dsl.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/overview/index.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/overview/query.overview_network.dsl.ts diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/all/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/all/index.ts index 5ddcd8da30efb..8191fa742ed9c 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/all/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/all/index.ts @@ -12,7 +12,6 @@ import { RequestOptionsPaginated } from '../..'; export interface HostsEdges { node: HostItem; - cursor: CursorType; } diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/details/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/details/index.ts new file mode 100644 index 0000000000000..2338df88abad9 --- /dev/null +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/details/index.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { IEsSearchResponse } from '../../../../../../../../src/plugins/data/common'; + +import { Inspect, Maybe, TimerangeInput } from '../../../common'; +import { HostItem, HostsFields } from '../common'; +import { RequestOptionsPaginated } from '../..'; + +export interface HostDetailsStrategyResponse extends IEsSearchResponse { + hostDetails: HostItem; + inspect?: Maybe; +} + +export interface HostDetailsRequestOptions extends Partial> { + hostName: string; + skip?: boolean; + timerange: TimerangeInput; + inspect?: Maybe; +} diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/index.ts index 297e17fd127b3..63a57c20a8593 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/index.ts @@ -7,14 +7,16 @@ export * from './all'; export * from './authentications'; export * from './common'; +export * from './details'; export * from './first_last_seen'; export * from './overview'; export * from './uncommon_processes'; export enum HostsQueries { authentications = 'authentications', + details = 'details', firstLastSeen = 'firstLastSeen', hosts = 'hosts', - hostOverview = 'hostOverview', + overview = 'overviewHost', uncommonProcesses = 'uncommonProcesses', } diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/overview/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/overview/index.ts index 7d212a951905a..569ed611bd35b 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/overview/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/overview/index.ts @@ -5,18 +5,83 @@ */ import { IEsSearchResponse } from '../../../../../../../../src/plugins/data/common'; -import { Inspect, Maybe, TimerangeInput } from '../../../common'; -import { HostItem, HostsFields } from '../common'; -import { RequestOptionsPaginated } from '../..'; +import { Inspect, Maybe, SearchHit } from '../../../common'; +import { RequestBasicOptions } from '../..'; + +export type HostOverviewRequestOptions = RequestBasicOptions; export interface HostOverviewStrategyResponse extends IEsSearchResponse { - hostOverview: HostItem; inspect?: Maybe; + overviewHost: { + auditbeatAuditd?: Maybe; + auditbeatFIM?: Maybe; + auditbeatLogin?: Maybe; + auditbeatPackage?: Maybe; + auditbeatProcess?: Maybe; + auditbeatUser?: Maybe; + endgameDns?: Maybe; + endgameFile?: Maybe; + endgameImageLoad?: Maybe; + endgameNetwork?: Maybe; + endgameProcess?: Maybe; + endgameRegistry?: Maybe; + endgameSecurity?: Maybe; + filebeatSystemModule?: Maybe; + winlogbeatSecurity?: Maybe; + winlogbeatMWSysmonOperational?: Maybe; + }; } -export interface HostOverviewRequestOptions extends Partial> { - hostName: string; - skip?: boolean; - timerange: TimerangeInput; - inspect?: Maybe; +export interface OverviewHostHit extends SearchHit { + aggregations: { + auditd_count: { + doc_count: number; + }; + endgame_module: { + dns_event_count: { + doc_count: number; + }; + file_event_count: { + doc_count: number; + }; + image_load_event_count: { + doc_count: number; + }; + network_event_count: { + doc_count: number; + }; + process_event_count: { + doc_count: number; + }; + registry_event: { + doc_count: number; + }; + security_event_count: { + doc_count: number; + }; + }; + fim_count: { + doc_count: number; + }; + system_module: { + login_count: { + doc_count: number; + }; + package_count: { + doc_count: number; + }; + process_count: { + doc_count: number; + }; + user_count: { + doc_count: number; + }; + filebeat_count: { + doc_count: number; + }; + }; + winlog_count: { + doc_count: number; + }; + }; } diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/index.ts index 4d6bd87bb9d42..b7d905d22e839 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/index.ts @@ -7,6 +7,8 @@ import { IEsSearchRequest } from '../../../../../../src/plugins/data/common'; import { ESQuery } from '../../typed_json'; import { + HostDetailsStrategyResponse, + HostDetailsRequestOptions, HostOverviewStrategyResponse, HostAuthenticationsRequestOptions, HostAuthenticationsStrategyResponse, @@ -27,6 +29,8 @@ import { NetworkTlsRequestOptions, NetworkHttpStrategyResponse, NetworkHttpRequestOptions, + NetworkOverviewStrategyResponse, + NetworkOverviewRequestOptions, NetworkTopCountriesStrategyResponse, NetworkTopCountriesRequestOptions, NetworkTopNFlowStrategyResponse, @@ -73,7 +77,9 @@ export interface RequestOptionsPaginated extends RequestBasicOpt export type StrategyResponseType = T extends HostsQueries.hosts ? HostsStrategyResponse - : T extends HostsQueries.hostOverview + : T extends HostsQueries.details + ? HostDetailsStrategyResponse + : T extends HostsQueries.overview ? HostOverviewStrategyResponse : T extends HostsQueries.authentications ? HostAuthenticationsStrategyResponse @@ -85,6 +91,8 @@ export type StrategyResponseType = T extends HostsQ ? NetworkDnsStrategyResponse : T extends NetworkQueries.http ? NetworkHttpStrategyResponse + : T extends NetworkQueries.overview + ? NetworkOverviewStrategyResponse : T extends NetworkQueries.tls ? NetworkTlsStrategyResponse : T extends NetworkQueries.topCountries @@ -97,7 +105,9 @@ export type StrategyResponseType = T extends HostsQ export type StrategyRequestType = T extends HostsQueries.hosts ? HostsRequestOptions - : T extends HostsQueries.hostOverview + : T extends HostsQueries.details + ? HostDetailsRequestOptions + : T extends HostsQueries.overview ? HostOverviewRequestOptions : T extends HostsQueries.authentications ? HostAuthenticationsRequestOptions @@ -109,6 +119,8 @@ export type StrategyRequestType = T extends HostsQu ? NetworkDnsRequestOptions : T extends NetworkQueries.http ? NetworkHttpRequestOptions + : T extends NetworkQueries.overview + ? NetworkOverviewRequestOptions : T extends NetworkQueries.tls ? NetworkTlsRequestOptions : T extends NetworkQueries.topCountries diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/index.ts index a0ef43eb3d899..d61acbe62ffb0 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/index.ts @@ -7,6 +7,7 @@ export * from './common'; export * from './dns'; export * from './http'; +export * from './overview'; export * from './tls'; export * from './top_countries'; export * from './top_n_flow'; @@ -14,6 +15,7 @@ export * from './top_n_flow'; export enum NetworkQueries { dns = 'dns', http = 'http', + overview = 'overviewNetwork', tls = 'tls', topCountries = 'topCountries', topNFlow = 'topNFlow', diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/overview/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/overview/index.ts new file mode 100644 index 0000000000000..b7c8b7448eaf7 --- /dev/null +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/overview/index.ts @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { IEsSearchResponse } from '../../../../../../../../src/plugins/data/common'; +import { Inspect, Maybe, SearchHit } from '../../../common'; +import { RequestBasicOptions } from '../..'; + +export type NetworkOverviewRequestOptions = RequestBasicOptions; + +export interface NetworkOverviewStrategyResponse extends IEsSearchResponse { + inspect?: Maybe; + overviewNetwork: { + auditbeatSocket?: Maybe; + filebeatCisco?: Maybe; + filebeatNetflow?: Maybe; + filebeatPanw?: Maybe; + filebeatSuricata?: Maybe; + filebeatZeek?: Maybe; + packetbeatDNS?: Maybe; + packetbeatFlow?: Maybe; + packetbeatTLS?: Maybe; + }; +} + +export interface OverviewNetworkHit extends SearchHit { + aggregations: { + unique_flow_count: { + doc_count: number; + }; + unique_dns_count: { + doc_count: number; + }; + unique_suricata_count: { + doc_count: number; + }; + unique_zeek_count: { + doc_count: number; + }; + unique_socket_count: { + doc_count: number; + }; + unique_filebeat_count: { + unique_netflow_count: { + doc_count: number; + }; + unique_panw_count: { + doc_count: number; + }; + unique_cisco_count: { + doc_count: number; + }; + }; + unique_packetbeat_count: { + unique_tls_count: { + doc_count: number; + }; + }; + }; +} diff --git a/x-pack/plugins/security_solution/cypress/fixtures/overview.json b/x-pack/plugins/security_solution/cypress/fixtures/overview.json index 69594b88b7515..c4aeda0c446e4 100644 --- a/x-pack/plugins/security_solution/cypress/fixtures/overview.json +++ b/x-pack/plugins/security_solution/cypress/fixtures/overview.json @@ -2,37 +2,6 @@ "data": { "source": { "id": "default", - "OverviewNetwork": { - "auditbeatSocket": 578502, - "filebeatCisco": 999, - "filebeatNetflow": 2544, - "filebeatPanw": 678, - "filebeatSuricata": 303699, - "filebeatZeek": 71129, - "packetbeatDNS": 1090, - "packetbeatFlow": 722153, - "packetbeatTLS": 340, - "__typename": "OverviewNetworkData" - }, - "OverviewHost": { - "auditbeatAuditd": 123, - "auditbeatFIM": 345, - "auditbeatLogin": 456, - "auditbeatPackage": 567, - "auditbeatProcess": 678, - "auditbeatUser": 789, - "endgameDns": 391, - "endgameFile": 392, - "endgameImageLoad": 393, - "endgameNetwork": 394, - "endgameProcess": 395, - "endgameRegistry": 396, - "endgameSecurity": 397, - "filebeatSystemModule": 890, - "winlogbeatSecurity": 70, - "winlogbeatMWSysmonOperational": 30, - "__typename": "OverviewHostData" - }, "status": { "indicesExist": true, "indexFields": [], diff --git a/x-pack/plugins/security_solution/cypress/fixtures/overview_search_strategy.json b/x-pack/plugins/security_solution/cypress/fixtures/overview_search_strategy.json new file mode 100644 index 0000000000000..d0c7517015091 --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/fixtures/overview_search_strategy.json @@ -0,0 +1,33 @@ +{ + "overviewNetwork": { + "auditbeatSocket": 578502, + "filebeatCisco": 999, + "filebeatNetflow": 2544, + "filebeatPanw": 678, + "filebeatSuricata": 303699, + "filebeatZeek": 71129, + "packetbeatDNS": 1090, + "packetbeatFlow": 722153, + "packetbeatTLS": 340, + "__typename": "OverviewNetworkData" + }, + "overviewHost": { + "auditbeatAuditd": 123, + "auditbeatFIM": 345, + "auditbeatLogin": 456, + "auditbeatPackage": 567, + "auditbeatProcess": 678, + "auditbeatUser": 789, + "endgameDns": 391, + "endgameFile": 392, + "endgameImageLoad": 393, + "endgameNetwork": 394, + "endgameProcess": 395, + "endgameRegistry": 396, + "endgameSecurity": 397, + "filebeatSystemModule": 890, + "winlogbeatSecurity": 70, + "winlogbeatMWSysmonOperational": 30, + "__typename": "OverviewHostData" + } +} diff --git a/x-pack/plugins/security_solution/cypress/integration/overview.spec.ts b/x-pack/plugins/security_solution/cypress/integration/overview.spec.ts index b799d487acd08..14464333fcafe 100644 --- a/x-pack/plugins/security_solution/cypress/integration/overview.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/overview.spec.ts @@ -14,6 +14,7 @@ import { OVERVIEW_URL } from '../urls/navigation'; describe('Overview Page', () => { before(() => { cy.stubSecurityApi('overview'); + cy.stubSearchStrategyApi('overview_search_strategy'); loginAndWaitForPage(OVERVIEW_URL); }); diff --git a/x-pack/plugins/security_solution/cypress/support/commands.js b/x-pack/plugins/security_solution/cypress/support/commands.js index f0dd797601176..0e3c9562aedf0 100644 --- a/x-pack/plugins/security_solution/cypress/support/commands.js +++ b/x-pack/plugins/security_solution/cypress/support/commands.js @@ -39,6 +39,15 @@ Cypress.Commands.add('stubSecurityApi', function (dataFileName) { cy.route('POST', 'api/solutions/security/graphql', `@${dataFileName}JSON`); }); +Cypress.Commands.add('stubSearchStrategyApi', function (dataFileName) { + cy.on('window:before:load', (win) => { + win.fetch = null; + }); + cy.server(); + cy.fixture(dataFileName).as(`${dataFileName}JSON`); + cy.route('POST', 'internal/search/securitySolutionSearchStrategy', `@${dataFileName}JSON`); +}); + Cypress.Commands.add( 'attachFile', { diff --git a/x-pack/plugins/security_solution/cypress/support/index.d.ts b/x-pack/plugins/security_solution/cypress/support/index.d.ts index 906e526e2c4a0..f66aeff5d578d 100644 --- a/x-pack/plugins/security_solution/cypress/support/index.d.ts +++ b/x-pack/plugins/security_solution/cypress/support/index.d.ts @@ -7,6 +7,7 @@ declare namespace Cypress { interface Chainable { stubSecurityApi(dataFileName: string): Chainable; + stubSearchStrategyApi(dataFileName: string): Chainable; attachFile(fileName: string, fileType?: string): Chainable; } } diff --git a/x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/_index.tsx b/x-pack/plugins/security_solution/public/hosts/containers/hosts/details/_index.tsx similarity index 79% rename from x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/_index.tsx rename to x-pack/plugins/security_solution/public/hosts/containers/hosts/details/_index.tsx index b28f479634d42..7b248d867bb76 100644 --- a/x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/_index.tsx +++ b/x-pack/plugins/security_solution/public/hosts/containers/hosts/details/_index.tsx @@ -16,8 +16,8 @@ import { useKibana } from '../../../../common/lib/kibana'; import { HostItem, HostsQueries, - HostOverviewRequestOptions, - HostOverviewStrategyResponse, + HostDetailsRequestOptions, + HostDetailsStrategyResponse, } from '../../../../../common/search_strategy/security_solution/hosts'; import * as i18n from './translations'; @@ -25,18 +25,18 @@ import { AbortError } from '../../../../../../../../src/plugins/data/common'; import { getInspectResponse } from '../../../../helpers'; import { InspectResponse } from '../../../../types'; -const ID = 'hostOverviewQuery'; +const ID = 'hostDetailsQuery'; -export interface HostOverviewArgs { +export interface HostDetailsArgs { id: string; inspect: InspectResponse; - hostOverview: HostItem; + hostDetails: HostItem; refetch: inputsModel.Refetch; startDate: string; endDate: string; } -interface UseHostOverview { +interface UseHostDetails { id?: string; hostName: string; endDate: string; @@ -44,22 +44,22 @@ interface UseHostOverview { startDate: string; } -export const useHostOverview = ({ +export const useHostDetails = ({ endDate, hostName, skip = false, startDate, id = ID, -}: UseHostOverview): [boolean, HostOverviewArgs] => { +}: UseHostDetails): [boolean, HostDetailsArgs] => { const { data, notifications, uiSettings } = useKibana().services; const refetch = useRef(noop); const abortCtrl = useRef(new AbortController()); const defaultIndex = uiSettings.get(DEFAULT_INDEX_KEY); const [loading, setLoading] = useState(false); - const [hostOverviewRequest, setHostOverviewRequest] = useState({ + const [hostDetailsRequest, setHostDetailsRequest] = useState({ defaultIndex, hostName, - factoryQueryType: HostsQueries.hostOverview, + factoryQueryType: HostsQueries.details, timerange: { interval: '12h', from: startDate, @@ -67,9 +67,9 @@ export const useHostOverview = ({ }, }); - const [hostOverviewResponse, setHostOverviewResponse] = useState({ + const [hostDetailsResponse, setHostDetailsResponse] = useState({ endDate, - hostOverview: {}, + hostDetails: {}, id: ID, inspect: { dsl: [], @@ -79,15 +79,15 @@ export const useHostOverview = ({ startDate, }); - const hostOverviewSearch = useCallback( - (request: HostOverviewRequestOptions) => { + const hostDetailsSearch = useCallback( + (request: HostDetailsRequestOptions) => { let didCancel = false; const asyncSearch = async () => { abortCtrl.current = new AbortController(); setLoading(true); const searchSubscription$ = data.search - .search(request, { + .search(request, { strategy: 'securitySolutionSearchStrategy', abortSignal: abortCtrl.current.signal, }) @@ -96,9 +96,9 @@ export const useHostOverview = ({ if (!response.isPartial && !response.isRunning) { if (!didCancel) { setLoading(false); - setHostOverviewResponse((prevResponse) => ({ + setHostDetailsResponse((prevResponse) => ({ ...prevResponse, - hostOverview: response.hostOverview, + hostDetails: response.hostDetails, inspect: getInspectResponse(response, prevResponse.inspect), refetch: refetch.current, })); @@ -135,7 +135,7 @@ export const useHostOverview = ({ ); useEffect(() => { - setHostOverviewRequest((prevRequest) => { + setHostDetailsRequest((prevRequest) => { const myRequest = { ...prevRequest, defaultIndex, @@ -154,8 +154,8 @@ export const useHostOverview = ({ }, [defaultIndex, endDate, hostName, startDate, skip]); useEffect(() => { - hostOverviewSearch(hostOverviewRequest); - }, [hostOverviewRequest, hostOverviewSearch]); + hostDetailsSearch(hostDetailsRequest); + }, [hostDetailsRequest, hostDetailsSearch]); - return [loading, hostOverviewResponse]; + return [loading, hostDetailsResponse]; }; diff --git a/x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/host_overview.gql_query.ts b/x-pack/plugins/security_solution/public/hosts/containers/hosts/details/host_overview.gql_query.ts similarity index 100% rename from x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/host_overview.gql_query.ts rename to x-pack/plugins/security_solution/public/hosts/containers/hosts/details/host_overview.gql_query.ts diff --git a/x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/index.tsx b/x-pack/plugins/security_solution/public/hosts/containers/hosts/details/index.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/index.tsx rename to x-pack/plugins/security_solution/public/hosts/containers/hosts/details/index.tsx diff --git a/x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/translations.ts b/x-pack/plugins/security_solution/public/hosts/containers/hosts/details/translations.ts similarity index 100% rename from x-pack/plugins/security_solution/public/hosts/containers/hosts/overview/translations.ts rename to x-pack/plugins/security_solution/public/hosts/containers/hosts/details/translations.ts diff --git a/x-pack/plugins/security_solution/public/hosts/pages/details/index.tsx b/x-pack/plugins/security_solution/public/hosts/pages/details/index.tsx index 67f563e944f42..49b63a5f76a14 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/details/index.tsx +++ b/x-pack/plugins/security_solution/public/hosts/pages/details/index.tsx @@ -25,7 +25,7 @@ import { HostOverview } from '../../../overview/components/host_overview'; import { manageQuery } from '../../../common/components/page/manage_query'; import { SiemSearchBar } from '../../../common/components/search_bar'; import { WrapperPage } from '../../../common/components/wrapper_page'; -import { HostOverviewByNameQuery } from '../../containers/hosts/overview'; +import { HostOverviewByNameQuery } from '../../containers/hosts/details'; import { KpiHostDetailsQuery } from '../../containers/kpi_host_details'; import { useGlobalTime } from '../../../common/containers/use_global_time'; import { useWithSource } from '../../../common/containers/source'; diff --git a/x-pack/plugins/security_solution/public/overview/components/event_counts/index.test.tsx b/x-pack/plugins/security_solution/public/overview/components/event_counts/index.test.tsx index 8268a550257c9..f2d6b50326082 100644 --- a/x-pack/plugins/security_solution/public/overview/components/event_counts/index.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/event_counts/index.test.tsx @@ -22,29 +22,24 @@ describe('EventCounts', () => { test('it filters the `Host events` widget with a `host.name` `exists` filter', () => { const wrapper = mount( - - - + , + { wrappingComponent: TestProviders } ); expect( - (wrapper.find('[data-test-subj="overview-host-query"]').first().props() as OverviewHostProps) - .filterQuery + (wrapper.find('Memo(OverviewHostComponent)').first().props() as OverviewHostProps).filterQuery ).toContain('[{"bool":{"should":[{"exists":{"field":"host.name"}}]'); }); test('it filters the `Network events` widget with a `source.ip` or `destination.ip` `exists` filter', () => { const wrapper = mount( - - - + , + { wrappingComponent: TestProviders } ); expect( - (wrapper - .find('[data-test-subj="overview-network-query"]') - .first() - .props() as OverviewNetworkProps).filterQuery + (wrapper.find('Memo(OverviewNetworkComponent)').first().props() as OverviewNetworkProps) + .filterQuery ).toContain( '{"bool":{"filter":[{"bool":{"should":[{"bool":{"should":[{"exists":{"field":"source.ip"}}],"minimum_should_match":1}},{"bool":{"should":[{"exists":{"field":"destination.ip"}}],"minimum_should_match":1}}],"minimum_should_match":1}}]}}]' ); diff --git a/x-pack/plugins/security_solution/public/overview/components/overview_host/index.test.tsx b/x-pack/plugins/security_solution/public/overview/components/overview_host/index.test.tsx index 5ff78c9b29cf5..b932add7afc2c 100644 --- a/x-pack/plugins/security_solution/public/overview/components/overview_host/index.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/overview_host/index.test.tsx @@ -7,7 +7,6 @@ import { cloneDeep } from 'lodash/fp'; import { mount } from 'enzyme'; import React from 'react'; -import { MockedProvider } from 'react-apollo/test-utils'; import '../../../common/mock/match_media'; import { @@ -21,11 +20,7 @@ import { import { OverviewHost } from '.'; import { createStore, State } from '../../../common/store'; -import { overviewHostQuery } from '../../containers/overview_host/index.gql_query'; -import { GetOverviewHostQuery } from '../../../graphql/types'; - -// we don't have the types for waitFor just yet, so using "as waitFor" until when we do -import { wait as waitFor } from '@testing-library/react'; +import { useHostOverview } from '../../containers/overview_host'; jest.mock('../../../common/lib/kibana'); jest.mock('../../../common/components/link_to'); @@ -33,67 +28,30 @@ jest.mock('../../../common/components/link_to'); const startDate = '2020-01-20T20:49:57.080Z'; const endDate = '2020-01-21T20:49:57.080Z'; -interface MockedProvidedQuery { - request: { - query: GetOverviewHostQuery.Query; - fetchPolicy: string; - variables: GetOverviewHostQuery.Variables; - }; - result: { - data: { - source: unknown; - }; - }; -} - -const mockOpenTimelineQueryResults: MockedProvidedQuery[] = [ - { - request: { - query: overviewHostQuery, - fetchPolicy: 'cache-and-network', - variables: { - sourceId: 'default', - timerange: { interval: '12h', from: startDate, to: endDate }, - filterQuery: undefined, - defaultIndex: [ - 'apm-*-transaction*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ], - inspect: false, - }, - }, - result: { - data: { - source: { - id: 'default', - OverviewHost: { - auditbeatAuditd: 1, - auditbeatFIM: 1, - auditbeatLogin: 1, - auditbeatPackage: 1, - auditbeatProcess: 1, - auditbeatUser: 1, - endgameDns: 1, - endgameFile: 1, - endgameImageLoad: 1, - endgameNetwork: 1, - endgameProcess: 1, - endgameRegistry: 1, - endgameSecurity: 1, - filebeatSystemModule: 1, - winlogbeatSecurity: 1, - winlogbeatMWSysmonOperational: 1, - }, - }, - }, - }, +const MOCKED_RESPONSE = { + overviewHost: { + auditbeatAuditd: 1, + auditbeatFIM: 1, + auditbeatLogin: 1, + auditbeatPackage: 1, + auditbeatProcess: 1, + auditbeatUser: 1, + endgameDns: 1, + endgameFile: 1, + endgameImageLoad: 1, + endgameNetwork: 1, + endgameProcess: 1, + endgameRegistry: 1, + endgameSecurity: 1, + filebeatSystemModule: 1, + winlogbeatSecurity: 1, + winlogbeatMWSysmonOperational: 1, }, -]; +}; + +jest.mock('../../containers/overview_host'); +const useHostOverviewMock = useHostOverview as jest.Mock; +useHostOverviewMock.mockReturnValue([false, MOCKED_RESPONSE]); describe('OverviewHost', () => { const state: State = mockGlobalState; @@ -131,8 +89,9 @@ describe('OverviewHost', () => { }); test('it renders an empty subtitle while loading', () => { + useHostOverviewMock.mockReturnValueOnce([true, { overviewHost: {} }]); const wrapper = mount( - + ); @@ -142,18 +101,13 @@ describe('OverviewHost', () => { test('it renders the expected event count in the subtitle after loading events', async () => { const wrapper = mount( - - - - + + ); - await waitFor(() => { - wrapper.update(); - expect(wrapper.find('[data-test-subj="header-panel-subtitle"]').first().text()).toEqual( - 'Showing: 16 events' - ); - }); + expect(wrapper.find('[data-test-subj="header-panel-subtitle"]').first().text()).toEqual( + 'Showing: 16 events' + ); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/overview_host/index.tsx b/x-pack/plugins/security_solution/public/overview/components/overview_host/index.tsx index 783e433dfba26..3f35d0abbaa85 100644 --- a/x-pack/plugins/security_solution/public/overview/components/overview_host/index.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/overview_host/index.tsx @@ -12,7 +12,7 @@ import React, { useMemo, useCallback } from 'react'; import { DEFAULT_NUMBER_FORMAT, APP_ID } from '../../../../common/constants'; import { ESQuery } from '../../../../common/typed_json'; -import { ID as OverviewHostQueryId, OverviewHostQuery } from '../../containers/overview_host'; +import { ID as OverviewHostQueryId, useHostOverview } from '../../containers/overview_host'; import { HeaderSection } from '../../../common/components/header_section'; import { useUiSetting$, useKibana } from '../../../common/lib/kibana'; import { getHostsUrl, useFormatUrl } from '../../../common/components/link_to'; @@ -44,6 +44,12 @@ const OverviewHostComponent: React.FC = ({ const { navigateToApp } = useKibana().services.application; const [defaultNumberFormat] = useUiSetting$(DEFAULT_NUMBER_FORMAT); + const [loading, { overviewHost, id, inspect, refetch }] = useHostOverview({ + endDate, + filterQuery, + startDate, + }); + const goToHost = useCallback( (ev) => { ev.preventDefault(); @@ -54,6 +60,16 @@ const OverviewHostComponent: React.FC = ({ [navigateToApp, urlSearch] ); + const hostEventsCount = useMemo( + () => getOverviewHostStats(overviewHost).reduce((total, stat) => total + stat.count, 0), + [overviewHost] + ); + + const formattedHostEventsCount = useMemo( + () => numeral(hostEventsCount).format(defaultNumberFormat), + [defaultNumberFormat, hostEventsCount] + ); + const hostPageButton = useMemo( () => ( @@ -65,71 +81,54 @@ const OverviewHostComponent: React.FC = ({ ), [goToHost, formatUrl] ); + return ( - + ) : ( + <>{''} + ) + } + title={ + + } > - {({ overviewHost, loading, id, inspect, refetch }) => { - const hostEventsCount = getOverviewHostStats(overviewHost).reduce( - (total, stat) => total + stat.count, - 0 - ); - const formattedHostEventsCount = numeral(hostEventsCount).format(defaultNumberFormat); + <> + + {hostPageButton} + + - return ( - <> - - ) : ( - <>{''} - ) - } - title={ - - } - > - <> - - {hostPageButton} - - - - - - ); - }} - + ); }; +OverviewHostComponent.displayName = 'OverviewHostComponent'; + export const OverviewHost = React.memo(OverviewHostComponent); diff --git a/x-pack/plugins/security_solution/public/overview/components/overview_network/index.test.tsx b/x-pack/plugins/security_solution/public/overview/components/overview_network/index.test.tsx index 0bb887b38a4b1..f67287ea4b9e2 100644 --- a/x-pack/plugins/security_solution/public/overview/components/overview_network/index.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/overview_network/index.test.tsx @@ -7,7 +7,7 @@ import { cloneDeep } from 'lodash/fp'; import { mount } from 'enzyme'; import React from 'react'; -import { MockedProvider } from 'react-apollo/test-utils'; + import '../../../common/mock/match_media'; import { apolloClientObservable, @@ -17,13 +17,9 @@ import { createSecuritySolutionStorageMock, kibanaObservable, } from '../../../common/mock'; - import { OverviewNetwork } from '.'; import { createStore, State } from '../../../common/store'; -import { overviewNetworkQuery } from '../../containers/overview_network/index.gql_query'; -import { GetOverviewHostQuery } from '../../../graphql/types'; -// we don't have the types for waitFor just yet, so using "as waitFor" until when we do -import { wait as waitFor } from '@testing-library/react'; +import { useNetworkOverview } from '../../containers/overview_network'; jest.mock('../../../common/components/link_to'); const mockNavigateToApp = jest.fn(); @@ -48,60 +44,23 @@ jest.mock('../../../common/lib/kibana', () => { const startDate = '2020-01-20T20:49:57.080Z'; const endDate = '2020-01-21T20:49:57.080Z'; -interface MockedProvidedQuery { - request: { - query: GetOverviewHostQuery.Query; - fetchPolicy: string; - variables: GetOverviewHostQuery.Variables; - }; - result: { - data: { - source: unknown; - }; - }; -} - -const mockOpenTimelineQueryResults: MockedProvidedQuery[] = [ - { - request: { - query: overviewNetworkQuery, - fetchPolicy: 'cache-and-network', - variables: { - sourceId: 'default', - timerange: { interval: '12h', from: startDate, to: endDate }, - filterQuery: undefined, - defaultIndex: [ - 'apm-*-transaction*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ], - inspect: false, - }, - }, - result: { - data: { - source: { - id: 'default', - OverviewNetwork: { - auditbeatSocket: 1, - filebeatCisco: 1, - filebeatNetflow: 1, - filebeatPanw: 1, - filebeatSuricata: 1, - filebeatZeek: 1, - packetbeatDNS: 1, - packetbeatFlow: 1, - packetbeatTLS: 1, - }, - }, - }, - }, +const MOCKED_RESPONSE = { + overviewNetwork: { + auditbeatSocket: 1, + filebeatCisco: 1, + filebeatNetflow: 1, + filebeatPanw: 1, + filebeatSuricata: 1, + filebeatZeek: 1, + packetbeatDNS: 1, + packetbeatFlow: 1, + packetbeatTLS: 1, }, -]; +}; + +jest.mock('../../containers/overview_network'); +const useNetworkOverviewMock = useNetworkOverview as jest.Mock; +useNetworkOverviewMock.mockReturnValue([false, MOCKED_RESPONSE]); describe('OverviewNetwork', () => { const state: State = mockGlobalState; @@ -139,8 +98,9 @@ describe('OverviewNetwork', () => { }); test('it renders an empty subtitle while loading', () => { + useNetworkOverviewMock.mockReturnValueOnce([true, { overviewNetwork: {} }]); const wrapper = mount( - + ); @@ -150,27 +110,20 @@ describe('OverviewNetwork', () => { test('it renders the expected event count in the subtitle after loading events', async () => { const wrapper = mount( - - - - + + ); - await waitFor(() => { - wrapper.update(); - expect(wrapper.find('[data-test-subj="header-panel-subtitle"]').first().text()).toEqual( - 'Showing: 9 events' - ); - }); + expect(wrapper.find('[data-test-subj="header-panel-subtitle"]').first().text()).toEqual( + 'Showing: 9 events' + ); }); it('it renders View Network', () => { const wrapper = mount( - - - - + + ); @@ -179,10 +132,8 @@ describe('OverviewNetwork', () => { it('when click on View Network we call navigateToApp to make sure to navigate to right page', () => { const wrapper = mount( - - - - + + ); diff --git a/x-pack/plugins/security_solution/public/overview/components/overview_network/index.tsx b/x-pack/plugins/security_solution/public/overview/components/overview_network/index.tsx index 8282eaeb63c28..089bed3c67808 100644 --- a/x-pack/plugins/security_solution/public/overview/components/overview_network/index.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/overview_network/index.tsx @@ -17,7 +17,7 @@ import { useUiSetting$, useKibana } from '../../../common/lib/kibana'; import { manageQuery } from '../../../common/components/page/manage_query'; import { ID as OverviewNetworkQueryId, - OverviewNetworkQuery, + useNetworkOverview, } from '../../containers/overview_network'; import { getOverviewNetworkStats, OverviewNetworkStats } from '../overview_network_stats'; import { getNetworkUrl, useFormatUrl } from '../../../common/components/link_to'; @@ -45,6 +45,12 @@ const OverviewNetworkComponent: React.FC = ({ const { navigateToApp } = useKibana().services.application; const [defaultNumberFormat] = useUiSetting$(DEFAULT_NUMBER_FORMAT); + const [loading, { overviewNetwork, id, inspect, refetch }] = useNetworkOverview({ + endDate, + filterQuery, + startDate, + }); + const goToNetwork = useCallback( (ev) => { ev.preventDefault(); @@ -55,6 +61,15 @@ const OverviewNetworkComponent: React.FC = ({ [navigateToApp, urlSearch] ); + const networkEventsCount = useMemo( + () => getOverviewNetworkStats(overviewNetwork).reduce((total, stat) => total + stat.count, 0), + [overviewNetwork] + ); + const formattedNetworkEventsCount = useMemo( + () => numeral(networkEventsCount).format(defaultNumberFormat), + [defaultNumberFormat, networkEventsCount] + ); + const networkPageButton = useMemo( () => ( = ({ return ( - - - {({ overviewNetwork, loading, id, inspect, refetch }) => { - const networkEventsCount = getOverviewNetworkStats(overviewNetwork).reduce( - (total, stat) => total + stat.count, - 0 - ); - const formattedNetworkEventsCount = numeral(networkEventsCount).format( - defaultNumberFormat - ); - - return ( - <> - - ) : ( - <>{''} - ) - } - title={ - - } - > - {networkPageButton} - - - + <> + - - ); - }} - + ) : ( + <>{''} + ) + } + title={ + + } + > + {networkPageButton} + + + + diff --git a/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.tsx b/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.tsx index a6977c3bbd49d..e011e6c7b6b65 100644 --- a/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.tsx +++ b/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.tsx @@ -4,95 +4,161 @@ * you may not use this file except in compliance with the Elastic License. */ -import { getOr } from 'lodash/fp'; -import React, { useMemo } from 'react'; -import { Query } from 'react-apollo'; -import { connect, ConnectedProps } from 'react-redux'; +import { noop } from 'lodash/fp'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import deepEqual from 'fast-deep-equal'; import { DEFAULT_INDEX_KEY } from '../../../../common/constants'; -import { GetOverviewHostQuery, OverviewHostData } from '../../../graphql/types'; -import { useUiSetting } from '../../../common/lib/kibana'; -import { inputsModel, inputsSelectors } from '../../../common/store/inputs'; -import { State } from '../../../common/store'; -import { createFilter, getDefaultFetchPolicy } from '../../../common/containers/helpers'; -import { QueryTemplateProps } from '../../../common/containers/query_template'; - -import { overviewHostQuery } from './index.gql_query'; +import { + HostsQueries, + HostOverviewRequestOptions, + HostOverviewStrategyResponse, +} from '../../../../common/search_strategy/security_solution'; +import { useKibana } from '../../../common/lib/kibana'; +import { inputsModel } from '../../../common/store/inputs'; +import { createFilter } from '../../../common/containers/helpers'; +import { ESQuery } from '../../../../common/typed_json'; import { useManageSource } from '../../../common/containers/sourcerer'; import { SOURCERER_FEATURE_FLAG_ON } from '../../../common/containers/sourcerer/constants'; +import { AbortError } from '../../../../../../../src/plugins/data/common'; +import { getInspectResponse } from '../../../helpers'; +import { InspectResponse } from '../../../types'; +import * as i18n from './translations'; export const ID = 'overviewHostQuery'; -export interface OverviewHostArgs { +export interface HostOverviewArgs { id: string; - inspect: inputsModel.InspectQuery; - loading: boolean; - overviewHost: OverviewHostData; + inspect: InspectResponse; + isInspected: boolean; + overviewHost: HostOverviewStrategyResponse['overviewHost']; refetch: inputsModel.Refetch; } -export interface OverviewHostProps extends QueryTemplateProps { - children: (args: OverviewHostArgs) => React.ReactNode; - sourceId: string; +interface UseHostOverview { + filterQuery?: ESQuery | string; endDate: string; + skip?: boolean; startDate: string; } -const OverviewHostComponentQuery = React.memo( - ({ id = ID, children, filterQuery, isInspected, sourceId, startDate, endDate }) => { - const { activeSourceGroupId, getManageSourceGroupById } = useManageSource(); - const { indexPatterns } = useMemo(() => getManageSourceGroupById(activeSourceGroupId), [ - getManageSourceGroupById, - activeSourceGroupId, - ]); - const uiDefaultIndexPatterns = useUiSetting(DEFAULT_INDEX_KEY); - const defaultIndex = SOURCERER_FEATURE_FLAG_ON ? indexPatterns : uiDefaultIndexPatterns; - return ( - - query={overviewHostQuery} - fetchPolicy={getDefaultFetchPolicy()} - variables={{ - sourceId, - timerange: { - interval: '12h', - from: startDate, - to: endDate, - }, - filterQuery: createFilter(filterQuery), - defaultIndex, - inspect: isInspected, - }} - > - {({ data, loading, refetch }) => { - const overviewHost = getOr({}, `source.OverviewHost`, data); - return children({ - id, - inspect: getOr(null, 'source.OverviewHost.inspect', data), - overviewHost, - loading, - refetch, - }); - }} - - ); - } -); +export const useHostOverview = ({ + filterQuery, + endDate, + skip = false, + startDate, +}: UseHostOverview): [boolean, HostOverviewArgs] => { + const { data, notifications, uiSettings } = useKibana().services; + const { activeSourceGroupId, getManageSourceGroupById } = useManageSource(); + const { indexPatterns } = useMemo(() => getManageSourceGroupById(activeSourceGroupId), [ + getManageSourceGroupById, + activeSourceGroupId, + ]); + const uiDefaultIndexPatterns = uiSettings.get(DEFAULT_INDEX_KEY); + const defaultIndex = SOURCERER_FEATURE_FLAG_ON ? indexPatterns : uiDefaultIndexPatterns; -OverviewHostComponentQuery.displayName = 'OverviewHostComponentQuery'; + const refetch = useRef(noop); + const abortCtrl = useRef(new AbortController()); + const [loading, setLoading] = useState(false); + const [overviewHostRequest, setHostRequest] = useState({ + defaultIndex, + factoryQueryType: HostsQueries.overview, + filterQuery: createFilter(filterQuery), + timerange: { + interval: '12h', + from: startDate, + to: endDate, + }, + }); -const makeMapStateToProps = () => { - const getQuery = inputsSelectors.globalQueryByIdSelector(); - const mapStateToProps = (state: State, { id = ID }: OverviewHostProps) => { - const { isInspected } = getQuery(state, id); - return { - isInspected, - }; - }; - return mapStateToProps; -}; + const [overviewHostResponse, setHostOverviewResponse] = useState({ + overviewHost: {}, + id: ID, + inspect: { + dsl: [], + response: [], + }, + isInspected: false, + refetch: refetch.current, + }); -const connector = connect(makeMapStateToProps); + const overviewHostSearch = useCallback( + (request: HostOverviewRequestOptions) => { + let didCancel = false; + const asyncSearch = async () => { + abortCtrl.current = new AbortController(); + setLoading(true); -type PropsFromRedux = ConnectedProps; + const searchSubscription$ = data.search + .search(request, { + strategy: 'securitySolutionSearchStrategy', + abortSignal: abortCtrl.current.signal, + }) + .subscribe({ + next: (response) => { + if (!response.isPartial && !response.isRunning) { + if (!didCancel) { + setLoading(false); + setHostOverviewResponse((prevResponse) => ({ + ...prevResponse, + overviewHost: response.overviewHost, + inspect: getInspectResponse(response, prevResponse.inspect), + refetch: refetch.current, + })); + } + searchSubscription$.unsubscribe(); + } else if (response.isPartial && !response.isRunning) { + if (!didCancel) { + setLoading(false); + } + // TODO: Make response error status clearer + notifications.toasts.addWarning(i18n.ERROR_HOST_OVERVIEW); + searchSubscription$.unsubscribe(); + } + }, + error: (msg) => { + if (!(msg instanceof AbortError)) { + notifications.toasts.addDanger({ + title: i18n.FAIL_HOST_OVERVIEW, + text: msg.message, + }); + } + }, + }); + }; + abortCtrl.current.abort(); + asyncSearch(); + refetch.current = asyncSearch; + return () => { + didCancel = true; + abortCtrl.current.abort(); + }; + }, + [data.search, notifications.toasts] + ); -export const OverviewHostQuery = connector(OverviewHostComponentQuery); + useEffect(() => { + setHostRequest((prevRequest) => { + const myRequest = { + ...prevRequest, + defaultIndex, + filterQuery: createFilter(filterQuery), + timerange: { + interval: '12h', + from: startDate, + to: endDate, + }, + }; + if (!skip && !deepEqual(prevRequest, myRequest)) { + return myRequest; + } + return prevRequest; + }); + }, [defaultIndex, endDate, filterQuery, skip, startDate]); + + useEffect(() => { + overviewHostSearch(overviewHostRequest); + }, [overviewHostRequest, overviewHostSearch]); + + return [loading, overviewHostResponse]; +}; diff --git a/x-pack/plugins/security_solution/public/overview/containers/overview_host/translations.ts b/x-pack/plugins/security_solution/public/overview/containers/overview_host/translations.ts new file mode 100644 index 0000000000000..65894847a3e74 --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/containers/overview_host/translations.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; + +export const ERROR_HOST_OVERVIEW = i18n.translate( + 'xpack.securitySolution.allHost.errorSearchDescription', + { + defaultMessage: `An error has occurred on all hosts search`, + } +); + +export const FAIL_HOST_OVERVIEW = i18n.translate( + 'xpack.securitySolution.allHost.failSearchDescription', + { + defaultMessage: `Failed to run search on all hosts`, + } +); diff --git a/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.tsx b/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.tsx index 38c035f6883b6..c61606e0c31dd 100644 --- a/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.tsx +++ b/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.tsx @@ -4,85 +4,152 @@ * you may not use this file except in compliance with the Elastic License. */ -import { getOr } from 'lodash/fp'; -import React from 'react'; -import { Query } from 'react-apollo'; -import { connect, ConnectedProps } from 'react-redux'; +import { noop } from 'lodash/fp'; +import { useCallback, useEffect, useRef, useState } from 'react'; +import deepEqual from 'fast-deep-equal'; import { DEFAULT_INDEX_KEY } from '../../../../common/constants'; -import { GetOverviewNetworkQuery, OverviewNetworkData } from '../../../graphql/types'; -import { useUiSetting } from '../../../common/lib/kibana'; -import { State } from '../../../common/store'; -import { inputsModel, inputsSelectors } from '../../../common/store/inputs'; -import { createFilter, getDefaultFetchPolicy } from '../../../common/containers/helpers'; -import { QueryTemplateProps } from '../../../common/containers/query_template'; - -import { overviewNetworkQuery } from './index.gql_query'; +import { + NetworkQueries, + NetworkOverviewRequestOptions, + NetworkOverviewStrategyResponse, +} from '../../../../common/search_strategy/security_solution'; +import { useKibana } from '../../../common/lib/kibana'; +import { inputsModel } from '../../../common/store/inputs'; +import { createFilter } from '../../../common/containers/helpers'; +import { ESQuery } from '../../../../common/typed_json'; +import { AbortError } from '../../../../../../../src/plugins/data/common'; +import { getInspectResponse } from '../../../helpers'; +import { InspectResponse } from '../../../types'; +import * as i18n from './translations'; export const ID = 'overviewNetworkQuery'; -export interface OverviewNetworkArgs { +export interface NetworkOverviewArgs { id: string; - inspect: inputsModel.InspectQuery; - overviewNetwork: OverviewNetworkData; - loading: boolean; + inspect: InspectResponse; + isInspected: boolean; + overviewNetwork: NetworkOverviewStrategyResponse['overviewNetwork']; refetch: inputsModel.Refetch; } -export interface OverviewNetworkProps extends QueryTemplateProps { - children: (args: OverviewNetworkArgs) => React.ReactNode; - sourceId: string; +interface UseNetworkOverview { + filterQuery?: ESQuery | string; endDate: string; + skip?: boolean; startDate: string; } -export const OverviewNetworkComponentQuery = React.memo( - ({ id = ID, children, filterQuery, isInspected, sourceId, startDate, endDate }) => ( - - query={overviewNetworkQuery} - fetchPolicy={getDefaultFetchPolicy()} - notifyOnNetworkStatusChange - variables={{ - sourceId, +export const useNetworkOverview = ({ + filterQuery, + endDate, + skip = false, + startDate, +}: UseNetworkOverview): [boolean, NetworkOverviewArgs] => { + const { data, notifications, uiSettings } = useKibana().services; + const defaultIndex = uiSettings.get(DEFAULT_INDEX_KEY); + const refetch = useRef(noop); + const abortCtrl = useRef(new AbortController()); + const [loading, setLoading] = useState(false); + const [overviewNetworkRequest, setNetworkRequest] = useState({ + defaultIndex, + factoryQueryType: NetworkQueries.overview, + filterQuery: createFilter(filterQuery), + timerange: { + interval: '12h', + from: startDate, + to: endDate, + }, + }); + + const [overviewNetworkResponse, setNetworkOverviewResponse] = useState({ + overviewNetwork: {}, + id: ID, + inspect: { + dsl: [], + response: [], + }, + isInspected: false, + refetch: refetch.current, + }); + + const overviewNetworkSearch = useCallback( + (request: NetworkOverviewRequestOptions) => { + let didCancel = false; + const asyncSearch = async () => { + abortCtrl.current = new AbortController(); + setLoading(true); + + const searchSubscription$ = data.search + .search(request, { + strategy: 'securitySolutionSearchStrategy', + abortSignal: abortCtrl.current.signal, + }) + .subscribe({ + next: (response) => { + if (!response.isPartial && !response.isRunning) { + if (!didCancel) { + setLoading(false); + setNetworkOverviewResponse((prevResponse) => ({ + ...prevResponse, + overviewNetwork: response.overviewNetwork, + inspect: getInspectResponse(response, prevResponse.inspect), + refetch: refetch.current, + })); + } + searchSubscription$.unsubscribe(); + } else if (response.isPartial && !response.isRunning) { + if (!didCancel) { + setLoading(false); + } + // TODO: Make response error status clearer + notifications.toasts.addWarning(i18n.ERROR_NETWORK_OVERVIEW); + searchSubscription$.unsubscribe(); + } + }, + error: (msg) => { + if (!(msg instanceof AbortError)) { + notifications.toasts.addDanger({ + title: i18n.FAIL_NETWORK_OVERVIEW, + text: msg.message, + }); + } + }, + }); + }; + abortCtrl.current.abort(); + asyncSearch(); + refetch.current = asyncSearch; + return () => { + didCancel = true; + abortCtrl.current.abort(); + }; + }, + [data.search, notifications.toasts] + ); + + useEffect(() => { + setNetworkRequest((prevRequest) => { + const myRequest = { + ...prevRequest, + defaultIndex, + filterQuery: createFilter(filterQuery), timerange: { interval: '12h', from: startDate, to: endDate, }, - filterQuery: createFilter(filterQuery), - defaultIndex: useUiSetting(DEFAULT_INDEX_KEY), - inspect: isInspected, - }} - > - {({ data, loading, refetch }) => { - const overviewNetwork = getOr({}, `source.OverviewNetwork`, data); - return children({ - id, - inspect: getOr(null, 'source.OverviewNetwork.inspect', data), - overviewNetwork, - loading, - refetch, - }); - }} - - ) -); + }; + if (!skip && !deepEqual(prevRequest, myRequest)) { + return myRequest; + } + return prevRequest; + }); + }, [defaultIndex, endDate, filterQuery, skip, startDate]); -OverviewNetworkComponentQuery.displayName = 'OverviewNetworkComponentQuery'; + useEffect(() => { + overviewNetworkSearch(overviewNetworkRequest); + }, [overviewNetworkRequest, overviewNetworkSearch]); -const makeMapStateToProps = () => { - const getQuery = inputsSelectors.globalQueryByIdSelector(); - const mapStateToProps = (state: State, { id = ID }: OverviewNetworkProps) => { - const { isInspected } = getQuery(state, id); - return { - isInspected, - }; - }; - return mapStateToProps; + return [loading, overviewNetworkResponse]; }; - -const connector = connect(makeMapStateToProps); - -type PropsFromRedux = ConnectedProps; - -export const OverviewNetworkQuery = connector(OverviewNetworkComponentQuery); diff --git a/x-pack/plugins/security_solution/public/overview/containers/overview_network/translations.ts b/x-pack/plugins/security_solution/public/overview/containers/overview_network/translations.ts new file mode 100644 index 0000000000000..ac6b638a4ba01 --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/containers/overview_network/translations.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; + +export const ERROR_NETWORK_OVERVIEW = i18n.translate( + 'xpack.securitySolution.allHost.errorSearchDescription', + { + defaultMessage: `An error has occurred on all hosts search`, + } +); + +export const FAIL_NETWORK_OVERVIEW = i18n.translate( + 'xpack.securitySolution.allHost.failSearchDescription', + { + defaultMessage: `Failed to run search on all hosts`, + } +); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/helpers.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/helpers.ts similarity index 100% rename from x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/helpers.ts rename to x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/helpers.ts diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/index.ts new file mode 100644 index 0000000000000..616e4ed0bac38 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/index.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { get } from 'lodash/fp'; + +import { IEsSearchResponse } from '../../../../../../../../../src/plugins/data/common'; +import { + HostAggEsData, + HostAggEsItem, + HostDetailsStrategyResponse, + HostsQueries, + HostDetailsRequestOptions, +} from '../../../../../../common/search_strategy/security_solution/hosts'; + +import { inspectStringifyObject } from '../../../../../utils/build_query'; +import { SecuritySolutionFactory } from '../../types'; +import { buildHostDetailsQuery } from './query.host_details.dsl'; +import { formatHostItem } from './helpers'; + +export const hostDetails: SecuritySolutionFactory = { + buildDsl: (options: HostDetailsRequestOptions) => buildHostDetailsQuery(options), + parse: async ( + options: HostDetailsRequestOptions, + response: IEsSearchResponse + ): Promise => { + const aggregations: HostAggEsItem = get('aggregations', response.rawResponse) || {}; + const inspect = { + dsl: [inspectStringifyObject(buildHostDetailsQuery(options))], + response: [inspectStringifyObject(response)], + }; + const formattedHostItem = formatHostItem(aggregations); + + return { ...response, inspect, hostDetails: formattedHostItem }; + }, +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.host_overview.dsl.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/query.host_details.dsl.ts similarity index 86% rename from x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.host_overview.dsl.ts rename to x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/query.host_details.dsl.ts index 85cc87414c38e..ade6128f0b052 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.host_overview.dsl.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/details/query.host_details.dsl.ts @@ -6,16 +6,16 @@ import { ISearchRequestParams } from '../../../../../../../../../src/plugins/data/common'; import { cloudFieldsMap, hostFieldsMap } from '../../../../../../common/ecs/ecs_fields'; -import { HostOverviewRequestOptions } from '../../../../../../common/search_strategy/security_solution'; +import { HostDetailsRequestOptions } from '../../../../../../common/search_strategy/security_solution'; import { buildFieldsTermAggregation } from '../../../../../lib/hosts/helpers'; import { reduceFields } from '../../../../../utils/build_query/reduce_fields'; import { HOST_FIELDS } from './helpers'; -export const buildHostOverviewQuery = ({ +export const buildHostDetailsQuery = ({ hostName, defaultIndex, timerange: { from, to }, -}: HostOverviewRequestOptions): ISearchRequestParams => { +}: HostDetailsRequestOptions): ISearchRequestParams => { const esFields = reduceFields(HOST_FIELDS, { ...hostFieldsMap, ...cloudFieldsMap }); const filter = [ diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/index.ts index 38d81c229ac5f..85619cfec62ce 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/index.ts @@ -11,14 +11,16 @@ import { import { SecuritySolutionFactory } from '../types'; import { allHosts } from './all'; -import { overviewHost } from './overview'; +import { hostDetails } from './details'; +import { hostOverview } from './overview'; import { firstLastSeenHost } from './last_first_seen'; import { uncommonProcesses } from './uncommon_processes'; import { authentications } from './authentications'; export const hostsFactory: Record> = { + [HostsQueries.details]: hostDetails, [HostsQueries.hosts]: allHosts, - [HostsQueries.hostOverview]: overviewHost, + [HostsQueries.overview]: hostOverview, [HostsQueries.firstLastSeen]: firstLastSeenHost, [HostsQueries.uncommonProcesses]: uncommonProcesses, [HostsQueries.authentications]: authentications, diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/index.ts index 8bdda9ef895b2..7a28c983ec466 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/index.ts @@ -4,37 +4,63 @@ * you may not use this file except in compliance with the Elastic License. */ -import { get } from 'lodash/fp'; +import { get, getOr } from 'lodash/fp'; import { IEsSearchResponse } from '../../../../../../../../../src/plugins/data/common'; import { - HostAggEsData, - HostAggEsItem, HostOverviewStrategyResponse, HostsQueries, HostOverviewRequestOptions, + OverviewHostHit, } from '../../../../../../common/search_strategy/security_solution/hosts'; - import { inspectStringifyObject } from '../../../../../utils/build_query'; import { SecuritySolutionFactory } from '../../types'; -import { buildHostOverviewQuery } from './query.host_overview.dsl'; -import { formatHostItem } from './helpers'; +import { buildOverviewHostQuery } from './query.overview_host.dsl'; -export const overviewHost: SecuritySolutionFactory = { - buildDsl: (options: HostOverviewRequestOptions) => { - return buildHostOverviewQuery(options); - }, +export const hostOverview: SecuritySolutionFactory = { + buildDsl: (options: HostOverviewRequestOptions) => buildOverviewHostQuery(options), parse: async ( options: HostOverviewRequestOptions, - response: IEsSearchResponse + response: IEsSearchResponse ): Promise => { - const aggregations: HostAggEsItem = get('aggregations', response.rawResponse) || {}; + const aggregations: OverviewHostHit = get('aggregations', response.rawResponse) || {}; const inspect = { - dsl: [inspectStringifyObject(buildHostOverviewQuery(options))], - response: [inspectStringifyObject(response)], + dsl: [inspectStringifyObject(buildOverviewHostQuery(options))], }; - const formattedHostItem = formatHostItem(aggregations); - return { ...response, inspect, hostOverview: formattedHostItem }; + return { + ...response, + inspect, + overviewHost: { + auditbeatAuditd: getOr(null, 'auditd_count.doc_count', aggregations), + auditbeatFIM: getOr(null, 'fim_count.doc_count', aggregations), + auditbeatLogin: getOr(null, 'system_module.login_count.doc_count', aggregations), + auditbeatPackage: getOr(null, 'system_module.package_count.doc_count', aggregations), + auditbeatProcess: getOr(null, 'system_module.process_count.doc_count', aggregations), + auditbeatUser: getOr(null, 'system_module.user_count.doc_count', aggregations), + endgameDns: getOr(null, 'endgame_module.dns_event_count.doc_count', aggregations), + endgameFile: getOr(null, 'endgame_module.file_event_count.doc_count', aggregations), + endgameImageLoad: getOr( + null, + 'endgame_module.image_load_event_count.doc_count', + aggregations + ), + endgameNetwork: getOr(null, 'endgame_module.network_event_count.doc_count', aggregations), + endgameProcess: getOr(null, 'endgame_module.process_event_count.doc_count', aggregations), + endgameRegistry: getOr(null, 'endgame_module.registry_event.doc_count', aggregations), + endgameSecurity: getOr(null, 'endgame_module.security_event_count.doc_count', aggregations), + filebeatSystemModule: getOr(null, 'system_module.filebeat_count.doc_count', aggregations), + winlogbeatSecurity: getOr( + null, + 'winlog_module.security_event_count.doc_count', + aggregations + ), + winlogbeatMWSysmonOperational: getOr( + null, + 'winlog_module.mwsysmon_operational_event_count.doc_count', + response + ), + }, + }; }, }; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.overview_host.dsl.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.overview_host.dsl.ts new file mode 100644 index 0000000000000..cbb098331e112 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.overview_host.dsl.ts @@ -0,0 +1,295 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { createQueryFilterClauses } from '../../../../../utils/build_query'; +import { ISearchRequestParams } from '../../../../../../../../../src/plugins/data/common'; +import { HostOverviewRequestOptions } from '../../../../../../common/search_strategy/security_solution/hosts'; + +export const buildOverviewHostQuery = ({ + filterQuery, + timerange: { from, to }, + defaultIndex, +}: HostOverviewRequestOptions): ISearchRequestParams => { + const filter = [ + ...createQueryFilterClauses(filterQuery), + { + range: { + '@timestamp': { + gte: from, + lte: to, + format: 'strict_date_optional_time', + }, + }, + }, + ]; + + const dslQuery = { + allowNoIndices: true, + index: defaultIndex, + ignoreUnavailable: true, + body: { + aggregations: { + auditd_count: { + filter: { + term: { + 'event.module': 'auditd', + }, + }, + }, + endgame_module: { + filter: { + bool: { + should: [ + { + term: { 'event.module': 'endpoint' }, + }, + { + term: { + 'event.module': 'endgame', + }, + }, + ], + }, + }, + aggs: { + dns_event_count: { + filter: { + bool: { + should: [ + { + bool: { + filter: [ + { term: { 'network.protocol': 'dns' } }, + { term: { 'event.category': 'network' } }, + ], + }, + }, + { + term: { + 'endgame.event_type_full': 'dns_event', + }, + }, + ], + }, + }, + }, + file_event_count: { + filter: { + bool: { + should: [ + { + term: { + 'event.category': 'file', + }, + }, + { + term: { + 'endgame.event_type_full': 'file_event', + }, + }, + ], + }, + }, + }, + image_load_event_count: { + filter: { + bool: { + should: [ + { + bool: { + should: [ + { + term: { + 'event.category': 'library', + }, + }, + { + term: { + 'event.category': 'driver', + }, + }, + ], + }, + }, + { + term: { + 'endgame.event_type_full': 'image_load_event', + }, + }, + ], + }, + }, + }, + network_event_count: { + filter: { + bool: { + should: [ + { + bool: { + filter: [ + { + bool: { + must_not: { + term: { 'network.protocol': 'dns' }, + }, + }, + }, + { + term: { 'event.category': 'network' }, + }, + ], + }, + }, + { + term: { + 'endgame.event_type_full': 'network_event', + }, + }, + ], + }, + }, + }, + process_event_count: { + filter: { + bool: { + should: [ + { + term: { 'event.category': 'process' }, + }, + { + term: { + 'endgame.event_type_full': 'process_event', + }, + }, + ], + }, + }, + }, + registry_event: { + filter: { + bool: { + should: [ + { + term: { 'event.category': 'registry' }, + }, + { + term: { + 'endgame.event_type_full': 'registry_event', + }, + }, + ], + }, + }, + }, + security_event_count: { + filter: { + bool: { + should: [ + { + bool: { + filter: [ + { term: { 'event.category': 'session' } }, + { term: { 'event.category': 'authentication' } }, + ], + }, + }, + { + term: { + 'endgame.event_type_full': 'security_event', + }, + }, + ], + }, + }, + }, + }, + }, + fim_count: { + filter: { + term: { + 'event.module': 'file_integrity', + }, + }, + }, + winlog_module: { + filter: { + term: { + 'agent.type': 'winlogbeat', + }, + }, + aggs: { + mwsysmon_operational_event_count: { + filter: { + term: { + 'winlog.channel': 'Microsoft-Windows-Sysmon/Operational', + }, + }, + }, + security_event_count: { + filter: { + term: { + 'winlog.channel': 'Security', + }, + }, + }, + }, + }, + system_module: { + filter: { + term: { + 'event.module': 'system', + }, + }, + aggs: { + login_count: { + filter: { + term: { + 'event.dataset': 'login', + }, + }, + }, + package_count: { + filter: { + term: { + 'event.dataset': 'package', + }, + }, + }, + process_count: { + filter: { + term: { + 'event.dataset': 'process', + }, + }, + }, + user_count: { + filter: { + term: { + 'event.dataset': 'user', + }, + }, + }, + filebeat_count: { + filter: { + term: { + 'agent.type': 'filebeat', + }, + }, + }, + }, + }, + }, + query: { + bool: { + filter, + }, + }, + size: 0, + track_total_hits: false, + }, + }; + + return dslQuery; +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/index.ts index f2b4f85174797..3b927b8589999 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/index.ts @@ -12,6 +12,7 @@ import { import { SecuritySolutionFactory } from '../types'; import { networkDns } from './dns'; import { networkHttp } from './http'; +import { networkOverview } from './overview'; import { networkTls } from './tls'; import { networkTopCountries } from './top_countries'; import { networkTopNFlow } from './top_n_flow'; @@ -19,6 +20,7 @@ import { networkTopNFlow } from './top_n_flow'; export const networkFactory: Record> = { [NetworkQueries.dns]: networkDns, [NetworkQueries.http]: networkHttp, + [NetworkQueries.overview]: networkOverview, [NetworkQueries.tls]: networkTls, [NetworkQueries.topCountries]: networkTopCountries, [NetworkQueries.topNFlow]: networkTopNFlow, diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/overview/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/overview/index.ts new file mode 100644 index 0000000000000..45cbbfe85bae8 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/overview/index.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { get, getOr } from 'lodash/fp'; + +import { IEsSearchResponse } from '../../../../../../../../../src/plugins/data/common'; +import { + NetworkQueries, + NetworkOverviewStrategyResponse, + NetworkOverviewRequestOptions, + OverviewNetworkHit, +} from '../../../../../../common/search_strategy/security_solution/network'; +import { inspectStringifyObject } from '../../../../../utils/build_query'; +import { SecuritySolutionFactory } from '../../types'; +import { buildOverviewNetworkQuery } from './query.overview_network.dsl'; + +export const networkOverview: SecuritySolutionFactory = { + buildDsl: (options: NetworkOverviewRequestOptions) => buildOverviewNetworkQuery(options), + parse: async ( + options: NetworkOverviewRequestOptions, + response: IEsSearchResponse + ): Promise => { + const aggregations: OverviewNetworkHit = get('aggregations', response.rawResponse) || {}; + const inspect = { + dsl: [inspectStringifyObject(buildOverviewNetworkQuery(options))], + }; + + return { + ...response, + inspect, + overviewNetwork: { + auditbeatSocket: getOr(null, 'unique_socket_count.doc_count', aggregations), + filebeatCisco: getOr( + null, + 'unique_filebeat_count.unique_cisco_count.doc_count', + aggregations + ), + filebeatNetflow: getOr( + null, + 'unique_filebeat_count.unique_netflow_count.doc_count', + aggregations + ), + filebeatPanw: getOr( + null, + 'unique_filebeat_count.unique_panw_count.doc_count', + aggregations + ), + filebeatSuricata: getOr(null, 'unique_suricata_count.doc_count', aggregations), + filebeatZeek: getOr(null, 'unique_zeek_count.doc_count', aggregations), + packetbeatDNS: getOr(null, 'unique_dns_count.doc_count', aggregations), + packetbeatFlow: getOr(null, 'unique_flow_count.doc_count', aggregations), + packetbeatTLS: getOr( + null, + 'unique_packetbeat_count.unique_tls_count.doc_count', + aggregations + ), + }, + }; + }, +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/overview/query.overview_network.dsl.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/overview/query.overview_network.dsl.ts new file mode 100644 index 0000000000000..7f0482644c9a4 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/overview/query.overview_network.dsl.ts @@ -0,0 +1,105 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { createQueryFilterClauses } from '../../../../../utils/build_query'; +import { ISearchRequestParams } from '../../../../../../../../../src/plugins/data/common'; +import { NetworkOverviewRequestOptions } from '../../../../../../common/search_strategy/security_solution/network'; + +export const buildOverviewNetworkQuery = ({ + filterQuery, + timerange: { from, to }, + defaultIndex, +}: NetworkOverviewRequestOptions): ISearchRequestParams => { + const filter = [ + ...createQueryFilterClauses(filterQuery), + { + range: { + '@timestamp': { + gte: from, + lte: to, + format: 'strict_date_optional_time', + }, + }, + }, + ]; + + const dslQuery = { + allowNoIndices: true, + index: defaultIndex, + ignoreUnavailable: true, + body: { + aggregations: { + unique_flow_count: { + filter: { + term: { type: 'flow' }, + }, + }, + unique_dns_count: { + filter: { + term: { type: 'dns' }, + }, + }, + unique_suricata_count: { + filter: { + term: { 'service.type': 'suricata' }, + }, + }, + unique_zeek_count: { + filter: { + term: { 'service.type': 'zeek' }, + }, + }, + unique_socket_count: { + filter: { + term: { 'event.dataset': 'socket' }, + }, + }, + unique_filebeat_count: { + filter: { + term: { 'agent.type': 'filebeat' }, + }, + aggs: { + unique_netflow_count: { + filter: { + term: { 'input.type': 'netflow' }, + }, + }, + unique_panw_count: { + filter: { + term: { 'event.module': 'panw' }, + }, + }, + unique_cisco_count: { + filter: { + term: { 'event.module': 'cisco' }, + }, + }, + }, + }, + unique_packetbeat_count: { + filter: { + term: { 'agent.type': 'packetbeat' }, + }, + aggs: { + unique_tls_count: { + filter: { + term: { 'network.protocol': 'tls' }, + }, + }, + }, + }, + }, + query: { + bool: { + filter, + }, + }, + size: 0, + track_total_hits: false, + }, + }; + + return dslQuery; +}; diff --git a/x-pack/test/api_integration/apis/security_solution/hosts.ts b/x-pack/test/api_integration/apis/security_solution/hosts.ts index 2904935719d2c..621718013db7f 100644 --- a/x-pack/test/api_integration/apis/security_solution/hosts.ts +++ b/x-pack/test/api_integration/apis/security_solution/hosts.ts @@ -13,7 +13,7 @@ import { GetHostsTableQuery, HostsFields, } from '../../../../plugins/security_solution/public/graphql/types'; -import { HostOverviewQuery } from '../../../../plugins/security_solution/public/hosts/containers/hosts/overview/host_overview.gql_query'; +import { HostOverviewQuery } from '../../../../plugins/security_solution/public/hosts/containers/hosts/details/host_overview.gql_query'; import { HostFirstLastSeenGqlQuery } from '../../../../plugins/security_solution/public/hosts/containers/hosts/first_last_seen/first_last_seen.gql_query'; import { HostsTableQuery } from '../../../../plugins/security_solution/public/hosts/containers/hosts/hosts_table.gql_query'; import { FtrProviderContext } from '../../ftr_provider_context'; From eecb0e59220c7c29811842a7911b6b2a3b872b5e Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 8 Sep 2020 09:59:20 +0200 Subject: [PATCH 12/58] fix empty string in selected indices (#76855) --- .../indices_and_data_streams_field.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_settings/fields/indices_and_data_streams_field/indices_and_data_streams_field.tsx b/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_settings/fields/indices_and_data_streams_field/indices_and_data_streams_field.tsx index 6f89427516453..54ea73a3e7a96 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_settings/fields/indices_and_data_streams_field/indices_and_data_streams_field.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_settings/fields/indices_and_data_streams_field/indices_and_data_streams_field.tsx @@ -67,7 +67,7 @@ export const IndicesAndDataStreamsField: FunctionComponent = ({ // We assume all indices if the config has no indices entry or if we receive an empty array const [isAllIndices, setIsAllIndices] = useState( - !config.indices || (Array.isArray(config.indices) && config.indices.length === 0) + config.indices == null || (Array.isArray(config.indices) && config.indices.length === 0) ); const onUpdate = (data: IndicesConfig) => { @@ -135,12 +135,17 @@ export const IndicesAndDataStreamsField: FunctionComponent = ({ ); onUpdate({ indices: undefined }); } else { - onUpdate({ - indices: - selectIndicesMode === 'custom' - ? indexPatterns.join(',') - : [...(indicesAndDataStreamsSelection || [])], - }); + _onUpdate( + { + indices: + selectIndicesMode === 'custom' + ? indexPatterns.join(',') + : [...(indicesAndDataStreamsSelection || [])], + }, + { + validateIndicesCount: true, + } + ); } }} /> From 28c5f27513515fcfa632a1ad5c451d59694b5d41 Mon Sep 17 00:00:00 2001 From: Liza Katz Date: Tue, 8 Sep 2020 12:34:40 +0300 Subject: [PATCH 13/58] [Search] Use async es client endpoints (#76872) * Use ES Client asyncSearch * Rename to queryOptions * Simplify options * Update jest test and use delete route * Common async options --- .../server/search/es_search_strategy.test.ts | 61 +++++++++---------- .../server/search/es_search_strategy.ts | 47 ++++++-------- 2 files changed, 47 insertions(+), 61 deletions(-) diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts index 054baa6ac81d1..a287f72ca9161 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts @@ -35,12 +35,24 @@ const mockRollupResponse = { describe('ES search strategy', () => { const mockApiCaller = jest.fn(); + const mockGetCaller = jest.fn(); + const mockSubmitCaller = jest.fn(); const mockLogger: any = { debug: () => {}, }; const mockContext = { core: { - elasticsearch: { client: { asCurrentUser: { transport: { request: mockApiCaller } } } }, + elasticsearch: { + client: { + asCurrentUser: { + asyncSearch: { + get: mockGetCaller, + submit: mockSubmitCaller, + }, + transport: { request: mockApiCaller }, + }, + }, + }, }, }; const mockConfig$ = pluginInitializerContextConfigMock({}).legacy.globalConfig$; @@ -56,47 +68,32 @@ describe('ES search strategy', () => { }); it('makes a POST request to async search with params when no ID is provided', async () => { - mockApiCaller.mockResolvedValueOnce(mockAsyncResponse); + mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); const params = { index: 'logstash-*', body: { query: {} } }; const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); await esSearch.search((mockContext as unknown) as RequestHandlerContext, { params }); - expect(mockApiCaller).toBeCalled(); - const { method, path, body } = mockApiCaller.mock.calls[0][0]; - expect(method).toBe('POST'); - expect(path).toBe('/logstash-*/_async_search'); - expect(body).toEqual({ query: {} }); + expect(mockSubmitCaller).toBeCalled(); + const request = mockSubmitCaller.mock.calls[0][0]; + expect(request.index).toEqual(params.index); + expect(request.body).toEqual(params.body); }); it('makes a GET request to async search with ID when ID is provided', async () => { - mockApiCaller.mockResolvedValueOnce(mockAsyncResponse); + mockGetCaller.mockResolvedValueOnce(mockAsyncResponse); const params = { index: 'logstash-*', body: { query: {} } }; const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); await esSearch.search((mockContext as unknown) as RequestHandlerContext, { id: 'foo', params }); - expect(mockApiCaller).toBeCalled(); - const { method, path, body } = mockApiCaller.mock.calls[0][0]; - expect(method).toBe('GET'); - expect(path).toBe('/_async_search/foo'); - expect(body).toEqual(undefined); - }); - - it('encodes special characters in the path', async () => { - mockApiCaller.mockResolvedValueOnce(mockAsyncResponse); - - const params = { index: 'foo-程', body: {} }; - const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); - - await esSearch.search((mockContext as unknown) as RequestHandlerContext, { params }); - - expect(mockApiCaller).toBeCalled(); - const { method, path } = mockApiCaller.mock.calls[0][0]; - expect(method).toBe('POST'); - expect(path).toBe('/foo-%E7%A8%8B/_async_search'); + expect(mockGetCaller).toBeCalled(); + const request = mockGetCaller.mock.calls[0][0]; + expect(request.id).toEqual('foo'); + expect(request).toHaveProperty('wait_for_completion_timeout'); + expect(request).toHaveProperty('keep_alive'); }); it('calls the rollup API if the index is a rollup type', async () => { @@ -117,16 +114,16 @@ describe('ES search strategy', () => { }); it('sets wait_for_completion_timeout and keep_alive in the request', async () => { - mockApiCaller.mockResolvedValueOnce(mockAsyncResponse); + mockSubmitCaller.mockResolvedValueOnce(mockAsyncResponse); const params = { index: 'foo-*', body: {} }; const esSearch = await enhancedEsSearchStrategyProvider(mockConfig$, mockLogger); await esSearch.search((mockContext as unknown) as RequestHandlerContext, { params }); - expect(mockApiCaller).toBeCalled(); - const { querystring } = mockApiCaller.mock.calls[0][0]; - expect(querystring).toHaveProperty('wait_for_completion_timeout'); - expect(querystring).toHaveProperty('keep_alive'); + expect(mockSubmitCaller).toBeCalled(); + const request = mockSubmitCaller.mock.calls[0][0]; + expect(request).toHaveProperty('wait_for_completion_timeout'); + expect(request).toHaveProperty('keep_alive'); }); }); diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts index 67a42b9954c9d..4ace1c4c5385b 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts @@ -70,9 +70,8 @@ export const enhancedEsSearchStrategyProvider = ( const cancel = async (context: RequestHandlerContext, id: string) => { logger.debug(`cancel ${id}`); - await context.core.elasticsearch.client.asCurrentUser.transport.request({ - method: 'DELETE', - path: encodeURI(`/_async_search/${id}`), + await context.core.elasticsearch.client.asCurrentUser.asyncSearch.delete({ + id, }); }; @@ -84,39 +83,29 @@ async function asyncSearch( request: IEnhancedEsSearchRequest, options?: ISearchOptions ): Promise { - const { timeout = undefined, restTotalHitsAsInt = undefined, ...params } = { - ...request.params, - }; - - params.trackTotalHits = true; // Get the exact count of hits - - // If we have an ID, then just poll for that ID, otherwise send the entire request body - const { body = undefined, index = undefined, ...queryParams } = request.id ? {} : params; - - const method = request.id ? 'GET' : 'POST'; - const path = encodeURI(request.id ? `/_async_search/${request.id}` : `/${index}/_async_search`); - - // Only report partial results every 64 shards; this should be reduced when we actually display partial results - const batchedReduceSize = request.id ? undefined : 64; + let esResponse; const asyncOptions = { waitForCompletionTimeout: '100ms', // Wait up to 100ms for the response to return keepAlive: '1m', // Extend the TTL for this search request by one minute }; - const querystring = toSnakeCase({ - ...asyncOptions, - ...(batchedReduceSize && { batchedReduceSize }), - ...queryParams, - }); + // If we have an ID, then just poll for that ID, otherwise send the entire request body + if (!request.id) { + const submitOptions = toSnakeCase({ + batchedReduceSize: 64, // Only report partial results every 64 shards; this should be reduced when we actually display partial results + trackTotalHits: true, // Get the exact count of hits + ...asyncOptions, + ...request.params, + }); - // TODO: replace with async endpoints once https://github.com/elastic/elasticsearch-js/issues/1280 is resolved - const esResponse = await client.transport.request({ - method, - path, - body, - querystring, - }); + esResponse = await client.asyncSearch.submit(submitOptions); + } else { + esResponse = await client.asyncSearch.get({ + id: request.id, + ...toSnakeCase(asyncOptions), + }); + } const { id, response, is_partial: isPartial, is_running: isRunning } = esResponse.body; return { From f9d9538fc0618222c3625775061af79be2f9b09e Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Tue, 8 Sep 2020 13:03:00 +0200 Subject: [PATCH 14/58] GS: use the request's basePath when processing server-side result urls (#76747) --- x-pack/plugins/global_search/common/types.ts | 4 +-- .../server/services/search_service.test.ts | 6 ++-- .../server/services/search_service.ts | 4 ++- .../server/services/utils.test.ts | 34 +++++++++++++++++++ .../global_search/server/services/utils.ts | 20 +++++++++++ 5 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 x-pack/plugins/global_search/server/services/utils.test.ts create mode 100644 x-pack/plugins/global_search/server/services/utils.ts diff --git a/x-pack/plugins/global_search/common/types.ts b/x-pack/plugins/global_search/common/types.ts index 26940806a4ecd..a08ecaf41b213 100644 --- a/x-pack/plugins/global_search/common/types.ts +++ b/x-pack/plugins/global_search/common/types.ts @@ -51,12 +51,12 @@ export interface GlobalSearchProviderResult { icon?: string; /** * The url associated with this result. - * This can be either an absolute url, a path relative to the basePath, or a structure specifying if the basePath should be prepended. + * This can be either an absolute url, a path relative to the incoming request's basePath, or a structure specifying if the basePath should be prepended. * * @example * `result.url = 'https://kibana-instance:8080/base-path/app/my-app/my-result-type/id';` * `result.url = '/app/my-app/my-result-type/id';` - * `result.url = { path: '/base-path/app/my-app/my-result-type/id', prependBasePath: false };` + * `result.url = { path: '/base-path/s/my-other-space/app/my-app/my-result-type/id', prependBasePath: false };` */ url: GlobalSearchProviderResultUrl; /** the score of the result, from 1 (lowest) to 100 (highest) */ diff --git a/x-pack/plugins/global_search/server/services/search_service.test.ts b/x-pack/plugins/global_search/server/services/search_service.test.ts index fd705b4286680..2460100a46dbb 100644 --- a/x-pack/plugins/global_search/server/services/search_service.test.ts +++ b/x-pack/plugins/global_search/server/services/search_service.test.ts @@ -62,8 +62,8 @@ describe('SearchService', () => { beforeEach(() => { service = new SearchService(); - basePath = httpServiceMock.createBasePath(); - basePath.prepend.mockImplementation((path) => `/base-path${path}`); + basePath = httpServiceMock.createBasePath('/base-path'); + basePath.get.mockReturnValue('/base-path/s/space'); coreStart = coreMock.createStart(); licenseChecker = licenseCheckerMock.create(); }); @@ -283,7 +283,7 @@ describe('SearchService', () => { expect(batch.results).toHaveLength(2); expect(batch.results[0]).toEqual({ ...resultA, - url: '/base-path/foo/bar', + url: '/base-path/s/space/foo/bar', }); expect(batch.results[1]).toEqual({ ...resultB, diff --git a/x-pack/plugins/global_search/server/services/search_service.ts b/x-pack/plugins/global_search/server/services/search_service.ts index 12eada2a1385e..d79f3781c6bec 100644 --- a/x-pack/plugins/global_search/server/services/search_service.ts +++ b/x-pack/plugins/global_search/server/services/search_service.ts @@ -17,6 +17,7 @@ import { processProviderResult } from '../../common/process_result'; import { GlobalSearchConfigType } from '../config'; import { getContextFactory, GlobalSearchContextFactory } from './context'; import { GlobalSearchResultProvider, GlobalSearchFindOptions } from '../types'; +import { getRequestBasePath } from './utils'; /** @public */ export interface SearchServiceSetup { @@ -132,6 +133,7 @@ export class SearchService { } const context = this.contextFactory!(request); + const basePath = getRequestBasePath(request, this.basePath!); const timeout$ = timer(this.config!.search_timeout.asMilliseconds()).pipe(map(mapToUndefined)); const aborted$ = options.aborted$ ? merge(options.aborted$, timeout$) : timeout$; @@ -143,7 +145,7 @@ export class SearchService { }; const processResult = (result: GlobalSearchProviderResult) => - processProviderResult(result, this.basePath!); + processProviderResult(result, basePath); const providersResults$ = [...this.providers.values()].map((provider) => provider.find(term, providerOptions, context).pipe( diff --git a/x-pack/plugins/global_search/server/services/utils.test.ts b/x-pack/plugins/global_search/server/services/utils.test.ts new file mode 100644 index 0000000000000..232f72818f330 --- /dev/null +++ b/x-pack/plugins/global_search/server/services/utils.test.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; + * you may not use this file except in compliance with the Elastic License. + */ + +import { httpServiceMock, httpServerMock } from '../../../../../src/core/server/mocks'; +import { getRequestBasePath } from './utils'; + +describe('getRequestBasePath', () => { + let basePath: ReturnType; + let request: ReturnType; + + beforeEach(() => { + basePath = httpServiceMock.createBasePath(); + request = httpServerMock.createKibanaRequest(); + }); + + it('return a IBasePath prepending the request basePath', () => { + basePath.get.mockReturnValue('/base-path/s/my-space'); + const requestBasePath = getRequestBasePath(request, basePath); + + const fullPath = requestBasePath.prepend('/app/dashboard/some-id'); + + expect(fullPath).toBe('/base-path/s/my-space/app/dashboard/some-id'); + + expect(basePath.get).toHaveBeenCalledTimes(1); + expect(basePath.get).toHaveBeenCalledWith(request); + + expect(basePath.prepend).not.toHaveBeenCalled(); + }); +}); + +httpServiceMock.createBasePath(); diff --git a/x-pack/plugins/global_search/server/services/utils.ts b/x-pack/plugins/global_search/server/services/utils.ts new file mode 100644 index 0000000000000..18a01cfbe9757 --- /dev/null +++ b/x-pack/plugins/global_search/server/services/utils.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import type { IBasePath, KibanaRequest } from 'src/core/server'; +import type { IBasePath as BasePathAccessor } from '../../common/utils'; + +export const getRequestBasePath = ( + request: KibanaRequest, + basePath: IBasePath +): BasePathAccessor => { + const requestBasePath = basePath.get(request); + return { + prepend: (path) => { + return `${requestBasePath}/${path}`.replace(/\/{2,}/g, '/'); + }, + }; +}; From 39f8fc6b87f3fab49325fe339cf3f916a2fa4f4d Mon Sep 17 00:00:00 2001 From: Sonja Krause-Harder Date: Tue, 8 Sep 2020 13:12:26 +0200 Subject: [PATCH 15/58] [Ingest Manager] Remove package cache on package uninstall (#76873) * On uninstall, remove package from cache. * Really remove package archive and contents from cache. * Refactor * move deletePackageCache to registry/index.ts * clean up imports --- .../server/services/epm/packages/remove.ts | 9 +++++-- .../server/services/epm/registry/cache.ts | 3 +++ .../server/services/epm/registry/index.ts | 24 ++++++++++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/ingest_manager/server/services/epm/packages/remove.ts b/x-pack/plugins/ingest_manager/server/services/epm/packages/remove.ts index bc71ead34c3d4..71eee1ee82c90 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/packages/remove.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/packages/remove.ts @@ -13,7 +13,7 @@ import { getInstallation, savedObjectTypes } from './index'; import { deletePipeline } from '../elasticsearch/ingest_pipeline/'; import { installIndexPatterns } from '../kibana/index_pattern/install'; import { packagePolicyService, appContextService } from '../..'; -import { splitPkgKey } from '../registry'; +import { splitPkgKey, deletePackageCache, getArchiveInfo } from '../registry'; export async function removeInstallation(options: { savedObjectsClient: SavedObjectsClientContract; @@ -22,7 +22,7 @@ export async function removeInstallation(options: { }): Promise { const { savedObjectsClient, pkgkey, callCluster } = options; // TODO: the epm api should change to /name/version so we don't need to do this - const { pkgName } = splitPkgKey(pkgkey); + const { pkgName, pkgVersion } = splitPkgKey(pkgkey); const installation = await getInstallation({ savedObjectsClient, pkgName }); if (!installation) throw Boom.badRequest(`${pkgName} is not installed`); if (installation.removable === false) @@ -50,6 +50,11 @@ export async function removeInstallation(options: { // could also update with [] or some other state await savedObjectsClient.delete(PACKAGES_SAVED_OBJECT_TYPE, pkgName); + // remove the package archive and its contents from the cache so that a reinstall fetches + // a fresh copy from the registry + const paths = await getArchiveInfo(pkgName, pkgVersion); + deletePackageCache(pkgName, pkgVersion, paths); + // successful delete's in SO client return {}. return something more useful return installedAssets; } diff --git a/x-pack/plugins/ingest_manager/server/services/epm/registry/cache.ts b/x-pack/plugins/ingest_manager/server/services/epm/registry/cache.ts index e9c8317a6251d..b7c1e8c2069d6 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/registry/cache.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/registry/cache.ts @@ -18,3 +18,6 @@ export const getArchiveLocation = (name: string, version: string) => export const setArchiveLocation = (name: string, version: string, location: string) => archiveLocationCache.set(pkgToPkgKey({ name, version }), location); + +export const deleteArchiveLocation = (name: string, version: string) => + archiveLocationCache.delete(pkgToPkgKey({ name, version })); diff --git a/x-pack/plugins/ingest_manager/server/services/epm/registry/index.ts b/x-pack/plugins/ingest_manager/server/services/epm/registry/index.ts index 61c8cd4aabb7b..96f7530641390 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/registry/index.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/registry/index.ts @@ -17,7 +17,15 @@ import { RegistrySearchResults, RegistrySearchResult, } from '../../../types'; -import { cacheGet, cacheSet, cacheHas, getArchiveLocation, setArchiveLocation } from './cache'; +import { + cacheGet, + cacheSet, + cacheDelete, + cacheHas, + getArchiveLocation, + setArchiveLocation, + deleteArchiveLocation, +} from './cache'; import { ArchiveEntry, untarBuffer, unzipBuffer } from './extract'; import { fetchUrl, getResponse, getResponseStream } from './requests'; import { streamToBuffer } from './streams'; @@ -241,3 +249,17 @@ export function groupPathsByService(paths: string[]): AssetsGroupedByServiceByTy // elasticsearch: assets.elasticsearch, }; } + +export const deletePackageCache = (name: string, version: string, paths: string[]) => { + const archiveLocation = getArchiveLocation(name, version); + if (archiveLocation) { + // delete cached archive + cacheDelete(archiveLocation); + + // delete cached archive location + deleteArchiveLocation(name, version); + } + // delete cached archive contents + // this has been populated in Registry.getArchiveInfo() + paths.forEach((path) => cacheDelete(path)); +}; From 2f1c0127e2adf8407109cf8c65343f99aeb2e4e2 Mon Sep 17 00:00:00 2001 From: Mikhail Shustov Date: Tue, 8 Sep 2020 14:28:29 +0300 Subject: [PATCH 16/58] Deterministic output for doc types (#76890) * disable incremental builds for public type generation. They generate non-deterministic types https://github.com/microsoft/rushstack/issues/1958 * do not infer public types --- ...a-plugin-core-server.appenderconfigtype.md | 2 +- src/core/server/index.ts | 13 +- .../logging/appenders/legacy_appender.ts | 5 + .../server/logging/appenders/appenders.ts | 13 +- .../appenders/console/console_appender.ts | 8 +- .../logging/appenders/file/file_appender.ts | 8 +- .../server/logging/layouts/json_layout.ts | 6 +- src/core/server/logging/layouts/layouts.ts | 2 +- .../server/logging/layouts/pattern_layout.ts | 8 +- src/core/server/logging/logging_config.ts | 4 +- src/core/server/server.api.md | 123 +++++------------- tsconfig.types.json | 1 + 12 files changed, 77 insertions(+), 116 deletions(-) diff --git a/docs/development/core/server/kibana-plugin-core-server.appenderconfigtype.md b/docs/development/core/server/kibana-plugin-core-server.appenderconfigtype.md index 9c70e658014b3..0838572f26f49 100644 --- a/docs/development/core/server/kibana-plugin-core-server.appenderconfigtype.md +++ b/docs/development/core/server/kibana-plugin-core-server.appenderconfigtype.md @@ -8,5 +8,5 @@ Signature: ```typescript -export declare type AppenderConfigType = TypeOf; +export declare type AppenderConfigType = ConsoleAppenderConfig | FileAppenderConfig | LegacyAppenderConfig; ``` diff --git a/src/core/server/index.ts b/src/core/server/index.ts index 5422cbc2180ef..c17d3d7546779 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -39,6 +39,7 @@ * @packageDocumentation */ +import { Type } from '@kbn/config-schema'; import { ElasticsearchServiceSetup, ILegacyScopedClusterClient, @@ -46,7 +47,6 @@ import { ElasticsearchServiceStart, IScopedClusterClient, } from './elasticsearch'; - import { HttpServiceSetup, HttpServiceStart } from './http'; import { HttpResources } from './http_resources'; @@ -63,12 +63,7 @@ import { CapabilitiesSetup, CapabilitiesStart } from './capabilities'; import { MetricsServiceStart } from './metrics'; import { StatusServiceSetup } from './status'; import { Auditor, AuditTrailSetup, AuditTrailStart } from './audit_trail'; -import { - LoggingServiceSetup, - appendersSchema, - loggerContextConfigSchema, - loggerSchema, -} from './logging'; +import { AppenderConfigType, appendersSchema, LoggingServiceSetup } from './logging'; export { AuditableEvent, Auditor, AuditorFactory, AuditTrailSetup } from './audit_trail'; export { bootstrap } from './bootstrap'; @@ -497,8 +492,6 @@ export const config = { schema: elasticsearchConfigSchema, }, logging: { - appenders: appendersSchema, - loggers: loggerSchema, - loggerContext: loggerContextConfigSchema, + appenders: appendersSchema as Type, }, }; diff --git a/src/core/server/legacy/logging/appenders/legacy_appender.ts b/src/core/server/legacy/logging/appenders/legacy_appender.ts index 0c2f4ce93c3b8..a5d36423ba4c6 100644 --- a/src/core/server/legacy/logging/appenders/legacy_appender.ts +++ b/src/core/server/legacy/logging/appenders/legacy_appender.ts @@ -23,6 +23,11 @@ import { LogRecord } from '../../../logging/log_record'; import { LegacyLoggingServer } from '../legacy_logging_server'; import { LegacyVars } from '../../types'; +export interface LegacyAppenderConfig { + kind: 'legacy-appender'; + legacyLoggingConfig?: any; +} + /** * Simple appender that just forwards `LogRecord` to the legacy KbnServer log. * @internal diff --git a/src/core/server/logging/appenders/appenders.ts b/src/core/server/logging/appenders/appenders.ts index 3b90a10a1a76c..edfce4988275a 100644 --- a/src/core/server/logging/appenders/appenders.ts +++ b/src/core/server/logging/appenders/appenders.ts @@ -17,14 +17,17 @@ * under the License. */ -import { schema, TypeOf } from '@kbn/config-schema'; +import { schema } from '@kbn/config-schema'; import { assertNever } from '../../../utils'; -import { LegacyAppender } from '../../legacy/logging/appenders/legacy_appender'; +import { + LegacyAppender, + LegacyAppenderConfig, +} from '../../legacy/logging/appenders/legacy_appender'; import { Layouts } from '../layouts/layouts'; import { LogRecord } from '../log_record'; -import { ConsoleAppender } from './console/console_appender'; -import { FileAppender } from './file/file_appender'; +import { ConsoleAppender, ConsoleAppenderConfig } from './console/console_appender'; +import { FileAppender, FileAppenderConfig } from './file/file_appender'; /** * Config schema for validting the shape of the `appenders` key in in {@link LoggerContextConfigType} or @@ -39,7 +42,7 @@ export const appendersSchema = schema.oneOf([ ]); /** @public */ -export type AppenderConfigType = TypeOf; +export type AppenderConfigType = ConsoleAppenderConfig | FileAppenderConfig | LegacyAppenderConfig; /** * Entity that can append `LogRecord` instances to file, stdout, memory or whatever diff --git a/src/core/server/logging/appenders/console/console_appender.ts b/src/core/server/logging/appenders/console/console_appender.ts index b4420c12a23ca..a54674b1d347c 100644 --- a/src/core/server/logging/appenders/console/console_appender.ts +++ b/src/core/server/logging/appenders/console/console_appender.ts @@ -19,13 +19,19 @@ import { schema } from '@kbn/config-schema'; -import { Layout, Layouts } from '../../layouts/layouts'; +import { Layout, Layouts, LayoutConfigType } from '../../layouts/layouts'; import { LogRecord } from '../../log_record'; import { DisposableAppender } from '../appenders'; const { literal, object } = schema; +export interface ConsoleAppenderConfig { + kind: 'console'; + layout: LayoutConfigType; +} + /** + * * Appender that formats all the `LogRecord` instances it receives and logs them via built-in `console`. * @internal */ diff --git a/src/core/server/logging/appenders/file/file_appender.ts b/src/core/server/logging/appenders/file/file_appender.ts index 728e82ebcec9a..a0e484cd87c8f 100644 --- a/src/core/server/logging/appenders/file/file_appender.ts +++ b/src/core/server/logging/appenders/file/file_appender.ts @@ -20,10 +20,16 @@ import { schema } from '@kbn/config-schema'; import { createWriteStream, WriteStream } from 'fs'; -import { Layout, Layouts } from '../../layouts/layouts'; +import { Layout, Layouts, LayoutConfigType } from '../../layouts/layouts'; import { LogRecord } from '../../log_record'; import { DisposableAppender } from '../appenders'; +export interface FileAppenderConfig { + kind: 'file'; + layout: LayoutConfigType; + path: string; +} + /** * Appender that formats all the `LogRecord` instances it receives and writes them to the specified file. * @internal diff --git a/src/core/server/logging/layouts/json_layout.ts b/src/core/server/logging/layouts/json_layout.ts index 04416184a5957..37eb6b8c4806e 100644 --- a/src/core/server/logging/layouts/json_layout.ts +++ b/src/core/server/logging/layouts/json_layout.ts @@ -19,7 +19,7 @@ import moment from 'moment-timezone'; import { merge } from 'lodash'; -import { schema, TypeOf } from '@kbn/config-schema'; +import { schema } from '@kbn/config-schema'; import { LogRecord } from '../log_record'; import { Layout } from './layouts'; @@ -31,7 +31,9 @@ const jsonLayoutSchema = object({ }); /** @internal */ -export type JsonLayoutConfigType = TypeOf; +export interface JsonLayoutConfigType { + kind: 'json'; +} /** * Layout that just converts `LogRecord` into JSON string. diff --git a/src/core/server/logging/layouts/layouts.ts b/src/core/server/logging/layouts/layouts.ts index 0e6a6360cab2e..124c007bae104 100644 --- a/src/core/server/logging/layouts/layouts.ts +++ b/src/core/server/logging/layouts/layouts.ts @@ -26,7 +26,7 @@ import { PatternLayout, PatternLayoutConfigType } from './pattern_layout'; const { oneOf } = schema; -type LayoutConfigType = PatternLayoutConfigType | JsonLayoutConfigType; +export type LayoutConfigType = PatternLayoutConfigType | JsonLayoutConfigType; /** * Entity that can format `LogRecord` instance into a string. diff --git a/src/core/server/logging/layouts/pattern_layout.ts b/src/core/server/logging/layouts/pattern_layout.ts index 7839345a3703b..5dfc8aca77f18 100644 --- a/src/core/server/logging/layouts/pattern_layout.ts +++ b/src/core/server/logging/layouts/pattern_layout.ts @@ -17,7 +17,7 @@ * under the License. */ -import { schema, TypeOf } from '@kbn/config-schema'; +import { schema } from '@kbn/config-schema'; import { LogRecord } from '../log_record'; import { Layout } from './layouts'; @@ -58,7 +58,11 @@ const conversions: Conversion[] = [ ]; /** @internal */ -export type PatternLayoutConfigType = TypeOf; +export interface PatternLayoutConfigType { + kind: 'pattern'; + highlight?: boolean; + pattern?: string; +} /** * Layout that formats `LogRecord` using the `pattern` string with optional diff --git a/src/core/server/logging/logging_config.ts b/src/core/server/logging/logging_config.ts index a6aafabeb970c..a6ab15dc29fdf 100644 --- a/src/core/server/logging/logging_config.ts +++ b/src/core/server/logging/logging_config.ts @@ -96,7 +96,9 @@ export const config = { }), }; -export type LoggingConfigType = TypeOf; +export type LoggingConfigType = Omit, 'appenders'> & { + appenders: Map; +}; /** * Config schema for validating the inputs to the {@link LoggingServiceStart.configure} API. diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index 3270e5a09afde..081554cd17f25 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -153,10 +153,12 @@ import { UpdateDocumentByQueryParams } from 'elasticsearch'; import { UpdateDocumentParams } from 'elasticsearch'; import { Url } from 'url'; -// Warning: (ae-forgotten-export) The symbol "appendersSchema" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "ConsoleAppenderConfig" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "FileAppenderConfig" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "LegacyAppenderConfig" needs to be exported by the entry point index.d.ts // // @public (undocumented) -export type AppenderConfigType = TypeOf; +export type AppenderConfigType = ConsoleAppenderConfig | FileAppenderConfig | LegacyAppenderConfig; // @public export function assertNever(x: never): never; @@ -325,108 +327,45 @@ export type CapabilitiesSwitcher = (request: KibanaRequest, uiCapabilities: Capa export const config: { elasticsearch: { schema: import("@kbn/config-schema").ObjectType<{ - sniffOnStart: import("@kbn/config-schema").Type; - sniffInterval: import("@kbn/config-schema").Type; - sniffOnConnectionFault: import("@kbn/config-schema").Type; - hosts: import("@kbn/config-schema").Type; - preserveHost: import("@kbn/config-schema").Type; - username: import("@kbn/config-schema").Type; - password: import("@kbn/config-schema").Type; - requestHeadersWhitelist: import("@kbn/config-schema").Type; - customHeaders: import("@kbn/config-schema").Type>; - shardTimeout: import("@kbn/config-schema").Type; - requestTimeout: import("@kbn/config-schema").Type; - pingTimeout: import("@kbn/config-schema").Type; - startupTimeout: import("@kbn/config-schema").Type; - logQueries: import("@kbn/config-schema").Type; + sniffOnStart: Type; + sniffInterval: Type; + sniffOnConnectionFault: Type; + hosts: Type; + preserveHost: Type; + username: Type; + password: Type; + requestHeadersWhitelist: Type; + customHeaders: Type>; + shardTimeout: Type; + requestTimeout: Type; + pingTimeout: Type; + startupTimeout: Type; + logQueries: Type; ssl: import("@kbn/config-schema").ObjectType<{ - verificationMode: import("@kbn/config-schema").Type<"none" | "certificate" | "full">; - certificateAuthorities: import("@kbn/config-schema").Type; - certificate: import("@kbn/config-schema").Type; - key: import("@kbn/config-schema").Type; - keyPassphrase: import("@kbn/config-schema").Type; + verificationMode: Type<"none" | "certificate" | "full">; + certificateAuthorities: Type; + certificate: Type; + key: Type; + keyPassphrase: Type; keystore: import("@kbn/config-schema").ObjectType<{ - path: import("@kbn/config-schema").Type; - password: import("@kbn/config-schema").Type; + path: Type; + password: Type; }>; truststore: import("@kbn/config-schema").ObjectType<{ - path: import("@kbn/config-schema").Type; - password: import("@kbn/config-schema").Type; + path: Type; + password: Type; }>; - alwaysPresentCertificate: import("@kbn/config-schema").Type; + alwaysPresentCertificate: Type; }>; - apiVersion: import("@kbn/config-schema").Type; + apiVersion: Type; healthCheck: import("@kbn/config-schema").ObjectType<{ - delay: import("@kbn/config-schema").Type; + delay: Type; }>; ignoreVersionMismatch: import("@kbn/config-schema/target/types/types").ConditionalType; }>; }; logging: { - appenders: import("@kbn/config-schema").Type | Readonly<{ - pattern?: string | undefined; - highlight?: boolean | undefined; - } & { - kind: "pattern"; - }>; - kind: "console"; - }> | Readonly<{} & { - path: string; - layout: Readonly<{} & { - kind: "json"; - }> | Readonly<{ - pattern?: string | undefined; - highlight?: boolean | undefined; - } & { - kind: "pattern"; - }>; - kind: "file"; - }> | Readonly<{ - legacyLoggingConfig?: any; - } & { - kind: "legacy-appender"; - }>>; - loggers: import("@kbn/config-schema").ObjectType<{ - appenders: import("@kbn/config-schema").Type; - context: import("@kbn/config-schema").Type; - level: import("@kbn/config-schema").Type; - }>; - loggerContext: import("@kbn/config-schema").ObjectType<{ - appenders: import("@kbn/config-schema").Type | Readonly<{ - pattern?: string | undefined; - highlight?: boolean | undefined; - } & { - kind: "pattern"; - }>; - kind: "console"; - }> | Readonly<{} & { - path: string; - layout: Readonly<{} & { - kind: "json"; - }> | Readonly<{ - pattern?: string | undefined; - highlight?: boolean | undefined; - } & { - kind: "pattern"; - }>; - kind: "file"; - }> | Readonly<{ - legacyLoggingConfig?: any; - } & { - kind: "legacy-appender"; - }>>>; - loggers: import("@kbn/config-schema").Type[]>; - }>; + appenders: Type; }; }; diff --git a/tsconfig.types.json b/tsconfig.types.json index e8cd0a5209bbe..4b7dfa2d014a3 100644 --- a/tsconfig.types.json +++ b/tsconfig.types.json @@ -1,6 +1,7 @@ { "extends": "./tsconfig.base.json", "compilerOptions": { + "incremental": false, "declaration": true, "outDir": "./target/types", "stripInternal": false, From dc28e0ec48f58c1fc42e1c4aa8ad28eaec6fff3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Tue, 8 Sep 2020 14:02:45 +0100 Subject: [PATCH 17/58] [APM] Trace timeline: Multi-fold function doesn't update when all accordions are collapsed or expanded (#76899) * update outside state when expanding or collapsing the entry transaction * reverting icons --- .../Waterfall/accordion_waterfall.tsx | 12 ++++++++---- .../WaterfallContainer/Waterfall/index.tsx | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/TransactionDetails/WaterfallWithSummmary/WaterfallContainer/Waterfall/accordion_waterfall.tsx b/x-pack/plugins/apm/public/components/app/TransactionDetails/WaterfallWithSummmary/WaterfallContainer/Waterfall/accordion_waterfall.tsx index 833937835f870..c447d7fba86b8 100644 --- a/x-pack/plugins/apm/public/components/app/TransactionDetails/WaterfallWithSummmary/WaterfallContainer/Waterfall/accordion_waterfall.tsx +++ b/x-pack/plugins/apm/public/components/app/TransactionDetails/WaterfallWithSummmary/WaterfallContainer/Waterfall/accordion_waterfall.tsx @@ -25,9 +25,7 @@ interface AccordionWaterfallProps { location: Location; errorsPerTransaction: IWaterfall['errorsPerTransaction']; childrenByParentId: Record; - onToggleEntryTransaction?: ( - nextState: EuiAccordionProps['forceState'] - ) => void; + onToggleEntryTransaction?: () => void; timelineMargins: Margins; onClickWaterfallItem: (item: IWaterfallItem) => void; } @@ -106,6 +104,7 @@ export function AccordionWaterfall(props: AccordionWaterfallProps) { errorsPerTransaction, timelineMargins, onClickWaterfallItem, + onToggleEntryTransaction, } = props; const nextLevel = level + 1; @@ -147,7 +146,12 @@ export function AccordionWaterfall(props: AccordionWaterfallProps) { arrowDisplay={isEmpty(children) ? 'none' : 'left'} initialIsOpen={true} forceState={isOpen ? 'open' : 'closed'} - onToggle={() => setIsOpen((isCurrentOpen) => !isCurrentOpen)} + onToggle={() => { + setIsOpen((isCurrentOpen) => !isCurrentOpen); + if (onToggleEntryTransaction) { + onToggleEntryTransaction(); + } + }} > {children.map((child) => ( toggleFlyout({ history, item, location }) } + onToggleEntryTransaction={() => setIsAccordionOpen((isOpen) => !isOpen)} /> ); } From bc1c1d97496a220bd68ea77b52b9fda384969a1a Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Tue, 8 Sep 2020 14:42:58 +0100 Subject: [PATCH 18/58] add unit test for uncommon processes search strategy (#76893) Co-authored-by: Elastic Machine --- .../uncommon_processes/__mocks__/index.ts | 4420 +++++++++++++++++ .../uncommon_processes/dsl/query.dsl.test.ts | 13 + .../hosts/uncommon_processes/helpers.test.ts | 269 + .../hosts/uncommon_processes/index.test.ts | 52 + 4 files changed, 4754 insertions(+) create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/__mocks__/index.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/dsl/query.dsl.test.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/helpers.test.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/index.test.ts diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/__mocks__/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/__mocks__/index.ts new file mode 100644 index 0000000000000..5f0e2af8ae921 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/__mocks__/index.ts @@ -0,0 +1,4420 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { SortField, HostsQueries } from '../../../../../../../common/search_strategy'; + +export const mockOptions = { + defaultIndex: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + docValueFields: [], + factoryQueryType: HostsQueries.uncommonProcesses, + filterQuery: + '{"bool":{"must":[],"filter":[{"match_all":{}},{"match_phrase":{"host.name":{"query":"siem-kibana"}}}],"should":[],"must_not":[]}}', + pagination: { + activePage: 0, + cursorStart: 0, + fakePossibleCount: 50, + querySize: 10, + }, + timerange: { + interval: '12h', + from: '2020-09-06T15:23:52.757Z', + to: '2020-09-07T15:23:52.757Z', + }, + sort: {} as SortField, +}; + +export const mockSearchStrategyResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 39, + timed_out: false, + _shards: { + total: 21, + successful: 21, + skipped: 0, + failed: 0, + }, + hits: { + total: -1, + max_score: 0, + hits: [], + }, + aggregations: { + process_count: { + value: 92, + }, + group_by_process: { + doc_count_error_upper_bound: -1, + sum_other_doc_count: 35043, + buckets: [ + { + key: 'AM_Delta_Patch_1.323.631.0.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'ayrMZnQBB-gskcly0w7l', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe', + 'WD', + '/q', + ], + name: 'AM_Delta_Patch_1.323.631.0.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599452531834], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'ayrMZnQBB-gskcly0w7l', + _score: 0, + _source: { + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe', + 'WD', + '/q', + ], + parent: { + args: [ + 'C:\\Windows\\system32\\wuauclt.exe', + '/RunHandlerComServer', + ], + name: 'wuauclt.exe', + pid: 4844, + entity_id: '{ce1d3c9b-b573-5f55-b115-000000000b00}', + executable: 'C:\\Windows\\System32\\wuauclt.exe', + command_line: + '"C:\\Windows\\system32\\wuauclt.exe" /RunHandlerComServer', + }, + pe: { + imphash: 'f96ec1e772808eb81774fb67a4ac229e', + }, + name: 'AM_Delta_Patch_1.323.631.0.exe', + pid: 4608, + working_directory: + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\', + entity_id: '{ce1d3c9b-b573-5f55-b215-000000000b00}', + executable: + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe', + command_line: + '"C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe" WD /q', + hash: { + sha1: '94eb7f83ddee6942ec5bdb8e218b5bc942158cb3', + sha256: + '562c58193ba7878b396ebc3fb2dccece7ea0d5c6c7d52fc3ac10b62b894260eb', + md5: '5608b911376da958ed93a7f9428ad0b9', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'Microsoft Antimalware WU Stub', + OriginalFileName: 'AM_Delta_Patch_1.323.631.0.exe', + IntegrityLevel: 'System', + TerminalSessionId: '0', + FileVersion: '1.323.673.0', + Product: 'Microsoft Malware Protection', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222529, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 04:22:11.834\nProcessGuid: {ce1d3c9b-b573-5f55-b215-000000000b00}\nProcessId: 4608\nImage: C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe\nFileVersion: 1.323.673.0\nDescription: Microsoft Antimalware WU Stub\nProduct: Microsoft Malware Protection\nCompany: Microsoft Corporation\nOriginalFileName: AM_Delta_Patch_1.323.631.0.exe\nCommandLine: "C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe" WD /q\nCurrentDirectory: C:\\Windows\\SoftwareDistribution\\Download\\Install\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=94EB7F83DDEE6942EC5BDB8E218B5BC942158CB3,MD5=5608B911376DA958ED93A7F9428AD0B9,SHA256=562C58193BA7878B396EBC3FB2DCCECE7EA0D5C6C7D52FC3AC10B62B894260EB,IMPHASH=F96EC1E772808EB81774FB67A4AC229E\nParentProcessGuid: {ce1d3c9b-b573-5f55-b115-000000000b00}\nParentProcessId: 4844\nParentImage: C:\\Windows\\System32\\wuauclt.exe\nParentCommandLine: "C:\\Windows\\system32\\wuauclt.exe" /RunHandlerComServer', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T04:22:11.834Z', + ecs: { + version: '1.5.0', + }, + related: { + user: 'SYSTEM', + hash: [ + '94eb7f83ddee6942ec5bdb8e218b5bc942158cb3', + '5608b911376da958ed93a7f9428ad0b9', + '562c58193ba7878b396ebc3fb2dccece7ea0d5c6c7d52fc3ac10b62b894260eb', + 'f96ec1e772808eb81774fb67a4ac229e', + ], + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T04:22:12.727Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + type: ['start', 'process_start'], + category: ['process'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: '94eb7f83ddee6942ec5bdb8e218b5bc942158cb3', + imphash: 'f96ec1e772808eb81774fb67a4ac229e', + sha256: + '562c58193ba7878b396ebc3fb2dccece7ea0d5c6c7d52fc3ac10b62b894260eb', + md5: '5608b911376da958ed93a7f9428ad0b9', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'AM_Delta_Patch_1.323.673.0.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'M-GvaHQBA6bGZw2uBoYz', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe', + 'WD', + '/q', + ], + name: 'AM_Delta_Patch_1.323.673.0.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599484132366], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'M-GvaHQBA6bGZw2uBoYz', + _score: 0, + _source: { + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + name: 'siem-windows', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe', + 'WD', + '/q', + ], + parent: { + args: [ + 'C:\\Windows\\system32\\wuauclt.exe', + '/RunHandlerComServer', + ], + name: 'wuauclt.exe', + pid: 4548, + entity_id: '{ce1d3c9b-30e3-5f56-ca15-000000000b00}', + executable: 'C:\\Windows\\System32\\wuauclt.exe', + command_line: + '"C:\\Windows\\system32\\wuauclt.exe" /RunHandlerComServer', + }, + pe: { + imphash: 'f96ec1e772808eb81774fb67a4ac229e', + }, + name: 'AM_Delta_Patch_1.323.673.0.exe', + working_directory: + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\', + pid: 4684, + entity_id: '{ce1d3c9b-30e4-5f56-cb15-000000000b00}', + executable: + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe', + command_line: + '"C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe" WD /q', + hash: { + sha1: 'ae1e653f1e53dcd34415a35335f9e44d2a33be65', + sha256: + '4382c96613850568d003c02ba0a285f6d2ef9b8c20790ffa2b35641bc831293f', + md5: 'd088fcf98bb9aa1e8f07a36b05011555', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'Microsoft Antimalware WU Stub', + OriginalFileName: 'AM_Delta_Patch_1.323.673.0.exe', + IntegrityLevel: 'System', + TerminalSessionId: '0', + FileVersion: '1.323.693.0', + Product: 'Microsoft Malware Protection', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 223146, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 13:08:52.366\nProcessGuid: {ce1d3c9b-30e4-5f56-cb15-000000000b00}\nProcessId: 4684\nImage: C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe\nFileVersion: 1.323.693.0\nDescription: Microsoft Antimalware WU Stub\nProduct: Microsoft Malware Protection\nCompany: Microsoft Corporation\nOriginalFileName: AM_Delta_Patch_1.323.673.0.exe\nCommandLine: "C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe" WD /q\nCurrentDirectory: C:\\Windows\\SoftwareDistribution\\Download\\Install\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=AE1E653F1E53DCD34415A35335F9E44D2A33BE65,MD5=D088FCF98BB9AA1E8F07A36B05011555,SHA256=4382C96613850568D003C02BA0A285F6D2EF9B8C20790FFA2B35641BC831293F,IMPHASH=F96EC1E772808EB81774FB67A4AC229E\nParentProcessGuid: {ce1d3c9b-30e3-5f56-ca15-000000000b00}\nParentProcessId: 4548\nParentImage: C:\\Windows\\System32\\wuauclt.exe\nParentCommandLine: "C:\\Windows\\system32\\wuauclt.exe" /RunHandlerComServer', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T13:08:52.366Z', + ecs: { + version: '1.5.0', + }, + related: { + user: 'SYSTEM', + hash: [ + 'ae1e653f1e53dcd34415a35335f9e44d2a33be65', + 'd088fcf98bb9aa1e8f07a36b05011555', + '4382c96613850568d003c02ba0a285f6d2ef9b8c20790ffa2b35641bc831293f', + 'f96ec1e772808eb81774fb67a4ac229e', + ], + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T13:08:53.889Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: 'ae1e653f1e53dcd34415a35335f9e44d2a33be65', + imphash: 'f96ec1e772808eb81774fb67a4ac229e', + sha256: + '4382c96613850568d003c02ba0a285f6d2ef9b8c20790ffa2b35641bc831293f', + md5: 'd088fcf98bb9aa1e8f07a36b05011555', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'DeviceCensus.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'cinEZnQBB-gskclyvNmU', + _score: null, + _source: { + process: { + args: ['C:\\Windows\\system32\\devicecensus.exe'], + name: 'DeviceCensus.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599452000791], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'cinEZnQBB-gskclyvNmU', + _score: 0, + _source: { + process: { + args: ['C:\\Windows\\system32\\devicecensus.exe'], + parent: { + args: ['C:\\Windows\\system32\\svchost.exe', '-k', 'netsvcs', '-p'], + name: 'svchost.exe', + pid: 1060, + entity_id: '{ce1d3c9b-b9b1-5f34-1c00-000000000b00}', + executable: 'C:\\Windows\\System32\\svchost.exe', + command_line: 'C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + }, + pe: { + imphash: '0cdb6b589f0a125609d8df646de0ea86', + }, + name: 'DeviceCensus.exe', + pid: 5016, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-b360-5f55-a115-000000000b00}', + executable: 'C:\\Windows\\System32\\DeviceCensus.exe', + command_line: 'C:\\Windows\\system32\\devicecensus.exe', + hash: { + sha1: '9e488437b2233e5ad9abd3151ec28ea51eb64c2d', + sha256: + 'dbea7473d5e7b3b4948081dacc6e35327d5a588f4fd0a2d68184bffd10439296', + md5: '8159944c79034d2bcabf73d461a7e643', + }, + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + name: 'siem-windows', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + Description: 'Device Census', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + OriginalFileName: 'DeviceCensus.exe', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.18362.1035 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222507, + task: 'Process Create (rule: ProcessCreate)', + event_id: 1, + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 04:13:20.791\nProcessGuid: {ce1d3c9b-b360-5f55-a115-000000000b00}\nProcessId: 5016\nImage: C:\\Windows\\System32\\DeviceCensus.exe\nFileVersion: 10.0.18362.1035 (WinBuild.160101.0800)\nDescription: Device Census\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: DeviceCensus.exe\nCommandLine: C:\\Windows\\system32\\devicecensus.exe\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=9E488437B2233E5AD9ABD3151EC28EA51EB64C2D,MD5=8159944C79034D2BCABF73D461A7E643,SHA256=DBEA7473D5E7B3B4948081DACC6E35327D5A588F4FD0A2D68184BFFD10439296,IMPHASH=0CDB6B589F0A125609D8DF646DE0EA86\nParentProcessGuid: {ce1d3c9b-b9b1-5f34-1c00-000000000b00}\nParentProcessId: 1060\nParentImage: C:\\Windows\\System32\\svchost.exe\nParentCommandLine: C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T04:13:20.791Z', + related: { + user: 'SYSTEM', + hash: [ + '9e488437b2233e5ad9abd3151ec28ea51eb64c2d', + '8159944c79034d2bcabf73d461a7e643', + 'dbea7473d5e7b3b4948081dacc6e35327d5a588f4fd0a2d68184bffd10439296', + '0cdb6b589f0a125609d8df646de0ea86', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T04:13:22.458Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: '9e488437b2233e5ad9abd3151ec28ea51eb64c2d', + imphash: '0cdb6b589f0a125609d8df646de0ea86', + sha256: + 'dbea7473d5e7b3b4948081dacc6e35327d5a588f4fd0a2d68184bffd10439296', + md5: '8159944c79034d2bcabf73d461a7e643', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'DiskSnapshot.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'HNKSZHQBA6bGZw2uCtRk', + _score: null, + _source: { + process: { + args: ['C:\\Windows\\system32\\disksnapshot.exe', '-z'], + name: 'DiskSnapshot.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599415124040], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'HNKSZHQBA6bGZw2uCtRk', + _score: 0, + _source: { + process: { + args: ['C:\\Windows\\system32\\disksnapshot.exe', '-z'], + parent: { + args: ['C:\\Windows\\system32\\svchost.exe', '-k', 'netsvcs', '-p'], + name: 'svchost.exe', + pid: 1060, + entity_id: '{ce1d3c9b-b9b1-5f34-1c00-000000000b00}', + executable: 'C:\\Windows\\System32\\svchost.exe', + command_line: 'C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + }, + pe: { + imphash: '69bdabb73b409f40ad05f057cec29380', + }, + name: 'DiskSnapshot.exe', + pid: 3120, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-2354-5f55-6415-000000000b00}', + command_line: 'C:\\Windows\\system32\\disksnapshot.exe -z', + executable: 'C:\\Windows\\System32\\DiskSnapshot.exe', + hash: { + sha1: '61b4d8d4757e15259e1e92c8236f37237b5380d1', + sha256: + 'c7b9591eb4dd78286615401c138c7c1a89f0e358caae1786de2c3b08e904ffdc', + md5: 'ece311ff51bd847a3874bfac85449c6b', + }, + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'DiskSnapshot.exe', + OriginalFileName: 'DiskSnapshot.exe', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.17763.652 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 221799, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-06 17:58:44.040\nProcessGuid: {ce1d3c9b-2354-5f55-6415-000000000b00}\nProcessId: 3120\nImage: C:\\Windows\\System32\\DiskSnapshot.exe\nFileVersion: 10.0.17763.652 (WinBuild.160101.0800)\nDescription: DiskSnapshot.exe\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: DiskSnapshot.exe\nCommandLine: C:\\Windows\\system32\\disksnapshot.exe -z\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=61B4D8D4757E15259E1E92C8236F37237B5380D1,MD5=ECE311FF51BD847A3874BFAC85449C6B,SHA256=C7B9591EB4DD78286615401C138C7C1A89F0E358CAAE1786DE2C3B08E904FFDC,IMPHASH=69BDABB73B409F40AD05F057CEC29380\nParentProcessGuid: {ce1d3c9b-b9b1-5f34-1c00-000000000b00}\nParentProcessId: 1060\nParentImage: C:\\Windows\\System32\\svchost.exe\nParentCommandLine: C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-06T17:58:44.040Z', + related: { + user: 'SYSTEM', + hash: [ + '61b4d8d4757e15259e1e92c8236f37237b5380d1', + 'ece311ff51bd847a3874bfac85449c6b', + 'c7b9591eb4dd78286615401c138c7c1a89f0e358caae1786de2c3b08e904ffdc', + '69bdabb73b409f40ad05f057cec29380', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-06T17:58:45.606Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: '61b4d8d4757e15259e1e92c8236f37237b5380d1', + imphash: '69bdabb73b409f40ad05f057cec29380', + sha256: + 'c7b9591eb4dd78286615401c138c7c1a89f0e358caae1786de2c3b08e904ffdc', + md5: 'ece311ff51bd847a3874bfac85449c6b', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'DismHost.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '2zncaHQBB-gskcly1QaD', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe', + '{6BB79B50-2038-4A10-B513-2FAC72FF213E}', + ], + name: 'DismHost.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599487135371], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '2zncaHQBB-gskcly1QaD', + _score: 0, + _source: { + process: { + args: [ + 'C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe', + '{6BB79B50-2038-4A10-B513-2FAC72FF213E}', + ], + parent: { + args: [ + 'C:\\ProgramData\\Microsoft\\Windows Defender\\platform\\4.18.2008.9-0\\MsMpEng.exe', + ], + name: 'MsMpEng.exe', + pid: 184, + entity_id: '{ce1d3c9b-1b55-5f4f-4913-000000000b00}', + executable: + 'C:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\4.18.2008.9-0\\MsMpEng.exe', + command_line: + '"C:\\ProgramData\\Microsoft\\Windows Defender\\platform\\4.18.2008.9-0\\MsMpEng.exe"', + }, + pe: { + imphash: 'a644b5814b05375757429dfb05524479', + }, + name: 'DismHost.exe', + pid: 1500, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-3c9f-5f56-d315-000000000b00}', + executable: + 'C:\\Windows\\Temp\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\DismHost.exe', + command_line: + 'C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe {6BB79B50-2038-4A10-B513-2FAC72FF213E}', + hash: { + sha1: 'a8a65b6a45a988f06e17ebd04e5462ca730d2337', + sha256: + 'b94317b7c665f1cec965e3322e0aa26c8be29eaf5830fb7fcd7e14ae88a8cf22', + md5: '5867dc628a444f2393f7eff007bd4417', + }, + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + name: 'siem-windows', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + type: 'winlogbeat', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'Dism Host Servicing Process', + OriginalFileName: 'DismHost.exe', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.17763.771 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 223274, + task: 'Process Create (rule: ProcessCreate)', + event_id: 1, + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 13:58:55.371\nProcessGuid: {ce1d3c9b-3c9f-5f56-d315-000000000b00}\nProcessId: 1500\nImage: C:\\Windows\\Temp\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\DismHost.exe\nFileVersion: 10.0.17763.771 (WinBuild.160101.0800)\nDescription: Dism Host Servicing Process\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: DismHost.exe\nCommandLine: C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe {6BB79B50-2038-4A10-B513-2FAC72FF213E}\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=A8A65B6A45A988F06E17EBD04E5462CA730D2337,MD5=5867DC628A444F2393F7EFF007BD4417,SHA256=B94317B7C665F1CEC965E3322E0AA26C8BE29EAF5830FB7FCD7E14AE88A8CF22,IMPHASH=A644B5814B05375757429DFB05524479\nParentProcessGuid: {ce1d3c9b-1b55-5f4f-4913-000000000b00}\nParentProcessId: 184\nParentImage: C:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\4.18.2008.9-0\\MsMpEng.exe\nParentCommandLine: "C:\\ProgramData\\Microsoft\\Windows Defender\\platform\\4.18.2008.9-0\\MsMpEng.exe"', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T13:58:55.371Z', + related: { + user: 'SYSTEM', + hash: [ + 'a8a65b6a45a988f06e17ebd04e5462ca730d2337', + '5867dc628a444f2393f7eff007bd4417', + 'b94317b7c665f1cec965e3322e0aa26c8be29eaf5830fb7fcd7e14ae88a8cf22', + 'a644b5814b05375757429dfb05524479', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T13:58:56.138Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: 'a8a65b6a45a988f06e17ebd04e5462ca730d2337', + imphash: 'a644b5814b05375757429dfb05524479', + sha256: + 'b94317b7c665f1cec965e3322e0aa26c8be29eaf5830fb7fcd7e14ae88a8cf22', + md5: '5867dc628a444f2393f7eff007bd4417', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'SIHClient.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'gdVuZXQBA6bGZw2uFsPP', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\System32\\sihclient.exe', + '/cv', + '33nfV21X50ie84HvATAt1w.0.1', + ], + name: 'SIHClient.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599429545370], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'gdVuZXQBA6bGZw2uFsPP', + _score: 0, + _source: { + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + process: { + args: [ + 'C:\\Windows\\System32\\sihclient.exe', + '/cv', + '33nfV21X50ie84HvATAt1w.0.1', + ], + parent: { + args: [ + 'C:\\Windows\\System32\\Upfc.exe', + '/launchtype', + 'periodic', + '/cv', + '33nfV21X50ie84HvATAt1w.0', + ], + name: 'upfc.exe', + pid: 4328, + entity_id: '{ce1d3c9b-5b8b-5f55-7815-000000000b00}', + executable: 'C:\\Windows\\System32\\upfc.exe', + command_line: + 'C:\\Windows\\System32\\Upfc.exe /launchtype periodic /cv 33nfV21X50ie84HvATAt1w.0', + }, + pe: { + imphash: '3bbd1eea2778ee3dcd883a4d5533aec3', + }, + name: 'SIHClient.exe', + pid: 2780, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-5ba9-5f55-8815-000000000b00}', + executable: 'C:\\Windows\\System32\\SIHClient.exe', + command_line: + 'C:\\Windows\\System32\\sihclient.exe /cv 33nfV21X50ie84HvATAt1w.0.1', + hash: { + sha1: '145ef8d82cf1e451381584cd9565a2d35a442504', + sha256: + '0e0bb70ae1888060b3ffb9a320963551b56dd0d4ce0b5dc1c8fadda4b7bf3f6a', + md5: 'dc1e380b36f4a8309f363d3809e607b8', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'SIH Client', + OriginalFileName: 'sihclient.exe', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.17763.1217 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222106, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-06 21:59:05.370\nProcessGuid: {ce1d3c9b-5ba9-5f55-8815-000000000b00}\nProcessId: 2780\nImage: C:\\Windows\\System32\\SIHClient.exe\nFileVersion: 10.0.17763.1217 (WinBuild.160101.0800)\nDescription: SIH Client\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: sihclient.exe\nCommandLine: C:\\Windows\\System32\\sihclient.exe /cv 33nfV21X50ie84HvATAt1w.0.1\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=145EF8D82CF1E451381584CD9565A2D35A442504,MD5=DC1E380B36F4A8309F363D3809E607B8,SHA256=0E0BB70AE1888060B3FFB9A320963551B56DD0D4CE0B5DC1C8FADDA4B7BF3F6A,IMPHASH=3BBD1EEA2778EE3DCD883A4D5533AEC3\nParentProcessGuid: {ce1d3c9b-5b8b-5f55-7815-000000000b00}\nParentProcessId: 4328\nParentImage: C:\\Windows\\System32\\upfc.exe\nParentCommandLine: C:\\Windows\\System32\\Upfc.exe /launchtype periodic /cv 33nfV21X50ie84HvATAt1w.0', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-06T21:59:05.370Z', + related: { + user: 'SYSTEM', + hash: [ + '145ef8d82cf1e451381584cd9565a2d35a442504', + 'dc1e380b36f4a8309f363d3809e607b8', + '0e0bb70ae1888060b3ffb9a320963551b56dd0d4ce0b5dc1c8fadda4b7bf3f6a', + '3bbd1eea2778ee3dcd883a4d5533aec3', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + kind: 'event', + created: '2020-09-06T21:59:06.713Z', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: '145ef8d82cf1e451381584cd9565a2d35a442504', + imphash: '3bbd1eea2778ee3dcd883a4d5533aec3', + sha256: + '0e0bb70ae1888060b3ffb9a320963551b56dd0d4ce0b5dc1c8fadda4b7bf3f6a', + md5: 'dc1e380b36f4a8309f363d3809e607b8', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'SpeechModelDownload.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '6NmKZnQBA6bGZw2uma12', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe', + ], + name: 'SpeechModelDownload.exe', + }, + user: { + name: 'NETWORK SERVICE', + }, + }, + sort: [1599448191225], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '6NmKZnQBA6bGZw2uma12', + _score: 0, + _source: { + process: { + args: [ + 'C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe', + ], + parent: { + args: ['C:\\Windows\\system32\\svchost.exe', '-k', 'netsvcs', '-p'], + name: 'svchost.exe', + pid: 1060, + entity_id: '{ce1d3c9b-b9b1-5f34-1c00-000000000b00}', + executable: 'C:\\Windows\\System32\\svchost.exe', + command_line: 'C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + }, + pe: { + imphash: '23bd5f904494d14029d9263cebae088d', + }, + name: 'SpeechModelDownload.exe', + working_directory: 'C:\\Windows\\system32\\', + pid: 4328, + entity_id: '{ce1d3c9b-a47f-5f55-9915-000000000b00}', + hash: { + sha1: '03e6e81192621dfd873814de3787c6e7d6af1509', + sha256: + '963fd9dc1b82c44d00eb91d61e2cb442af7357e3a603c23d469df53a6376f073', + md5: '3fd687e97e03d303e02bb37ec85de962', + }, + executable: + 'C:\\Windows\\System32\\Speech_OneCore\\common\\SpeechModelDownload.exe', + command_line: + 'C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe', + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9ac-5f34-e403-000000000000}', + Description: 'Speech Model Download Executable', + OriginalFileName: 'SpeechModelDownload.exe', + IntegrityLevel: 'System', + TerminalSessionId: '0', + FileVersion: '10.0.17763.1369 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e4', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222431, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 03:09:51.225\nProcessGuid: {ce1d3c9b-a47f-5f55-9915-000000000b00}\nProcessId: 4328\nImage: C:\\Windows\\System32\\Speech_OneCore\\common\\SpeechModelDownload.exe\nFileVersion: 10.0.17763.1369 (WinBuild.160101.0800)\nDescription: Speech Model Download Executable\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: SpeechModelDownload.exe\nCommandLine: C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\NETWORK SERVICE\nLogonGuid: {ce1d3c9b-b9ac-5f34-e403-000000000000}\nLogonId: 0x3E4\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=03E6E81192621DFD873814DE3787C6E7D6AF1509,MD5=3FD687E97E03D303E02BB37EC85DE962,SHA256=963FD9DC1B82C44D00EB91D61E2CB442AF7357E3A603C23D469DF53A6376F073,IMPHASH=23BD5F904494D14029D9263CEBAE088D\nParentProcessGuid: {ce1d3c9b-b9b1-5f34-1c00-000000000b00}\nParentProcessId: 1060\nParentImage: C:\\Windows\\System32\\svchost.exe\nParentCommandLine: C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T03:09:51.225Z', + related: { + user: 'NETWORK SERVICE', + hash: [ + '03e6e81192621dfd873814de3787c6e7d6af1509', + '3fd687e97e03d303e02bb37ec85de962', + '963fd9dc1b82c44d00eb91d61e2cb442af7357e3a603c23d469df53a6376f073', + '23bd5f904494d14029d9263cebae088d', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + kind: 'event', + created: '2020-09-07T03:09:52.370Z', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + type: ['start', 'process_start'], + category: ['process'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'NETWORK SERVICE', + }, + hash: { + sha1: '03e6e81192621dfd873814de3787c6e7d6af1509', + imphash: '23bd5f904494d14029d9263cebae088d', + sha256: + '963fd9dc1b82c44d00eb91d61e2cb442af7357e3a603c23d469df53a6376f073', + md5: '3fd687e97e03d303e02bb37ec85de962', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'UsoClient.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'Pi68Z3QBc39KFIJb3txa', + _score: null, + _source: { + process: { + args: ['C:\\Windows\\system32\\usoclient.exe', 'StartScan'], + name: 'UsoClient.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599468262455], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'Pi68Z3QBc39KFIJb3txa', + _score: 0, + _source: { + process: { + args: ['C:\\Windows\\system32\\usoclient.exe', 'StartScan'], + parent: { + args: ['C:\\Windows\\system32\\svchost.exe', '-k', 'netsvcs', '-p'], + name: 'svchost.exe', + pid: 1060, + entity_id: '{ce1d3c9b-b9b1-5f34-1c00-000000000b00}', + executable: 'C:\\Windows\\System32\\svchost.exe', + command_line: 'C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + }, + pe: { + imphash: '2510e8a4554aef2caf0a913be015929f', + }, + name: 'UsoClient.exe', + pid: 3864, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-f2e6-5f55-bc15-000000000b00}', + command_line: 'C:\\Windows\\system32\\usoclient.exe StartScan', + executable: 'C:\\Windows\\System32\\UsoClient.exe', + hash: { + sha1: 'ebf56ad89d4740359d5d3d5370b31e56614bbb79', + sha256: + 'df3900cdc3c6f023037aaf2d4407c4e8aaa909013a69539fb4688e2bd099db85', + md5: '39750d33d277617b322adbb917f7b626', + }, + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + Description: 'UsoClient', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + OriginalFileName: 'UsoClient', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.17763.1007 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222846, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 08:44:22.455\nProcessGuid: {ce1d3c9b-f2e6-5f55-bc15-000000000b00}\nProcessId: 3864\nImage: C:\\Windows\\System32\\UsoClient.exe\nFileVersion: 10.0.17763.1007 (WinBuild.160101.0800)\nDescription: UsoClient\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: UsoClient\nCommandLine: C:\\Windows\\system32\\usoclient.exe StartScan\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=EBF56AD89D4740359D5D3D5370B31E56614BBB79,MD5=39750D33D277617B322ADBB917F7B626,SHA256=DF3900CDC3C6F023037AAF2D4407C4E8AAA909013A69539FB4688E2BD099DB85,IMPHASH=2510E8A4554AEF2CAF0A913BE015929F\nParentProcessGuid: {ce1d3c9b-b9b1-5f34-1c00-000000000b00}\nParentProcessId: 1060\nParentImage: C:\\Windows\\System32\\svchost.exe\nParentCommandLine: C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T08:44:22.455Z', + related: { + user: 'SYSTEM', + hash: [ + 'ebf56ad89d4740359d5d3d5370b31e56614bbb79', + '39750d33d277617b322adbb917f7b626', + 'df3900cdc3c6f023037aaf2d4407c4e8aaa909013a69539fb4688e2bd099db85', + '2510e8a4554aef2caf0a913be015929f', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T08:44:24.029Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: 'ebf56ad89d4740359d5d3d5370b31e56614bbb79', + imphash: '2510e8a4554aef2caf0a913be015929f', + sha256: + 'df3900cdc3c6f023037aaf2d4407c4e8aaa909013a69539fb4688e2bd099db85', + md5: '39750d33d277617b322adbb917f7b626', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'apt-compat', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.process-default-000001', + _id: 'Ziw-Z3QBB-gskcly0vqU', + _score: null, + _source: { + process: { + args: ['/etc/cron.daily/apt-compat'], + name: 'apt-compat', + }, + user: { + name: 'root', + id: 0, + }, + }, + sort: [1599459901154], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-kibana', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.process-default-000001', + _id: 'Ziw-Z3QBB-gskcly0vqU', + _score: 0, + _source: { + agent: { + id: 'b1e3298e-10be-4032-b1ee-5a4cbb280aa1', + type: 'endpoint', + version: '7.9.1', + }, + process: { + Ext: { + ancestry: [ + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYyLTEzMjQzOTMzNTAxLjUzOTIzMzAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYxLTEzMjQzOTMzNTAxLjUzMjIzMTAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYxLTEzMjQzOTMzNTAxLjUyODg0MzAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYwLTEzMjQzOTMzNTAxLjUyMDI5ODAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYwLTEzMjQzOTMzNTAxLjUwNzM4MjAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODU5LTEzMjQzOTMzNTAxLjc3NTM1MDAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTUyNC0xMzIzNjA4NTMzMC4w', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEtMTMyMzYwODUzMjIuMA==', + ], + }, + args: ['/etc/cron.daily/apt-compat'], + parent: { + name: 'run-parts', + pid: 13861, + entity_id: + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYyLTEzMjQzOTMzNTAxLjUzOTIzMzAw', + executable: '/bin/run-parts', + }, + name: 'apt-compat', + pid: 13862, + args_count: 1, + entity_id: + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYyLTEzMjQzOTMzNTAxLjU0NDY0MDAw', + command_line: '/etc/cron.daily/apt-compat', + executable: '/etc/cron.daily/apt-compat', + hash: { + sha1: '61445721d0b5d86ac0a8386a4ceef450118f4fbb', + sha256: + '8eeae3a9df22621d51062e4dadfc5c63b49732b38a37b5d4e52c99c2237e5767', + md5: 'bc4a71cbcaeed4179f25d798257fa980', + }, + }, + message: 'Endpoint process event', + '@timestamp': '2020-09-07T06:25:01.154464000Z', + ecs: { + version: '1.5.0', + }, + data_stream: { + namespace: 'default', + type: 'logs', + dataset: 'endpoint.events.process', + }, + elastic: { + agent: { + id: 'ebee9a13-9ae3-4a55-9cb7-72ddf053055f', + }, + }, + host: { + hostname: 'siem-kibana', + os: { + Ext: { + variant: 'Debian', + }, + kernel: '4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27)', + name: 'Linux', + family: 'debian', + version: '9', + platform: 'debian', + full: 'Debian 9', + }, + ip: ['127.0.0.1', '::1', '10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'e50acb49-820b-c60a-392d-2ef75f276301', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + sequence: 197060, + ingested: '2020-09-07T06:26:44.476888Z', + created: '2020-09-07T06:25:01.154464000Z', + kind: 'event', + module: 'endpoint', + action: 'exec', + id: 'Lp6oofT0fzv0Auzq+++/kwCO', + category: ['process'], + type: ['start'], + dataset: 'endpoint.events.process', + }, + user: { + Ext: { + real: { + name: 'root', + id: 0, + }, + }, + name: 'root', + id: 0, + }, + group: { + Ext: { + real: { + name: 'root', + id: 0, + }, + }, + name: 'root', + id: 0, + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'bsdmainutils', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.process-default-000001', + _id: 'aSw-Z3QBB-gskcly0vqU', + _score: null, + _source: { + process: { + args: ['/etc/cron.daily/bsdmainutils'], + name: 'bsdmainutils', + }, + user: { + name: 'root', + id: 0, + }, + }, + sort: [1599459901155], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-kibana', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.process-default-000001', + _id: 'aSw-Z3QBB-gskcly0vqU', + _score: 0, + _source: { + agent: { + id: 'b1e3298e-10be-4032-b1ee-5a4cbb280aa1', + type: 'endpoint', + version: '7.9.1', + }, + process: { + Ext: { + ancestry: [ + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYzLTEzMjQzOTMzNTAxLjU1MzMwMzAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYxLTEzMjQzOTMzNTAxLjUzMjIzMTAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYxLTEzMjQzOTMzNTAxLjUyODg0MzAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYwLTEzMjQzOTMzNTAxLjUyMDI5ODAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYwLTEzMjQzOTMzNTAxLjUwNzM4MjAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODU5LTEzMjQzOTMzNTAxLjc3NTM1MDAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTUyNC0xMzIzNjA4NTMzMC4w', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEtMTMyMzYwODUzMjIuMA==', + ], + }, + args: ['/etc/cron.daily/bsdmainutils'], + parent: { + name: 'run-parts', + pid: 13861, + entity_id: + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYzLTEzMjQzOTMzNTAxLjU1MzMwMzAw', + executable: '/bin/run-parts', + }, + name: 'bsdmainutils', + pid: 13863, + args_count: 1, + entity_id: + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYzLTEzMjQzOTMzNTAxLjU1ODEyMDAw', + command_line: '/etc/cron.daily/bsdmainutils', + executable: '/etc/cron.daily/bsdmainutils', + hash: { + sha1: 'fd24f1f3986e5527e804c4dccddee29ff42cb682', + sha256: + 'a68002bf1dc9f42a150087b00437448a46f7cae6755ecddca70a6d3c9d20a14b', + md5: '559387f792462a62e3efb1d573e38d11', + }, + }, + message: 'Endpoint process event', + '@timestamp': '2020-09-07T06:25:01.155812000Z', + ecs: { + version: '1.5.0', + }, + data_stream: { + namespace: 'default', + type: 'logs', + dataset: 'endpoint.events.process', + }, + elastic: { + agent: { + id: 'ebee9a13-9ae3-4a55-9cb7-72ddf053055f', + }, + }, + host: { + hostname: 'siem-kibana', + os: { + Ext: { + variant: 'Debian', + }, + kernel: '4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27)', + name: 'Linux', + family: 'debian', + version: '9', + platform: 'debian', + full: 'Debian 9', + }, + ip: ['127.0.0.1', '::1', '10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'e50acb49-820b-c60a-392d-2ef75f276301', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + sequence: 197063, + ingested: '2020-09-07T06:26:44.477164Z', + created: '2020-09-07T06:25:01.155812000Z', + kind: 'event', + module: 'endpoint', + action: 'exec', + id: 'Lp6oofT0fzv0Auzq+++/kwCZ', + category: ['process'], + type: ['start'], + dataset: 'endpoint.events.process', + }, + user: { + Ext: { + real: { + name: 'root', + id: 0, + }, + }, + name: 'root', + id: 0, + }, + group: { + Ext: { + real: { + name: 'root', + id: 0, + }, + }, + name: 'root', + id: 0, + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + ], + }, + }, + }, + total: 21, + loaded: 21, +}; +export const formattedSearchStrategyResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 39, + timed_out: false, + _shards: { + total: 21, + successful: 21, + skipped: 0, + failed: 0, + }, + hits: { + total: -1, + max_score: 0, + hits: [], + }, + aggregations: { + process_count: { + value: 92, + }, + group_by_process: { + doc_count_error_upper_bound: -1, + sum_other_doc_count: 35043, + buckets: [ + { + key: 'AM_Delta_Patch_1.323.631.0.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'ayrMZnQBB-gskcly0w7l', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe', + 'WD', + '/q', + ], + name: 'AM_Delta_Patch_1.323.631.0.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599452531834], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'ayrMZnQBB-gskcly0w7l', + _score: 0, + _source: { + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe', + 'WD', + '/q', + ], + parent: { + args: [ + 'C:\\Windows\\system32\\wuauclt.exe', + '/RunHandlerComServer', + ], + name: 'wuauclt.exe', + pid: 4844, + entity_id: '{ce1d3c9b-b573-5f55-b115-000000000b00}', + executable: 'C:\\Windows\\System32\\wuauclt.exe', + command_line: + '"C:\\Windows\\system32\\wuauclt.exe" /RunHandlerComServer', + }, + pe: { + imphash: 'f96ec1e772808eb81774fb67a4ac229e', + }, + name: 'AM_Delta_Patch_1.323.631.0.exe', + pid: 4608, + working_directory: + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\', + entity_id: '{ce1d3c9b-b573-5f55-b215-000000000b00}', + executable: + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe', + command_line: + '"C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe" WD /q', + hash: { + sha1: '94eb7f83ddee6942ec5bdb8e218b5bc942158cb3', + sha256: + '562c58193ba7878b396ebc3fb2dccece7ea0d5c6c7d52fc3ac10b62b894260eb', + md5: '5608b911376da958ed93a7f9428ad0b9', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'Microsoft Antimalware WU Stub', + OriginalFileName: 'AM_Delta_Patch_1.323.631.0.exe', + IntegrityLevel: 'System', + TerminalSessionId: '0', + FileVersion: '1.323.673.0', + Product: 'Microsoft Malware Protection', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222529, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 04:22:11.834\nProcessGuid: {ce1d3c9b-b573-5f55-b215-000000000b00}\nProcessId: 4608\nImage: C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe\nFileVersion: 1.323.673.0\nDescription: Microsoft Antimalware WU Stub\nProduct: Microsoft Malware Protection\nCompany: Microsoft Corporation\nOriginalFileName: AM_Delta_Patch_1.323.631.0.exe\nCommandLine: "C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe" WD /q\nCurrentDirectory: C:\\Windows\\SoftwareDistribution\\Download\\Install\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=94EB7F83DDEE6942EC5BDB8E218B5BC942158CB3,MD5=5608B911376DA958ED93A7F9428AD0B9,SHA256=562C58193BA7878B396EBC3FB2DCCECE7EA0D5C6C7D52FC3AC10B62B894260EB,IMPHASH=F96EC1E772808EB81774FB67A4AC229E\nParentProcessGuid: {ce1d3c9b-b573-5f55-b115-000000000b00}\nParentProcessId: 4844\nParentImage: C:\\Windows\\System32\\wuauclt.exe\nParentCommandLine: "C:\\Windows\\system32\\wuauclt.exe" /RunHandlerComServer', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T04:22:11.834Z', + ecs: { + version: '1.5.0', + }, + related: { + user: 'SYSTEM', + hash: [ + '94eb7f83ddee6942ec5bdb8e218b5bc942158cb3', + '5608b911376da958ed93a7f9428ad0b9', + '562c58193ba7878b396ebc3fb2dccece7ea0d5c6c7d52fc3ac10b62b894260eb', + 'f96ec1e772808eb81774fb67a4ac229e', + ], + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T04:22:12.727Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + type: ['start', 'process_start'], + category: ['process'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: '94eb7f83ddee6942ec5bdb8e218b5bc942158cb3', + imphash: 'f96ec1e772808eb81774fb67a4ac229e', + sha256: + '562c58193ba7878b396ebc3fb2dccece7ea0d5c6c7d52fc3ac10b62b894260eb', + md5: '5608b911376da958ed93a7f9428ad0b9', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'AM_Delta_Patch_1.323.673.0.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'M-GvaHQBA6bGZw2uBoYz', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe', + 'WD', + '/q', + ], + name: 'AM_Delta_Patch_1.323.673.0.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599484132366], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'M-GvaHQBA6bGZw2uBoYz', + _score: 0, + _source: { + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + name: 'siem-windows', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe', + 'WD', + '/q', + ], + parent: { + args: [ + 'C:\\Windows\\system32\\wuauclt.exe', + '/RunHandlerComServer', + ], + name: 'wuauclt.exe', + pid: 4548, + entity_id: '{ce1d3c9b-30e3-5f56-ca15-000000000b00}', + executable: 'C:\\Windows\\System32\\wuauclt.exe', + command_line: + '"C:\\Windows\\system32\\wuauclt.exe" /RunHandlerComServer', + }, + pe: { + imphash: 'f96ec1e772808eb81774fb67a4ac229e', + }, + name: 'AM_Delta_Patch_1.323.673.0.exe', + working_directory: + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\', + pid: 4684, + entity_id: '{ce1d3c9b-30e4-5f56-cb15-000000000b00}', + executable: + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe', + command_line: + '"C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe" WD /q', + hash: { + sha1: 'ae1e653f1e53dcd34415a35335f9e44d2a33be65', + sha256: + '4382c96613850568d003c02ba0a285f6d2ef9b8c20790ffa2b35641bc831293f', + md5: 'd088fcf98bb9aa1e8f07a36b05011555', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'Microsoft Antimalware WU Stub', + OriginalFileName: 'AM_Delta_Patch_1.323.673.0.exe', + IntegrityLevel: 'System', + TerminalSessionId: '0', + FileVersion: '1.323.693.0', + Product: 'Microsoft Malware Protection', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 223146, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 13:08:52.366\nProcessGuid: {ce1d3c9b-30e4-5f56-cb15-000000000b00}\nProcessId: 4684\nImage: C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe\nFileVersion: 1.323.693.0\nDescription: Microsoft Antimalware WU Stub\nProduct: Microsoft Malware Protection\nCompany: Microsoft Corporation\nOriginalFileName: AM_Delta_Patch_1.323.673.0.exe\nCommandLine: "C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe" WD /q\nCurrentDirectory: C:\\Windows\\SoftwareDistribution\\Download\\Install\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=AE1E653F1E53DCD34415A35335F9E44D2A33BE65,MD5=D088FCF98BB9AA1E8F07A36B05011555,SHA256=4382C96613850568D003C02BA0A285F6D2EF9B8C20790FFA2B35641BC831293F,IMPHASH=F96EC1E772808EB81774FB67A4AC229E\nParentProcessGuid: {ce1d3c9b-30e3-5f56-ca15-000000000b00}\nParentProcessId: 4548\nParentImage: C:\\Windows\\System32\\wuauclt.exe\nParentCommandLine: "C:\\Windows\\system32\\wuauclt.exe" /RunHandlerComServer', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T13:08:52.366Z', + ecs: { + version: '1.5.0', + }, + related: { + user: 'SYSTEM', + hash: [ + 'ae1e653f1e53dcd34415a35335f9e44d2a33be65', + 'd088fcf98bb9aa1e8f07a36b05011555', + '4382c96613850568d003c02ba0a285f6d2ef9b8c20790ffa2b35641bc831293f', + 'f96ec1e772808eb81774fb67a4ac229e', + ], + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T13:08:53.889Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: 'ae1e653f1e53dcd34415a35335f9e44d2a33be65', + imphash: 'f96ec1e772808eb81774fb67a4ac229e', + sha256: + '4382c96613850568d003c02ba0a285f6d2ef9b8c20790ffa2b35641bc831293f', + md5: 'd088fcf98bb9aa1e8f07a36b05011555', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'DeviceCensus.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'cinEZnQBB-gskclyvNmU', + _score: null, + _source: { + process: { + args: ['C:\\Windows\\system32\\devicecensus.exe'], + name: 'DeviceCensus.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599452000791], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'cinEZnQBB-gskclyvNmU', + _score: 0, + _source: { + process: { + args: ['C:\\Windows\\system32\\devicecensus.exe'], + parent: { + args: ['C:\\Windows\\system32\\svchost.exe', '-k', 'netsvcs', '-p'], + name: 'svchost.exe', + pid: 1060, + entity_id: '{ce1d3c9b-b9b1-5f34-1c00-000000000b00}', + executable: 'C:\\Windows\\System32\\svchost.exe', + command_line: 'C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + }, + pe: { + imphash: '0cdb6b589f0a125609d8df646de0ea86', + }, + name: 'DeviceCensus.exe', + pid: 5016, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-b360-5f55-a115-000000000b00}', + executable: 'C:\\Windows\\System32\\DeviceCensus.exe', + command_line: 'C:\\Windows\\system32\\devicecensus.exe', + hash: { + sha1: '9e488437b2233e5ad9abd3151ec28ea51eb64c2d', + sha256: + 'dbea7473d5e7b3b4948081dacc6e35327d5a588f4fd0a2d68184bffd10439296', + md5: '8159944c79034d2bcabf73d461a7e643', + }, + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + name: 'siem-windows', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + Description: 'Device Census', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + OriginalFileName: 'DeviceCensus.exe', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.18362.1035 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222507, + task: 'Process Create (rule: ProcessCreate)', + event_id: 1, + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 04:13:20.791\nProcessGuid: {ce1d3c9b-b360-5f55-a115-000000000b00}\nProcessId: 5016\nImage: C:\\Windows\\System32\\DeviceCensus.exe\nFileVersion: 10.0.18362.1035 (WinBuild.160101.0800)\nDescription: Device Census\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: DeviceCensus.exe\nCommandLine: C:\\Windows\\system32\\devicecensus.exe\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=9E488437B2233E5AD9ABD3151EC28EA51EB64C2D,MD5=8159944C79034D2BCABF73D461A7E643,SHA256=DBEA7473D5E7B3B4948081DACC6E35327D5A588F4FD0A2D68184BFFD10439296,IMPHASH=0CDB6B589F0A125609D8DF646DE0EA86\nParentProcessGuid: {ce1d3c9b-b9b1-5f34-1c00-000000000b00}\nParentProcessId: 1060\nParentImage: C:\\Windows\\System32\\svchost.exe\nParentCommandLine: C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T04:13:20.791Z', + related: { + user: 'SYSTEM', + hash: [ + '9e488437b2233e5ad9abd3151ec28ea51eb64c2d', + '8159944c79034d2bcabf73d461a7e643', + 'dbea7473d5e7b3b4948081dacc6e35327d5a588f4fd0a2d68184bffd10439296', + '0cdb6b589f0a125609d8df646de0ea86', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T04:13:22.458Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: '9e488437b2233e5ad9abd3151ec28ea51eb64c2d', + imphash: '0cdb6b589f0a125609d8df646de0ea86', + sha256: + 'dbea7473d5e7b3b4948081dacc6e35327d5a588f4fd0a2d68184bffd10439296', + md5: '8159944c79034d2bcabf73d461a7e643', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'DiskSnapshot.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'HNKSZHQBA6bGZw2uCtRk', + _score: null, + _source: { + process: { + args: ['C:\\Windows\\system32\\disksnapshot.exe', '-z'], + name: 'DiskSnapshot.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599415124040], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'HNKSZHQBA6bGZw2uCtRk', + _score: 0, + _source: { + process: { + args: ['C:\\Windows\\system32\\disksnapshot.exe', '-z'], + parent: { + args: ['C:\\Windows\\system32\\svchost.exe', '-k', 'netsvcs', '-p'], + name: 'svchost.exe', + pid: 1060, + entity_id: '{ce1d3c9b-b9b1-5f34-1c00-000000000b00}', + executable: 'C:\\Windows\\System32\\svchost.exe', + command_line: 'C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + }, + pe: { + imphash: '69bdabb73b409f40ad05f057cec29380', + }, + name: 'DiskSnapshot.exe', + pid: 3120, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-2354-5f55-6415-000000000b00}', + command_line: 'C:\\Windows\\system32\\disksnapshot.exe -z', + executable: 'C:\\Windows\\System32\\DiskSnapshot.exe', + hash: { + sha1: '61b4d8d4757e15259e1e92c8236f37237b5380d1', + sha256: + 'c7b9591eb4dd78286615401c138c7c1a89f0e358caae1786de2c3b08e904ffdc', + md5: 'ece311ff51bd847a3874bfac85449c6b', + }, + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'DiskSnapshot.exe', + OriginalFileName: 'DiskSnapshot.exe', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.17763.652 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 221799, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-06 17:58:44.040\nProcessGuid: {ce1d3c9b-2354-5f55-6415-000000000b00}\nProcessId: 3120\nImage: C:\\Windows\\System32\\DiskSnapshot.exe\nFileVersion: 10.0.17763.652 (WinBuild.160101.0800)\nDescription: DiskSnapshot.exe\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: DiskSnapshot.exe\nCommandLine: C:\\Windows\\system32\\disksnapshot.exe -z\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=61B4D8D4757E15259E1E92C8236F37237B5380D1,MD5=ECE311FF51BD847A3874BFAC85449C6B,SHA256=C7B9591EB4DD78286615401C138C7C1A89F0E358CAAE1786DE2C3B08E904FFDC,IMPHASH=69BDABB73B409F40AD05F057CEC29380\nParentProcessGuid: {ce1d3c9b-b9b1-5f34-1c00-000000000b00}\nParentProcessId: 1060\nParentImage: C:\\Windows\\System32\\svchost.exe\nParentCommandLine: C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-06T17:58:44.040Z', + related: { + user: 'SYSTEM', + hash: [ + '61b4d8d4757e15259e1e92c8236f37237b5380d1', + 'ece311ff51bd847a3874bfac85449c6b', + 'c7b9591eb4dd78286615401c138c7c1a89f0e358caae1786de2c3b08e904ffdc', + '69bdabb73b409f40ad05f057cec29380', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-06T17:58:45.606Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: '61b4d8d4757e15259e1e92c8236f37237b5380d1', + imphash: '69bdabb73b409f40ad05f057cec29380', + sha256: + 'c7b9591eb4dd78286615401c138c7c1a89f0e358caae1786de2c3b08e904ffdc', + md5: 'ece311ff51bd847a3874bfac85449c6b', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'DismHost.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '2zncaHQBB-gskcly1QaD', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe', + '{6BB79B50-2038-4A10-B513-2FAC72FF213E}', + ], + name: 'DismHost.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599487135371], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '2zncaHQBB-gskcly1QaD', + _score: 0, + _source: { + process: { + args: [ + 'C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe', + '{6BB79B50-2038-4A10-B513-2FAC72FF213E}', + ], + parent: { + args: [ + 'C:\\ProgramData\\Microsoft\\Windows Defender\\platform\\4.18.2008.9-0\\MsMpEng.exe', + ], + name: 'MsMpEng.exe', + pid: 184, + entity_id: '{ce1d3c9b-1b55-5f4f-4913-000000000b00}', + executable: + 'C:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\4.18.2008.9-0\\MsMpEng.exe', + command_line: + '"C:\\ProgramData\\Microsoft\\Windows Defender\\platform\\4.18.2008.9-0\\MsMpEng.exe"', + }, + pe: { + imphash: 'a644b5814b05375757429dfb05524479', + }, + name: 'DismHost.exe', + pid: 1500, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-3c9f-5f56-d315-000000000b00}', + executable: + 'C:\\Windows\\Temp\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\DismHost.exe', + command_line: + 'C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe {6BB79B50-2038-4A10-B513-2FAC72FF213E}', + hash: { + sha1: 'a8a65b6a45a988f06e17ebd04e5462ca730d2337', + sha256: + 'b94317b7c665f1cec965e3322e0aa26c8be29eaf5830fb7fcd7e14ae88a8cf22', + md5: '5867dc628a444f2393f7eff007bd4417', + }, + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + name: 'siem-windows', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + type: 'winlogbeat', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'Dism Host Servicing Process', + OriginalFileName: 'DismHost.exe', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.17763.771 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 223274, + task: 'Process Create (rule: ProcessCreate)', + event_id: 1, + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 13:58:55.371\nProcessGuid: {ce1d3c9b-3c9f-5f56-d315-000000000b00}\nProcessId: 1500\nImage: C:\\Windows\\Temp\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\DismHost.exe\nFileVersion: 10.0.17763.771 (WinBuild.160101.0800)\nDescription: Dism Host Servicing Process\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: DismHost.exe\nCommandLine: C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe {6BB79B50-2038-4A10-B513-2FAC72FF213E}\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=A8A65B6A45A988F06E17EBD04E5462CA730D2337,MD5=5867DC628A444F2393F7EFF007BD4417,SHA256=B94317B7C665F1CEC965E3322E0AA26C8BE29EAF5830FB7FCD7E14AE88A8CF22,IMPHASH=A644B5814B05375757429DFB05524479\nParentProcessGuid: {ce1d3c9b-1b55-5f4f-4913-000000000b00}\nParentProcessId: 184\nParentImage: C:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\4.18.2008.9-0\\MsMpEng.exe\nParentCommandLine: "C:\\ProgramData\\Microsoft\\Windows Defender\\platform\\4.18.2008.9-0\\MsMpEng.exe"', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T13:58:55.371Z', + related: { + user: 'SYSTEM', + hash: [ + 'a8a65b6a45a988f06e17ebd04e5462ca730d2337', + '5867dc628a444f2393f7eff007bd4417', + 'b94317b7c665f1cec965e3322e0aa26c8be29eaf5830fb7fcd7e14ae88a8cf22', + 'a644b5814b05375757429dfb05524479', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T13:58:56.138Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: 'a8a65b6a45a988f06e17ebd04e5462ca730d2337', + imphash: 'a644b5814b05375757429dfb05524479', + sha256: + 'b94317b7c665f1cec965e3322e0aa26c8be29eaf5830fb7fcd7e14ae88a8cf22', + md5: '5867dc628a444f2393f7eff007bd4417', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'SIHClient.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'gdVuZXQBA6bGZw2uFsPP', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\System32\\sihclient.exe', + '/cv', + '33nfV21X50ie84HvATAt1w.0.1', + ], + name: 'SIHClient.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599429545370], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'gdVuZXQBA6bGZw2uFsPP', + _score: 0, + _source: { + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + process: { + args: [ + 'C:\\Windows\\System32\\sihclient.exe', + '/cv', + '33nfV21X50ie84HvATAt1w.0.1', + ], + parent: { + args: [ + 'C:\\Windows\\System32\\Upfc.exe', + '/launchtype', + 'periodic', + '/cv', + '33nfV21X50ie84HvATAt1w.0', + ], + name: 'upfc.exe', + pid: 4328, + entity_id: '{ce1d3c9b-5b8b-5f55-7815-000000000b00}', + executable: 'C:\\Windows\\System32\\upfc.exe', + command_line: + 'C:\\Windows\\System32\\Upfc.exe /launchtype periodic /cv 33nfV21X50ie84HvATAt1w.0', + }, + pe: { + imphash: '3bbd1eea2778ee3dcd883a4d5533aec3', + }, + name: 'SIHClient.exe', + pid: 2780, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-5ba9-5f55-8815-000000000b00}', + executable: 'C:\\Windows\\System32\\SIHClient.exe', + command_line: + 'C:\\Windows\\System32\\sihclient.exe /cv 33nfV21X50ie84HvATAt1w.0.1', + hash: { + sha1: '145ef8d82cf1e451381584cd9565a2d35a442504', + sha256: + '0e0bb70ae1888060b3ffb9a320963551b56dd0d4ce0b5dc1c8fadda4b7bf3f6a', + md5: 'dc1e380b36f4a8309f363d3809e607b8', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + Description: 'SIH Client', + OriginalFileName: 'sihclient.exe', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.17763.1217 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222106, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-06 21:59:05.370\nProcessGuid: {ce1d3c9b-5ba9-5f55-8815-000000000b00}\nProcessId: 2780\nImage: C:\\Windows\\System32\\SIHClient.exe\nFileVersion: 10.0.17763.1217 (WinBuild.160101.0800)\nDescription: SIH Client\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: sihclient.exe\nCommandLine: C:\\Windows\\System32\\sihclient.exe /cv 33nfV21X50ie84HvATAt1w.0.1\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=145EF8D82CF1E451381584CD9565A2D35A442504,MD5=DC1E380B36F4A8309F363D3809E607B8,SHA256=0E0BB70AE1888060B3FFB9A320963551B56DD0D4CE0B5DC1C8FADDA4B7BF3F6A,IMPHASH=3BBD1EEA2778EE3DCD883A4D5533AEC3\nParentProcessGuid: {ce1d3c9b-5b8b-5f55-7815-000000000b00}\nParentProcessId: 4328\nParentImage: C:\\Windows\\System32\\upfc.exe\nParentCommandLine: C:\\Windows\\System32\\Upfc.exe /launchtype periodic /cv 33nfV21X50ie84HvATAt1w.0', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-06T21:59:05.370Z', + related: { + user: 'SYSTEM', + hash: [ + '145ef8d82cf1e451381584cd9565a2d35a442504', + 'dc1e380b36f4a8309f363d3809e607b8', + '0e0bb70ae1888060b3ffb9a320963551b56dd0d4ce0b5dc1c8fadda4b7bf3f6a', + '3bbd1eea2778ee3dcd883a4d5533aec3', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + kind: 'event', + created: '2020-09-06T21:59:06.713Z', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: '145ef8d82cf1e451381584cd9565a2d35a442504', + imphash: '3bbd1eea2778ee3dcd883a4d5533aec3', + sha256: + '0e0bb70ae1888060b3ffb9a320963551b56dd0d4ce0b5dc1c8fadda4b7bf3f6a', + md5: 'dc1e380b36f4a8309f363d3809e607b8', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'SpeechModelDownload.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '6NmKZnQBA6bGZw2uma12', + _score: null, + _source: { + process: { + args: [ + 'C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe', + ], + name: 'SpeechModelDownload.exe', + }, + user: { + name: 'NETWORK SERVICE', + }, + }, + sort: [1599448191225], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: '6NmKZnQBA6bGZw2uma12', + _score: 0, + _source: { + process: { + args: [ + 'C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe', + ], + parent: { + args: ['C:\\Windows\\system32\\svchost.exe', '-k', 'netsvcs', '-p'], + name: 'svchost.exe', + pid: 1060, + entity_id: '{ce1d3c9b-b9b1-5f34-1c00-000000000b00}', + executable: 'C:\\Windows\\System32\\svchost.exe', + command_line: 'C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + }, + pe: { + imphash: '23bd5f904494d14029d9263cebae088d', + }, + name: 'SpeechModelDownload.exe', + working_directory: 'C:\\Windows\\system32\\', + pid: 4328, + entity_id: '{ce1d3c9b-a47f-5f55-9915-000000000b00}', + hash: { + sha1: '03e6e81192621dfd873814de3787c6e7d6af1509', + sha256: + '963fd9dc1b82c44d00eb91d61e2cb442af7357e3a603c23d469df53a6376f073', + md5: '3fd687e97e03d303e02bb37ec85de962', + }, + executable: + 'C:\\Windows\\System32\\Speech_OneCore\\common\\SpeechModelDownload.exe', + command_line: + 'C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe', + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + LogonGuid: '{ce1d3c9b-b9ac-5f34-e403-000000000000}', + Description: 'Speech Model Download Executable', + OriginalFileName: 'SpeechModelDownload.exe', + IntegrityLevel: 'System', + TerminalSessionId: '0', + FileVersion: '10.0.17763.1369 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e4', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222431, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 03:09:51.225\nProcessGuid: {ce1d3c9b-a47f-5f55-9915-000000000b00}\nProcessId: 4328\nImage: C:\\Windows\\System32\\Speech_OneCore\\common\\SpeechModelDownload.exe\nFileVersion: 10.0.17763.1369 (WinBuild.160101.0800)\nDescription: Speech Model Download Executable\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: SpeechModelDownload.exe\nCommandLine: C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\NETWORK SERVICE\nLogonGuid: {ce1d3c9b-b9ac-5f34-e403-000000000000}\nLogonId: 0x3E4\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=03E6E81192621DFD873814DE3787C6E7D6AF1509,MD5=3FD687E97E03D303E02BB37EC85DE962,SHA256=963FD9DC1B82C44D00EB91D61E2CB442AF7357E3A603C23D469DF53A6376F073,IMPHASH=23BD5F904494D14029D9263CEBAE088D\nParentProcessGuid: {ce1d3c9b-b9b1-5f34-1c00-000000000b00}\nParentProcessId: 1060\nParentImage: C:\\Windows\\System32\\svchost.exe\nParentCommandLine: C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T03:09:51.225Z', + related: { + user: 'NETWORK SERVICE', + hash: [ + '03e6e81192621dfd873814de3787c6e7d6af1509', + '3fd687e97e03d303e02bb37ec85de962', + '963fd9dc1b82c44d00eb91d61e2cb442af7357e3a603c23d469df53a6376f073', + '23bd5f904494d14029d9263cebae088d', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + kind: 'event', + created: '2020-09-07T03:09:52.370Z', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + type: ['start', 'process_start'], + category: ['process'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'NETWORK SERVICE', + }, + hash: { + sha1: '03e6e81192621dfd873814de3787c6e7d6af1509', + imphash: '23bd5f904494d14029d9263cebae088d', + sha256: + '963fd9dc1b82c44d00eb91d61e2cb442af7357e3a603c23d469df53a6376f073', + md5: '3fd687e97e03d303e02bb37ec85de962', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'UsoClient.exe', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'Pi68Z3QBc39KFIJb3txa', + _score: null, + _source: { + process: { + args: ['C:\\Windows\\system32\\usoclient.exe', 'StartScan'], + name: 'UsoClient.exe', + }, + user: { + name: 'SYSTEM', + }, + }, + sort: [1599468262455], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-windows', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: 'winlogbeat-8.0.0-2020.09.02-000001', + _id: 'Pi68Z3QBc39KFIJb3txa', + _score: 0, + _source: { + process: { + args: ['C:\\Windows\\system32\\usoclient.exe', 'StartScan'], + parent: { + args: ['C:\\Windows\\system32\\svchost.exe', '-k', 'netsvcs', '-p'], + name: 'svchost.exe', + pid: 1060, + entity_id: '{ce1d3c9b-b9b1-5f34-1c00-000000000b00}', + executable: 'C:\\Windows\\System32\\svchost.exe', + command_line: 'C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + }, + pe: { + imphash: '2510e8a4554aef2caf0a913be015929f', + }, + name: 'UsoClient.exe', + pid: 3864, + working_directory: 'C:\\Windows\\system32\\', + entity_id: '{ce1d3c9b-f2e6-5f55-bc15-000000000b00}', + command_line: 'C:\\Windows\\system32\\usoclient.exe StartScan', + executable: 'C:\\Windows\\System32\\UsoClient.exe', + hash: { + sha1: 'ebf56ad89d4740359d5d3d5370b31e56614bbb79', + sha256: + 'df3900cdc3c6f023037aaf2d4407c4e8aaa909013a69539fb4688e2bd099db85', + md5: '39750d33d277617b322adbb917f7b626', + }, + }, + agent: { + build_date: '2020-07-16 09:16:27 +0000 UTC ', + commit: '4dcbde39492bdc3843034bba8db811c68cb44b97 ', + name: 'siem-windows', + id: '05e1bff7-d7a8-416a-8554-aa10288fa07d', + ephemeral_id: '655abd6c-6c33-435d-a2eb-79b2a01e6d61', + type: 'winlogbeat', + version: '8.0.0', + user: { + name: 'inside_winlogbeat_user', + }, + }, + winlog: { + computer_name: 'siem-windows', + process: { + pid: 1252, + thread: { + id: 2896, + }, + }, + channel: 'Microsoft-Windows-Sysmon/Operational', + event_data: { + Company: 'Microsoft Corporation', + Description: 'UsoClient', + LogonGuid: '{ce1d3c9b-b9a7-5f34-e703-000000000000}', + OriginalFileName: 'UsoClient', + TerminalSessionId: '0', + IntegrityLevel: 'System', + FileVersion: '10.0.17763.1007 (WinBuild.160101.0800)', + Product: 'Microsoft® Windows® Operating System', + LogonId: '0x3e7', + RuleName: '-', + }, + opcode: 'Info', + version: 5, + record_id: 222846, + event_id: 1, + task: 'Process Create (rule: ProcessCreate)', + provider_guid: '{5770385f-c22a-43e0-bf4c-06f5698ffbd9}', + api: 'wineventlog', + provider_name: 'Microsoft-Windows-Sysmon', + user: { + identifier: 'S-1-5-18', + domain: 'NT AUTHORITY', + name: 'SYSTEM', + type: 'User', + }, + }, + log: { + level: 'information', + }, + message: + 'Process Create:\nRuleName: -\nUtcTime: 2020-09-07 08:44:22.455\nProcessGuid: {ce1d3c9b-f2e6-5f55-bc15-000000000b00}\nProcessId: 3864\nImage: C:\\Windows\\System32\\UsoClient.exe\nFileVersion: 10.0.17763.1007 (WinBuild.160101.0800)\nDescription: UsoClient\nProduct: Microsoft® Windows® Operating System\nCompany: Microsoft Corporation\nOriginalFileName: UsoClient\nCommandLine: C:\\Windows\\system32\\usoclient.exe StartScan\nCurrentDirectory: C:\\Windows\\system32\\\nUser: NT AUTHORITY\\SYSTEM\nLogonGuid: {ce1d3c9b-b9a7-5f34-e703-000000000000}\nLogonId: 0x3E7\nTerminalSessionId: 0\nIntegrityLevel: System\nHashes: SHA1=EBF56AD89D4740359D5D3D5370B31E56614BBB79,MD5=39750D33D277617B322ADBB917F7B626,SHA256=DF3900CDC3C6F023037AAF2D4407C4E8AAA909013A69539FB4688E2BD099DB85,IMPHASH=2510E8A4554AEF2CAF0A913BE015929F\nParentProcessGuid: {ce1d3c9b-b9b1-5f34-1c00-000000000b00}\nParentProcessId: 1060\nParentImage: C:\\Windows\\System32\\svchost.exe\nParentCommandLine: C:\\Windows\\system32\\svchost.exe -k netsvcs -p', + cloud: { + availability_zone: 'us-central1-c', + instance: { + name: 'siem-windows', + id: '9156726559029788564', + }, + provider: 'gcp', + machine: { + type: 'g1-small', + }, + project: { + id: 'elastic-siem', + }, + }, + '@timestamp': '2020-09-07T08:44:22.455Z', + related: { + user: 'SYSTEM', + hash: [ + 'ebf56ad89d4740359d5d3d5370b31e56614bbb79', + '39750d33d277617b322adbb917f7b626', + 'df3900cdc3c6f023037aaf2d4407c4e8aaa909013a69539fb4688e2bd099db85', + '2510e8a4554aef2caf0a913be015929f', + ], + }, + ecs: { + version: '1.5.0', + }, + host: { + hostname: 'siem-windows', + os: { + build: '17763.1397', + kernel: '10.0.17763.1397 (WinBuild.160101.0800)', + name: 'Windows Server 2019 Datacenter', + family: 'windows', + version: '10.0', + platform: 'windows', + }, + ip: ['fe80::ecf5:decc:3ec3:767e', '10.200.0.15'], + name: 'siem-windows', + id: 'ce1d3c9b-a815-4643-9641-ada0f2c00609', + mac: ['42:01:0a:c8:00:0f'], + architecture: 'x86_64', + }, + event: { + code: 1, + provider: 'Microsoft-Windows-Sysmon', + created: '2020-09-07T08:44:24.029Z', + kind: 'event', + module: 'sysmon', + action: 'Process Create (rule: ProcessCreate)', + category: ['process'], + type: ['start', 'process_start'], + }, + user: { + domain: 'NT AUTHORITY', + name: 'SYSTEM', + }, + hash: { + sha1: 'ebf56ad89d4740359d5d3d5370b31e56614bbb79', + imphash: '2510e8a4554aef2caf0a913be015929f', + sha256: + 'df3900cdc3c6f023037aaf2d4407c4e8aaa909013a69539fb4688e2bd099db85', + md5: '39750d33d277617b322adbb917f7b626', + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'apt-compat', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.process-default-000001', + _id: 'Ziw-Z3QBB-gskcly0vqU', + _score: null, + _source: { + process: { + args: ['/etc/cron.daily/apt-compat'], + name: 'apt-compat', + }, + user: { + name: 'root', + id: 0, + }, + }, + sort: [1599459901154], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-kibana', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.process-default-000001', + _id: 'Ziw-Z3QBB-gskcly0vqU', + _score: 0, + _source: { + agent: { + id: 'b1e3298e-10be-4032-b1ee-5a4cbb280aa1', + type: 'endpoint', + version: '7.9.1', + }, + process: { + Ext: { + ancestry: [ + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYyLTEzMjQzOTMzNTAxLjUzOTIzMzAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYxLTEzMjQzOTMzNTAxLjUzMjIzMTAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYxLTEzMjQzOTMzNTAxLjUyODg0MzAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYwLTEzMjQzOTMzNTAxLjUyMDI5ODAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYwLTEzMjQzOTMzNTAxLjUwNzM4MjAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODU5LTEzMjQzOTMzNTAxLjc3NTM1MDAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTUyNC0xMzIzNjA4NTMzMC4w', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEtMTMyMzYwODUzMjIuMA==', + ], + }, + args: ['/etc/cron.daily/apt-compat'], + parent: { + name: 'run-parts', + pid: 13861, + entity_id: + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYyLTEzMjQzOTMzNTAxLjUzOTIzMzAw', + executable: '/bin/run-parts', + }, + name: 'apt-compat', + pid: 13862, + args_count: 1, + entity_id: + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYyLTEzMjQzOTMzNTAxLjU0NDY0MDAw', + command_line: '/etc/cron.daily/apt-compat', + executable: '/etc/cron.daily/apt-compat', + hash: { + sha1: '61445721d0b5d86ac0a8386a4ceef450118f4fbb', + sha256: + '8eeae3a9df22621d51062e4dadfc5c63b49732b38a37b5d4e52c99c2237e5767', + md5: 'bc4a71cbcaeed4179f25d798257fa980', + }, + }, + message: 'Endpoint process event', + '@timestamp': '2020-09-07T06:25:01.154464000Z', + ecs: { + version: '1.5.0', + }, + data_stream: { + namespace: 'default', + type: 'logs', + dataset: 'endpoint.events.process', + }, + elastic: { + agent: { + id: 'ebee9a13-9ae3-4a55-9cb7-72ddf053055f', + }, + }, + host: { + hostname: 'siem-kibana', + os: { + Ext: { + variant: 'Debian', + }, + kernel: '4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27)', + name: 'Linux', + family: 'debian', + version: '9', + platform: 'debian', + full: 'Debian 9', + }, + ip: ['127.0.0.1', '::1', '10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'e50acb49-820b-c60a-392d-2ef75f276301', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + sequence: 197060, + ingested: '2020-09-07T06:26:44.476888Z', + created: '2020-09-07T06:25:01.154464000Z', + kind: 'event', + module: 'endpoint', + action: 'exec', + id: 'Lp6oofT0fzv0Auzq+++/kwCO', + category: ['process'], + type: ['start'], + dataset: 'endpoint.events.process', + }, + user: { + Ext: { + real: { + name: 'root', + id: 0, + }, + }, + name: 'root', + id: 0, + }, + group: { + Ext: { + real: { + name: 'root', + id: 0, + }, + }, + name: 'root', + id: 0, + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + { + key: 'bsdmainutils', + doc_count: 1, + process: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.process-default-000001', + _id: 'aSw-Z3QBB-gskcly0vqU', + _score: null, + _source: { + process: { + args: ['/etc/cron.daily/bsdmainutils'], + name: 'bsdmainutils', + }, + user: { + name: 'root', + id: 0, + }, + }, + sort: [1599459901155], + }, + ], + }, + }, + hosts: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'siem-kibana', + doc_count: 1, + host: { + hits: { + total: 1, + max_score: 0, + hits: [ + { + _index: '.ds-logs-endpoint.events.process-default-000001', + _id: 'aSw-Z3QBB-gskcly0vqU', + _score: 0, + _source: { + agent: { + id: 'b1e3298e-10be-4032-b1ee-5a4cbb280aa1', + type: 'endpoint', + version: '7.9.1', + }, + process: { + Ext: { + ancestry: [ + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYzLTEzMjQzOTMzNTAxLjU1MzMwMzAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYxLTEzMjQzOTMzNTAxLjUzMjIzMTAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYxLTEzMjQzOTMzNTAxLjUyODg0MzAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYwLTEzMjQzOTMzNTAxLjUyMDI5ODAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYwLTEzMjQzOTMzNTAxLjUwNzM4MjAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODU5LTEzMjQzOTMzNTAxLjc3NTM1MDAw', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTUyNC0xMzIzNjA4NTMzMC4w', + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEtMTMyMzYwODUzMjIuMA==', + ], + }, + args: ['/etc/cron.daily/bsdmainutils'], + parent: { + name: 'run-parts', + pid: 13861, + entity_id: + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYzLTEzMjQzOTMzNTAxLjU1MzMwMzAw', + executable: '/bin/run-parts', + }, + name: 'bsdmainutils', + pid: 13863, + args_count: 1, + entity_id: + 'YjFlMzI5OGUtMTBiZS00MDMyLWIxZWUtNWE0Y2JiMjgwYWExLTEzODYzLTEzMjQzOTMzNTAxLjU1ODEyMDAw', + command_line: '/etc/cron.daily/bsdmainutils', + executable: '/etc/cron.daily/bsdmainutils', + hash: { + sha1: 'fd24f1f3986e5527e804c4dccddee29ff42cb682', + sha256: + 'a68002bf1dc9f42a150087b00437448a46f7cae6755ecddca70a6d3c9d20a14b', + md5: '559387f792462a62e3efb1d573e38d11', + }, + }, + message: 'Endpoint process event', + '@timestamp': '2020-09-07T06:25:01.155812000Z', + ecs: { + version: '1.5.0', + }, + data_stream: { + namespace: 'default', + type: 'logs', + dataset: 'endpoint.events.process', + }, + elastic: { + agent: { + id: 'ebee9a13-9ae3-4a55-9cb7-72ddf053055f', + }, + }, + host: { + hostname: 'siem-kibana', + os: { + Ext: { + variant: 'Debian', + }, + kernel: '4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27)', + name: 'Linux', + family: 'debian', + version: '9', + platform: 'debian', + full: 'Debian 9', + }, + ip: ['127.0.0.1', '::1', '10.142.0.7', 'fe80::4001:aff:fe8e:7'], + name: 'siem-kibana', + id: 'e50acb49-820b-c60a-392d-2ef75f276301', + mac: ['42:01:0a:8e:00:07'], + architecture: 'x86_64', + }, + event: { + sequence: 197063, + ingested: '2020-09-07T06:26:44.477164Z', + created: '2020-09-07T06:25:01.155812000Z', + kind: 'event', + module: 'endpoint', + action: 'exec', + id: 'Lp6oofT0fzv0Auzq+++/kwCZ', + category: ['process'], + type: ['start'], + dataset: 'endpoint.events.process', + }, + user: { + Ext: { + real: { + name: 'root', + id: 0, + }, + }, + name: 'root', + id: 0, + }, + group: { + Ext: { + real: { + name: 'root', + id: 0, + }, + }, + name: 'root', + id: 0, + }, + }, + }, + ], + }, + }, + }, + ], + }, + host_count: { + value: 1, + }, + }, + ], + }, + }, + }, + total: 21, + loaded: 21, + edges: [ + { + node: { + _id: 'ayrMZnQBB-gskcly0w7l', + instances: 0, + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.631.0.exe', + 'WD', + '/q', + ], + name: ['AM_Delta_Patch_1.323.631.0.exe'], + }, + hosts: [ + { + id: ['siem-windows'], + name: ['siem-windows'], + }, + ], + user: { + id: [], + name: ['SYSTEM'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: 'M-GvaHQBA6bGZw2uBoYz', + instances: 0, + process: { + args: [ + 'C:\\Windows\\SoftwareDistribution\\Download\\Install\\AM_Delta_Patch_1.323.673.0.exe', + 'WD', + '/q', + ], + name: ['AM_Delta_Patch_1.323.673.0.exe'], + }, + hosts: [ + { + id: ['siem-windows'], + name: ['siem-windows'], + }, + ], + user: { + id: [], + name: ['SYSTEM'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: 'cinEZnQBB-gskclyvNmU', + instances: 0, + process: { + args: ['C:\\Windows\\system32\\devicecensus.exe'], + name: ['DeviceCensus.exe'], + }, + hosts: [ + { + id: ['siem-windows'], + name: ['siem-windows'], + }, + ], + user: { + id: [], + name: ['SYSTEM'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: 'HNKSZHQBA6bGZw2uCtRk', + instances: 0, + process: { + args: ['C:\\Windows\\system32\\disksnapshot.exe', '-z'], + name: ['DiskSnapshot.exe'], + }, + hosts: [ + { + id: ['siem-windows'], + name: ['siem-windows'], + }, + ], + user: { + id: [], + name: ['SYSTEM'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: '2zncaHQBB-gskcly1QaD', + instances: 0, + process: { + args: [ + 'C:\\Windows\\TEMP\\88C4F57A-8744-4EA6-824E-88FEF8A0E9DD\\dismhost.exe', + '{6BB79B50-2038-4A10-B513-2FAC72FF213E}', + ], + name: ['DismHost.exe'], + }, + hosts: [ + { + id: ['siem-windows'], + name: ['siem-windows'], + }, + ], + user: { + id: [], + name: ['SYSTEM'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: 'gdVuZXQBA6bGZw2uFsPP', + instances: 0, + process: { + args: ['C:\\Windows\\System32\\sihclient.exe', '/cv', '33nfV21X50ie84HvATAt1w.0.1'], + name: ['SIHClient.exe'], + }, + hosts: [ + { + id: ['siem-windows'], + name: ['siem-windows'], + }, + ], + user: { + id: [], + name: ['SYSTEM'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: '6NmKZnQBA6bGZw2uma12', + instances: 0, + process: { + args: ['C:\\Windows\\system32\\speech_onecore\\common\\SpeechModelDownload.exe'], + name: ['SpeechModelDownload.exe'], + }, + hosts: [ + { + id: ['siem-windows'], + name: ['siem-windows'], + }, + ], + user: { + id: [], + name: ['NETWORK SERVICE'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: 'Pi68Z3QBc39KFIJb3txa', + instances: 0, + process: { + args: ['C:\\Windows\\system32\\usoclient.exe', 'StartScan'], + name: ['UsoClient.exe'], + }, + hosts: [ + { + id: ['siem-windows'], + name: ['siem-windows'], + }, + ], + user: { + id: [], + name: ['SYSTEM'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: 'Ziw-Z3QBB-gskcly0vqU', + instances: 0, + process: { + args: ['/etc/cron.daily/apt-compat'], + name: ['apt-compat'], + }, + hosts: [ + { + id: ['siem-kibana'], + name: ['siem-kibana'], + }, + ], + user: { + id: [0], + name: ['root'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + { + node: { + _id: 'aSw-Z3QBB-gskcly0vqU', + instances: 0, + process: { + args: ['/etc/cron.daily/bsdmainutils'], + name: ['bsdmainutils'], + }, + hosts: [ + { + id: ['siem-kibana'], + name: ['siem-kibana'], + }, + ], + user: { + id: [0], + name: ['root'], + }, + }, + cursor: { + value: '', + tiebreaker: null, + }, + }, + ], + inspect: { + dsl: [ + '{\n "allowNoIndices": true,\n "index": [\n "apm-*-transaction*",\n "auditbeat-*",\n "endgame-*",\n "filebeat-*",\n "logs-*",\n "packetbeat-*",\n "winlogbeat-*"\n ],\n "ignoreUnavailable": true,\n "body": {\n "aggregations": {\n "process_count": {\n "cardinality": {\n "field": "process.name"\n }\n },\n "group_by_process": {\n "terms": {\n "size": 10,\n "field": "process.name",\n "order": [\n {\n "host_count": "asc"\n },\n {\n "_count": "asc"\n },\n {\n "_key": "asc"\n }\n ]\n },\n "aggregations": {\n "process": {\n "top_hits": {\n "size": 1,\n "sort": [\n {\n "@timestamp": {\n "order": "desc"\n }\n }\n ],\n "_source": [\n "process.args",\n "process.name",\n "user.id",\n "user.name"\n ]\n }\n },\n "host_count": {\n "cardinality": {\n "field": "host.name"\n }\n },\n "hosts": {\n "terms": {\n "field": "host.name"\n },\n "aggregations": {\n "host": {\n "top_hits": {\n "size": 1,\n "_source": []\n }\n }\n }\n }\n }\n }\n },\n "query": {\n "bool": {\n "should": [\n {\n "bool": {\n "filter": [\n {\n "term": {\n "agent.type": "auditbeat"\n }\n },\n {\n "term": {\n "event.module": "auditd"\n }\n },\n {\n "term": {\n "event.action": "executed"\n }\n }\n ]\n }\n },\n {\n "bool": {\n "filter": [\n {\n "term": {\n "agent.type": "auditbeat"\n }\n },\n {\n "term": {\n "event.module": "system"\n }\n },\n {\n "term": {\n "event.dataset": "process"\n }\n },\n {\n "term": {\n "event.action": "process_started"\n }\n }\n ]\n }\n },\n {\n "bool": {\n "filter": [\n {\n "term": {\n "agent.type": "winlogbeat"\n }\n },\n {\n "term": {\n "event.code": "4688"\n }\n }\n ]\n }\n },\n {\n "bool": {\n "filter": [\n {\n "term": {\n "winlog.event_id": 1\n }\n },\n {\n "term": {\n "winlog.channel": "Microsoft-Windows-Sysmon/Operational"\n }\n }\n ]\n }\n },\n {\n "bool": {\n "filter": [\n {\n "term": {\n "event.type": "process_start"\n }\n },\n {\n "term": {\n "event.category": "process"\n }\n }\n ]\n }\n },\n {\n "bool": {\n "filter": [\n {\n "term": {\n "event.category": "process"\n }\n },\n {\n "term": {\n "event.type": "start"\n }\n }\n ]\n }\n }\n ],\n "minimum_should_match": 1,\n "filter": [\n "{\\"bool\\":{\\"must\\":[],\\"filter\\":[{\\"match_all\\":{}},{\\"match_phrase\\":{\\"host.name\\":{\\"query\\":\\"siem-kibana\\"}}}],\\"should\\":[],\\"must_not\\":[]}}",\n {\n "range": {\n "@timestamp": {\n "gte": "2020-09-06T15:23:52.757Z",\n "lte": "2020-09-07T15:23:52.757Z",\n "format": "strict_date_optional_time"\n }\n }\n }\n ]\n }\n }\n },\n "size": 0,\n "track_total_hits": false\n}', + ], + }, + pageInfo: { + activePage: 0, + fakeTotalCount: 50, + showMorePagesIndicator: true, + }, + totalCount: 92, +}; + +export const expectedDsl = { + allowNoIndices: true, + index: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + ignoreUnavailable: true, + body: { + aggregations: { + process_count: { cardinality: { field: 'process.name' } }, + group_by_process: { + terms: { + size: 10, + field: 'process.name', + order: [{ host_count: 'asc' }, { _count: 'asc' }, { _key: 'asc' }], + }, + aggregations: { + process: { + top_hits: { + size: 1, + sort: [{ '@timestamp': { order: 'desc' } }], + _source: ['process.args', 'process.name', 'user.id', 'user.name'], + }, + }, + host_count: { cardinality: { field: 'host.name' } }, + hosts: { + terms: { field: 'host.name' }, + aggregations: { host: { top_hits: { size: 1, _source: [] } } }, + }, + }, + }, + }, + query: { + bool: { + should: [ + { + bool: { + filter: [ + { term: { 'agent.type': 'auditbeat' } }, + { term: { 'event.module': 'auditd' } }, + { term: { 'event.action': 'executed' } }, + ], + }, + }, + { + bool: { + filter: [ + { term: { 'agent.type': 'auditbeat' } }, + { term: { 'event.module': 'system' } }, + { term: { 'event.dataset': 'process' } }, + { term: { 'event.action': 'process_started' } }, + ], + }, + }, + { + bool: { + filter: [ + { term: { 'agent.type': 'winlogbeat' } }, + { term: { 'event.code': '4688' } }, + ], + }, + }, + { + bool: { + filter: [ + { term: { 'winlog.event_id': 1 } }, + { term: { 'winlog.channel': 'Microsoft-Windows-Sysmon/Operational' } }, + ], + }, + }, + { + bool: { + filter: [ + { term: { 'event.type': 'process_start' } }, + { term: { 'event.category': 'process' } }, + ], + }, + }, + { + bool: { + filter: [ + { term: { 'event.category': 'process' } }, + { term: { 'event.type': 'start' } }, + ], + }, + }, + ], + minimum_should_match: 1, + filter: [ + '{"bool":{"must":[],"filter":[{"match_all":{}},{"match_phrase":{"host.name":{"query":"siem-kibana"}}}],"should":[],"must_not":[]}}', + { + range: { + '@timestamp': { + gte: '2020-09-06T15:23:52.757Z', + lte: '2020-09-07T15:23:52.757Z', + format: 'strict_date_optional_time', + }, + }, + }, + ], + }, + }, + }, + size: 0, + track_total_hits: false, +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/dsl/query.dsl.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/dsl/query.dsl.test.ts new file mode 100644 index 0000000000000..31e4069e458be --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/dsl/query.dsl.test.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { buildQuery } from './query.dsl'; +import { mockOptions, expectedDsl } from '../__mocks__/'; + +describe('buildQuery', () => { + test('build query from options correctly', () => { + expect(buildQuery(mockOptions)).toEqual(expectedDsl); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/helpers.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/helpers.test.ts new file mode 100644 index 0000000000000..096ca570ae852 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/helpers.test.ts @@ -0,0 +1,269 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { processFieldsMap } from '../../../../../../common/ecs/ecs_fields'; + +import { + UncommonProcessesEdges, + UncommonProcessHit, +} from '../../../../../../common/search_strategy'; + +import { formatUncommonProcessesData, getHosts, UncommonProcessBucket } from './helpers'; + +describe('helpers', () => { + describe('#getHosts', () => { + const bucket1: UncommonProcessBucket = { + key: '123', + hosts: { + buckets: [ + { + key: '123', + host: { + hits: { + total: 0, + max_score: 0, + hits: [ + { + _index: 'hit-1', + _type: 'type-1', + _id: 'id-1', + _score: 0, + _source: { + host: { + name: ['host-1'], + id: ['host-id-1'], + }, + }, + }, + ], + }, + }, + }, + ], + }, + process: { + hits: { + total: { + value: 1, + relation: 'eq', + }, + max_score: 5, + hits: [], + }, + }, + }; + const bucket2: UncommonProcessBucket = { + key: '345', + hosts: { + buckets: [ + { + key: '123', + host: { + hits: { + total: 0, + max_score: 0, + hits: [ + { + _index: 'hit-1', + _type: 'type-1', + _id: 'id-1', + _score: 0, + _source: { + host: { + name: ['host-1'], + id: ['host-id-1'], + }, + }, + }, + ], + }, + }, + }, + { + key: '345', + host: { + hits: { + total: 0, + max_score: 0, + hits: [ + { + _index: 'hit-2', + _type: 'type-2', + _id: 'id-2', + _score: 0, + _source: { + host: { + name: ['host-2'], + id: ['host-id-2'], + }, + }, + }, + ], + }, + }, + }, + ], + }, + process: { + hits: { + total: { + value: 1, + relation: 'eq', + }, + max_score: 5, + hits: [], + }, + }, + }; + const bucket3: UncommonProcessBucket = { + key: '789', + hosts: { + buckets: [ + { + key: '789', + host: { + hits: { + total: 0, + max_score: 0, + hits: [ + { + _index: 'hit-9', + _type: 'type-9', + _id: 'id-9', + _score: 0, + _source: { + // @ts-expect-error ts doesn't like seeing the object written this way, but sometimes this is the data we get! + 'host.id': ['host-id-9'], + 'host.name': ['host-9'], + }, + }, + ], + }, + }, + }, + ], + }, + process: { + hits: { + total: { + value: 1, + relation: 'eq', + }, + max_score: 5, + hits: [], + }, + }, + }; + + test('will return a single host correctly', () => { + const hosts = getHosts(bucket1.hosts.buckets); + expect(hosts).toEqual([{ id: ['123'], name: ['host-1'] }]); + }); + + test('will return two hosts correctly', () => { + const hosts = getHosts(bucket2.hosts.buckets); + expect(hosts).toEqual([ + { id: ['123'], name: ['host-1'] }, + { id: ['345'], name: ['host-2'] }, + ]); + }); + + test('will return a dot notation host', () => { + const hosts = getHosts(bucket3.hosts.buckets); + expect(hosts).toEqual([{ id: ['789'], name: ['host-9'] }]); + }); + + test('will return no hosts when given an empty array', () => { + const hosts = getHosts([]); + expect(hosts).toEqual([]); + }); + }); + + describe('#formatUncommonProcessesData', () => { + const hit: UncommonProcessHit = { + _index: 'index-123', + _type: 'type-123', + _id: 'id-123', + _score: 10, + total: { + value: 100, + relation: 'eq', + }, + host: [ + { id: ['host-id-1'], name: ['host-name-1'] }, + { id: ['host-id-1'], name: ['host-name-1'] }, + ], + _source: { + '@timestamp': 'time', + process: { + name: ['process-1'], + title: ['title-1'], + }, + }, + cursor: 'cursor-1', + sort: [0], + }; + + test('it formats a uncommon process data with a source of name correctly', () => { + const fields: readonly string[] = ['process.name']; + const data = formatUncommonProcessesData(fields, hit, processFieldsMap); + const expected: UncommonProcessesEdges = { + cursor: { tiebreaker: null, value: 'cursor-1' }, + node: { + _id: 'id-123', + hosts: [ + { id: ['host-id-1'], name: ['host-name-1'] }, + { id: ['host-id-1'], name: ['host-name-1'] }, + ], + process: { + name: ['process-1'], + }, + instances: 100, + }, + }; + expect(data).toEqual(expected); + }); + + test('it formats a uncommon process data with a source of name and title correctly', () => { + const fields: readonly string[] = ['process.name', 'process.title']; + const data = formatUncommonProcessesData(fields, hit, processFieldsMap); + const expected: UncommonProcessesEdges = { + cursor: { tiebreaker: null, value: 'cursor-1' }, + node: { + _id: 'id-123', + hosts: [ + { id: ['host-id-1'], name: ['host-name-1'] }, + { id: ['host-id-1'], name: ['host-name-1'] }, + ], + instances: 100, + process: { + name: ['process-1'], + title: ['title-1'], + }, + }, + }; + expect(data).toEqual(expected); + }); + + test('it formats a uncommon process data without any data if fields is empty', () => { + const fields: readonly string[] = []; + const data = formatUncommonProcessesData(fields, hit, processFieldsMap); + const expected: UncommonProcessesEdges = { + cursor: { + tiebreaker: null, + value: '', + }, + node: { + _id: '', + hosts: [], + instances: 0, + process: {}, + }, + }; + expect(data).toEqual(expected); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/index.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/index.test.ts new file mode 100644 index 0000000000000..a5fa9b459d1bf --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/uncommon_processes/index.test.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { DEFAULT_MAX_TABLE_QUERY_SIZE } from '../../../../../../common/constants'; + +import { HostUncommonProcessesRequestOptions } from '../../../../../../common/search_strategy/security_solution'; +import * as buildQuery from './dsl/query.dsl'; +import { uncommonProcesses } from '.'; +import { + mockOptions, + mockSearchStrategyResponse, + formattedSearchStrategyResponse, +} from './__mocks__'; + +describe('uncommonProcesses search strategy', () => { + const buildUncommonProcessesQuery = jest.spyOn(buildQuery, 'buildQuery'); + + afterEach(() => { + buildUncommonProcessesQuery.mockClear(); + }); + + describe('buildDsl', () => { + test('should build dsl query', () => { + uncommonProcesses.buildDsl(mockOptions); + expect(buildUncommonProcessesQuery).toHaveBeenCalledWith(mockOptions); + }); + + test('should throw error if query size is greater equal than DEFAULT_MAX_TABLE_QUERY_SIZE ', () => { + const overSizeOptions = { + ...mockOptions, + pagination: { + ...mockOptions.pagination, + querySize: DEFAULT_MAX_TABLE_QUERY_SIZE, + }, + } as HostUncommonProcessesRequestOptions; + + expect(() => { + uncommonProcesses.buildDsl(overSizeOptions); + }).toThrowError(`No query size above ${DEFAULT_MAX_TABLE_QUERY_SIZE}`); + }); + }); + + describe('parse', () => { + test('should parse data correctly', async () => { + const result = await uncommonProcesses.parse(mockOptions, mockSearchStrategyResponse); + expect(result).toMatchObject(formattedSearchStrategyResponse); + }); + }); +}); From ed5a2bd090bc8f4fffba4cab6bf37292c6a48d0c Mon Sep 17 00:00:00 2001 From: Nathan L Smith Date: Tue, 8 Sep 2020 08:49:35 -0500 Subject: [PATCH 19/58] Remove useMatchedRoutes/MatchedRouteContext (#76788) We're not using them. --- .../plugins/apm/public/application/index.tsx | 17 ++++------ .../public/context/MatchedRouteContext.tsx | 34 ------------------- .../apm/public/hooks/useMatchedRoutes.tsx | 12 ------- 3 files changed, 7 insertions(+), 56 deletions(-) delete mode 100644 x-pack/plugins/apm/public/context/MatchedRouteContext.tsx delete mode 100644 x-pack/plugins/apm/public/hooks/useMatchedRoutes.tsx diff --git a/x-pack/plugins/apm/public/application/index.tsx b/x-pack/plugins/apm/public/application/index.tsx index 3f4f3116152c4..2b0b3ddd98167 100644 --- a/x-pack/plugins/apm/public/application/index.tsx +++ b/x-pack/plugins/apm/public/application/index.tsx @@ -27,7 +27,6 @@ import { ApmPluginContext } from '../context/ApmPluginContext'; import { LicenseProvider } from '../context/LicenseContext'; import { LoadingIndicatorProvider } from '../context/LoadingIndicatorContext'; import { LocationProvider } from '../context/LocationContext'; -import { MatchedRouteProvider } from '../context/MatchedRouteContext'; import { UrlParamsProvider } from '../context/UrlParamsContext'; import { ApmPluginSetupDeps } from '../plugin'; import { createCallApmApi } from '../services/rest/createCallApmApi'; @@ -100,15 +99,13 @@ export function ApmAppRoot({ - - - - - - - - - + + + + + + + diff --git a/x-pack/plugins/apm/public/context/MatchedRouteContext.tsx b/x-pack/plugins/apm/public/context/MatchedRouteContext.tsx deleted file mode 100644 index 64a26a183d8cb..0000000000000 --- a/x-pack/plugins/apm/public/context/MatchedRouteContext.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import React, { useMemo, ReactChild } from 'react'; -import { matchPath } from 'react-router-dom'; -import { useLocation } from '../hooks/useLocation'; -import { BreadcrumbRoute } from '../components/app/Main/ProvideBreadcrumbs'; - -export const MatchedRouteContext = React.createContext([]); - -interface MatchedRouteProviderProps { - children: ReactChild; - routes: BreadcrumbRoute[]; -} -export function MatchedRouteProvider({ - children, - routes, -}: MatchedRouteProviderProps) { - const { pathname } = useLocation(); - - const contextValue = useMemo(() => { - return routes.filter((route) => { - return matchPath(pathname, { - path: route.path, - }); - }); - }, [pathname, routes]); - - return ( - - ); -} diff --git a/x-pack/plugins/apm/public/hooks/useMatchedRoutes.tsx b/x-pack/plugins/apm/public/hooks/useMatchedRoutes.tsx deleted file mode 100644 index 74250096022d0..0000000000000 --- a/x-pack/plugins/apm/public/hooks/useMatchedRoutes.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { useContext } from 'react'; -import { MatchedRouteContext } from '../context/MatchedRouteContext'; - -export function useMatchedRoutes() { - return useContext(MatchedRouteContext); -} From f351400cd8c7dae536b92743d77bf995b437efcd Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Tue, 8 Sep 2020 14:51:54 +0100 Subject: [PATCH 20/58] [Security Strategy] add unit test for lastFirstSeen Search Strategy (#76911) * add unit test for lastFirstSeen * fix types * fix unit test --- .../hosts/last_first_seen/__mocks__/index.ts | 90 +++++++++++++++++++ .../hosts/last_first_seen/index.test.ts | 35 ++++++++ .../query.last_first_seen_host.dsl.test.ts | 13 +++ 3 files changed, 138 insertions(+) create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/__mocks__/index.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/index.test.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/query.last_first_seen_host.dsl.test.ts diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/__mocks__/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/__mocks__/index.ts new file mode 100644 index 0000000000000..224dcd1f8de24 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/__mocks__/index.ts @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { HostsQueries } from '../../../../../../../common/search_strategy'; + +export const mockOptions = { + defaultIndex: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + docValueFields: [], + factoryQueryType: HostsQueries.firstLastSeen, + hostName: 'siem-kibana', +}; + +export const mockSearchStrategyResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 230, + timed_out: false, + _shards: { total: 21, successful: 21, skipped: 0, failed: 0 }, + hits: { total: -1, max_score: 0, hits: [] }, + aggregations: { + lastSeen: { value: 1599554931759, value_as_string: '2020-09-08T08:48:51.759Z' }, + firstSeen: { value: 1591611722000, value_as_string: '2020-06-08T10:22:02.000Z' }, + }, + }, + total: 21, + loaded: 21, +}; + +export const formattedSearchStrategyResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 230, + timed_out: false, + _shards: { total: 21, successful: 21, skipped: 0, failed: 0 }, + hits: { total: -1, max_score: 0, hits: [] }, + aggregations: { + lastSeen: { value: 1599554931759, value_as_string: '2020-09-08T08:48:51.759Z' }, + firstSeen: { value: 1591611722000, value_as_string: '2020-06-08T10:22:02.000Z' }, + }, + }, + total: 21, + loaded: 21, + inspect: { + dsl: [ + '{\n "allowNoIndices": true,\n "index": [\n "apm-*-transaction*",\n "auditbeat-*",\n "endgame-*",\n "filebeat-*",\n "logs-*",\n "packetbeat-*",\n "winlogbeat-*"\n ],\n "ignoreUnavailable": true,\n "body": {\n "docvalue_fields": [],\n "aggregations": {\n "firstSeen": {\n "min": {\n "field": "@timestamp"\n }\n },\n "lastSeen": {\n "max": {\n "field": "@timestamp"\n }\n }\n },\n "query": {\n "bool": {\n "filter": [\n {\n "term": {\n "host.name": "siem-kibana"\n }\n }\n ]\n }\n },\n "size": 0,\n "track_total_hits": false\n }\n}', + ], + response: [ + '{\n "isPartial": false,\n "isRunning": false,\n "rawResponse": {\n "took": 230,\n "timed_out": false,\n "_shards": {\n "total": 21,\n "successful": 21,\n "skipped": 0,\n "failed": 0\n },\n "hits": {\n "total": -1,\n "max_score": 0,\n "hits": []\n },\n "aggregations": {\n "lastSeen": {\n "value": 1599554931759,\n "value_as_string": "2020-09-08T08:48:51.759Z"\n },\n "firstSeen": {\n "value": 1591611722000,\n "value_as_string": "2020-06-08T10:22:02.000Z"\n }\n }\n },\n "total": 21,\n "loaded": 21\n}', + ], + }, + firstSeen: '2020-06-08T10:22:02.000Z', + lastSeen: '2020-09-08T08:48:51.759Z', +}; + +export const expectedDsl = { + allowNoIndices: true, + index: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + ignoreUnavailable: true, + body: { + docvalue_fields: [], + aggregations: { + firstSeen: { min: { field: '@timestamp' } }, + lastSeen: { max: { field: '@timestamp' } }, + }, + query: { bool: { filter: [{ term: { 'host.name': 'siem-kibana' } }] } }, + size: 0, + track_total_hits: false, + }, +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/index.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/index.test.ts new file mode 100644 index 0000000000000..9217a2654f1a6 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/index.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import * as buildQuery from './query.last_first_seen_host.dsl'; +import { firstLastSeenHost } from '.'; +import { + mockOptions, + mockSearchStrategyResponse, + formattedSearchStrategyResponse, +} from './__mocks__'; + +describe('firstLastSeenHost search strategy', () => { + const buildFirstLastSeenHostQuery = jest.spyOn(buildQuery, 'buildFirstLastSeenHostQuery'); + + afterEach(() => { + buildFirstLastSeenHostQuery.mockClear(); + }); + + describe('buildDsl', () => { + test('should build dsl query', () => { + firstLastSeenHost.buildDsl(mockOptions); + expect(buildFirstLastSeenHostQuery).toHaveBeenCalledWith(mockOptions); + }); + }); + + describe('parse', () => { + test('should parse data correctly', async () => { + const result = await firstLastSeenHost.parse(mockOptions, mockSearchStrategyResponse); + expect(result).toMatchObject(formattedSearchStrategyResponse); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/query.last_first_seen_host.dsl.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/query.last_first_seen_host.dsl.test.ts new file mode 100644 index 0000000000000..b03bc3a8197f5 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/last_first_seen/query.last_first_seen_host.dsl.test.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { buildFirstLastSeenHostQuery as buildQuery } from './query.last_first_seen_host.dsl'; +import { mockOptions, expectedDsl } from './__mocks__'; + +describe('buildQuery', () => { + test('build query from options correctly', () => { + expect(buildQuery(mockOptions)).toEqual(expectedDsl); + }); +}); From a06ade93649509364dd022c674c98ca05518162e Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Tue, 8 Sep 2020 14:53:28 +0100 Subject: [PATCH 21/58] add unit test for hosts (#76927) --- .../factory/hosts/helpers.ts | 113 ------------------ .../factory/hosts/index.test.ts | 35 ++++++ 2 files changed, 35 insertions(+), 113 deletions(-) delete mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/helpers.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/index.test.ts diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/helpers.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/helpers.ts deleted file mode 100644 index 56f7aec2327a5..0000000000000 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/helpers.ts +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import { set } from '@elastic/safer-lodash-set/fp'; -import { get, has, head } from 'lodash/fp'; -import { hostFieldsMap } from '../../../../../common/ecs/ecs_fields'; -import { - HostsEdges, - HostItem, -} from '../../../../../common/search_strategy/security_solution/hosts'; - -import { HostAggEsItem, HostBuckets, HostValue } from '../../../../lib/hosts/types'; - -import { toArray } from '../../../helpers/to_array'; - -const hostsFields = ['_id', 'lastSeen', 'host.id', 'host.name', 'host.os.name', 'host.os.version']; - -export const formatHostEdgesData = (bucket: HostAggEsItem): HostsEdges => - hostsFields.reduce( - (flattenedFields, fieldName) => { - const hostId = get('key', bucket); - flattenedFields.node._id = hostId || null; - flattenedFields.cursor.value = hostId || ''; - const fieldValue = getHostFieldValue(fieldName, bucket); - if (fieldValue != null) { - return set(`node.${fieldName}`, toArray(fieldValue), flattenedFields); - } - return flattenedFields; - }, - { - node: {}, - cursor: { - value: '', - tiebreaker: null, - }, - } as HostsEdges - ); - -const hostFields = [ - '_id', - 'host.architecture', - 'host.id', - 'host.ip', - 'host.id', - 'host.mac', - 'host.name', - 'host.os.family', - 'host.os.name', - 'host.os.platform', - 'host.os.version', - 'host.type', - 'cloud.instance.id', - 'cloud.machine.type', - 'cloud.provider', - 'cloud.region', - 'endpoint.endpointPolicy', - 'endpoint.policyStatus', - 'endpoint.sensorVersion', -]; - -export const formatHostItem = (bucket: HostAggEsItem): HostItem => - hostFields.reduce((flattenedFields, fieldName) => { - const fieldValue = getHostFieldValue(fieldName, bucket); - if (fieldValue != null) { - return set(fieldName, fieldValue, flattenedFields); - } - return flattenedFields; - }, {}); - -const getHostFieldValue = (fieldName: string, bucket: HostAggEsItem): string | string[] | null => { - const aggField = hostFieldsMap[fieldName] - ? hostFieldsMap[fieldName].replace(/\./g, '_') - : fieldName.replace(/\./g, '_'); - if ( - [ - 'host.ip', - 'host.mac', - 'cloud.instance.id', - 'cloud.machine.type', - 'cloud.provider', - 'cloud.region', - ].includes(fieldName) && - has(aggField, bucket) - ) { - const data: HostBuckets = get(aggField, bucket); - return data.buckets.map((obj) => obj.key); - } else if (has(`${aggField}.buckets`, bucket)) { - return getFirstItem(get(`${aggField}`, bucket)); - } else if (has(aggField, bucket)) { - const valueObj: HostValue = get(aggField, bucket); - return valueObj.value_as_string; - } else if (['host.name', 'host.os.name', 'host.os.version'].includes(fieldName)) { - switch (fieldName) { - case 'host.name': - return get('key', bucket) || null; - case 'host.os.name': - return get('os.hits.hits[0]._source.host.os.name', bucket) || null; - case 'host.os.version': - return get('os.hits.hits[0]._source.host.os.version', bucket) || null; - } - } - return null; -}; - -const getFirstItem = (data: HostBuckets): string | null => { - const firstItem = head(data.buckets); - if (firstItem == null) { - return null; - } - return firstItem.key; -}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/index.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/index.test.ts new file mode 100644 index 0000000000000..edcba88a0cd89 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/index.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { hostsFactory } from '.'; +import { HostsQueries } from '../../../../../common/search_strategy'; +import { allHosts } from './all'; +import { hostDetails } from './details'; +import { hostOverview } from './overview'; +import { firstLastSeenHost } from './last_first_seen'; +import { uncommonProcesses } from './uncommon_processes'; +import { authentications } from './authentications'; + +jest.mock('./all'); +jest.mock('./details'); +jest.mock('./overview'); +jest.mock('./last_first_seen'); +jest.mock('./uncommon_processes'); +jest.mock('./authentications'); + +describe('hostsFactory', () => { + test('should include correct apis', () => { + const expectedHostsFactory = { + [HostsQueries.details]: hostDetails, + [HostsQueries.hosts]: allHosts, + [HostsQueries.overview]: hostOverview, + [HostsQueries.firstLastSeen]: firstLastSeenHost, + [HostsQueries.uncommonProcesses]: uncommonProcesses, + [HostsQueries.authentications]: authentications, + }; + expect(hostsFactory).toEqual(expectedHostsFactory); + }); +}); From 79d799c34c97caa574f1c88d13a4cde83f2eec02 Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Tue, 8 Sep 2020 14:54:46 +0100 Subject: [PATCH 22/58] [Security Solution] add unit test for host overview search strategy (#76917) * add unit test for host overview search strategy * fix types * fix types * fix unit test --- .../factory/hosts/overview/__mocks__/index.ts | 302 ++++++++++++++++++ .../factory/hosts/overview/index.test.ts | 35 ++ .../overview/query.overview_host.dsl.test.ts | 13 + 3 files changed, 350 insertions(+) create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/__mocks__/index.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/index.test.ts create mode 100644 x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.overview_host.dsl.test.ts diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/__mocks__/index.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/__mocks__/index.ts new file mode 100644 index 0000000000000..c017f39842ba1 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/__mocks__/index.ts @@ -0,0 +1,302 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { IEsSearchResponse } from '../../../../../../../../../../src/plugins/data/common'; +import { + HostsQueries, + HostOverviewRequestOptions, +} from '../../../../../../../common/search_strategy'; + +export const mockOptions: HostOverviewRequestOptions = { + defaultIndex: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + factoryQueryType: HostsQueries.overview, + filterQuery: + '{"bool":{"must":[],"filter":[{"match_all":{}},{"bool":{"filter":[{"bool":{"should":[{"exists":{"field":"host.name"}}],"minimum_should_match":1}}]}}],"should":[],"must_not":[]}}', + timerange: { interval: '12h', from: '2020-09-07T09:47:28.606Z', to: '2020-09-08T09:47:28.606Z' }, +}; + +export const mockSearchStrategyResponse: IEsSearchResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 45, + timed_out: false, + _shards: { total: 21, successful: 21, skipped: 0, failed: 0 }, + hits: { total: -1, max_score: 0, hits: [] }, + aggregations: { + fim_count: { meta: {}, doc_count: 0 }, + endgame_module: { + meta: {}, + doc_count: 66903, + process_event_count: { meta: {}, doc_count: 52981 }, + dns_event_count: { meta: {}, doc_count: 0 }, + network_event_count: { meta: {}, doc_count: 9860 }, + security_event_count: { meta: {}, doc_count: 0 }, + image_load_event_count: { meta: {}, doc_count: 0 }, + registry_event: { meta: {}, doc_count: 0 }, + file_event_count: { meta: {}, doc_count: 4062 }, + }, + winlog_module: { + meta: {}, + doc_count: 1949, + mwsysmon_operational_event_count: { meta: {}, doc_count: 1781 }, + security_event_count: { meta: {}, doc_count: 42 }, + }, + auditd_count: { meta: {}, doc_count: 0 }, + system_module: { + meta: {}, + doc_count: 1793, + package_count: { doc_count: 0 }, + login_count: { doc_count: 0 }, + user_count: { doc_count: 0 }, + process_count: { doc_count: 0 }, + filebeat_count: { doc_count: 1793 }, + }, + }, + }, + total: 21, + loaded: 21, +}; + +export const formattedSearchStrategyResponse = { + isPartial: false, + isRunning: false, + rawResponse: { + took: 45, + timed_out: false, + _shards: { total: 21, successful: 21, skipped: 0, failed: 0 }, + hits: { total: -1, max_score: 0, hits: [] }, + aggregations: { + fim_count: { meta: {}, doc_count: 0 }, + endgame_module: { + meta: {}, + doc_count: 66903, + process_event_count: { meta: {}, doc_count: 52981 }, + dns_event_count: { meta: {}, doc_count: 0 }, + network_event_count: { meta: {}, doc_count: 9860 }, + security_event_count: { meta: {}, doc_count: 0 }, + image_load_event_count: { meta: {}, doc_count: 0 }, + registry_event: { meta: {}, doc_count: 0 }, + file_event_count: { meta: {}, doc_count: 4062 }, + }, + winlog_module: { + meta: {}, + doc_count: 1949, + mwsysmon_operational_event_count: { meta: {}, doc_count: 1781 }, + security_event_count: { meta: {}, doc_count: 42 }, + }, + auditd_count: { meta: {}, doc_count: 0 }, + system_module: { + meta: {}, + doc_count: 1793, + package_count: { doc_count: 0 }, + login_count: { doc_count: 0 }, + user_count: { doc_count: 0 }, + process_count: { doc_count: 0 }, + filebeat_count: { doc_count: 1793 }, + }, + }, + }, + total: 21, + loaded: 21, + inspect: { + dsl: [ + '{\n "allowNoIndices": true,\n "index": [\n "apm-*-transaction*",\n "auditbeat-*",\n "endgame-*",\n "filebeat-*",\n "logs-*",\n "packetbeat-*",\n "winlogbeat-*"\n ],\n "ignoreUnavailable": true,\n "body": {\n "aggregations": {\n "auditd_count": {\n "filter": {\n "term": {\n "event.module": "auditd"\n }\n }\n },\n "endgame_module": {\n "filter": {\n "bool": {\n "should": [\n {\n "term": {\n "event.module": "endpoint"\n }\n },\n {\n "term": {\n "event.module": "endgame"\n }\n }\n ]\n }\n },\n "aggs": {\n "dns_event_count": {\n "filter": {\n "bool": {\n "should": [\n {\n "bool": {\n "filter": [\n {\n "term": {\n "network.protocol": "dns"\n }\n },\n {\n "term": {\n "event.category": "network"\n }\n }\n ]\n }\n },\n {\n "term": {\n "endgame.event_type_full": "dns_event"\n }\n }\n ]\n }\n }\n },\n "file_event_count": {\n "filter": {\n "bool": {\n "should": [\n {\n "term": {\n "event.category": "file"\n }\n },\n {\n "term": {\n "endgame.event_type_full": "file_event"\n }\n }\n ]\n }\n }\n },\n "image_load_event_count": {\n "filter": {\n "bool": {\n "should": [\n {\n "bool": {\n "should": [\n {\n "term": {\n "event.category": "library"\n }\n },\n {\n "term": {\n "event.category": "driver"\n }\n }\n ]\n }\n },\n {\n "term": {\n "endgame.event_type_full": "image_load_event"\n }\n }\n ]\n }\n }\n },\n "network_event_count": {\n "filter": {\n "bool": {\n "should": [\n {\n "bool": {\n "filter": [\n {\n "bool": {\n "must_not": {\n "term": {\n "network.protocol": "dns"\n }\n }\n }\n },\n {\n "term": {\n "event.category": "network"\n }\n }\n ]\n }\n },\n {\n "term": {\n "endgame.event_type_full": "network_event"\n }\n }\n ]\n }\n }\n },\n "process_event_count": {\n "filter": {\n "bool": {\n "should": [\n {\n "term": {\n "event.category": "process"\n }\n },\n {\n "term": {\n "endgame.event_type_full": "process_event"\n }\n }\n ]\n }\n }\n },\n "registry_event": {\n "filter": {\n "bool": {\n "should": [\n {\n "term": {\n "event.category": "registry"\n }\n },\n {\n "term": {\n "endgame.event_type_full": "registry_event"\n }\n }\n ]\n }\n }\n },\n "security_event_count": {\n "filter": {\n "bool": {\n "should": [\n {\n "bool": {\n "filter": [\n {\n "term": {\n "event.category": "session"\n }\n },\n {\n "term": {\n "event.category": "authentication"\n }\n }\n ]\n }\n },\n {\n "term": {\n "endgame.event_type_full": "security_event"\n }\n }\n ]\n }\n }\n }\n }\n },\n "fim_count": {\n "filter": {\n "term": {\n "event.module": "file_integrity"\n }\n }\n },\n "winlog_module": {\n "filter": {\n "term": {\n "agent.type": "winlogbeat"\n }\n },\n "aggs": {\n "mwsysmon_operational_event_count": {\n "filter": {\n "term": {\n "winlog.channel": "Microsoft-Windows-Sysmon/Operational"\n }\n }\n },\n "security_event_count": {\n "filter": {\n "term": {\n "winlog.channel": "Security"\n }\n }\n }\n }\n },\n "system_module": {\n "filter": {\n "term": {\n "event.module": "system"\n }\n },\n "aggs": {\n "login_count": {\n "filter": {\n "term": {\n "event.dataset": "login"\n }\n }\n },\n "package_count": {\n "filter": {\n "term": {\n "event.dataset": "package"\n }\n }\n },\n "process_count": {\n "filter": {\n "term": {\n "event.dataset": "process"\n }\n }\n },\n "user_count": {\n "filter": {\n "term": {\n "event.dataset": "user"\n }\n }\n },\n "filebeat_count": {\n "filter": {\n "term": {\n "agent.type": "filebeat"\n }\n }\n }\n }\n }\n },\n "query": {\n "bool": {\n "filter": [\n "{\\"bool\\":{\\"must\\":[],\\"filter\\":[{\\"match_all\\":{}},{\\"bool\\":{\\"filter\\":[{\\"bool\\":{\\"should\\":[{\\"exists\\":{\\"field\\":\\"host.name\\"}}],\\"minimum_should_match\\":1}}]}}],\\"should\\":[],\\"must_not\\":[]}}",\n {\n "range": {\n "@timestamp": {\n "gte": "2020-09-07T09:47:28.606Z",\n "lte": "2020-09-08T09:47:28.606Z",\n "format": "strict_date_optional_time"\n }\n }\n }\n ]\n }\n },\n "size": 0,\n "track_total_hits": false\n }\n}', + ], + }, + overviewHost: { + auditbeatAuditd: 0, + auditbeatFIM: 0, + auditbeatLogin: 0, + auditbeatPackage: 0, + auditbeatProcess: 0, + auditbeatUser: 0, + endgameDns: 0, + endgameFile: 4062, + endgameImageLoad: 0, + endgameNetwork: 9860, + endgameProcess: 52981, + endgameRegistry: 0, + endgameSecurity: 0, + filebeatSystemModule: 1793, + winlogbeatSecurity: 42, + winlogbeatMWSysmonOperational: null, + }, +}; + +export const expectedDsl = { + allowNoIndices: true, + index: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + ], + ignoreUnavailable: true, + body: { + aggregations: { + auditd_count: { filter: { term: { 'event.module': 'auditd' } } }, + endgame_module: { + filter: { + bool: { + should: [ + { term: { 'event.module': 'endpoint' } }, + { term: { 'event.module': 'endgame' } }, + ], + }, + }, + aggs: { + dns_event_count: { + filter: { + bool: { + should: [ + { + bool: { + filter: [ + { term: { 'network.protocol': 'dns' } }, + { term: { 'event.category': 'network' } }, + ], + }, + }, + { term: { 'endgame.event_type_full': 'dns_event' } }, + ], + }, + }, + }, + file_event_count: { + filter: { + bool: { + should: [ + { term: { 'event.category': 'file' } }, + { term: { 'endgame.event_type_full': 'file_event' } }, + ], + }, + }, + }, + image_load_event_count: { + filter: { + bool: { + should: [ + { + bool: { + should: [ + { term: { 'event.category': 'library' } }, + { term: { 'event.category': 'driver' } }, + ], + }, + }, + { term: { 'endgame.event_type_full': 'image_load_event' } }, + ], + }, + }, + }, + network_event_count: { + filter: { + bool: { + should: [ + { + bool: { + filter: [ + { bool: { must_not: { term: { 'network.protocol': 'dns' } } } }, + { term: { 'event.category': 'network' } }, + ], + }, + }, + { term: { 'endgame.event_type_full': 'network_event' } }, + ], + }, + }, + }, + process_event_count: { + filter: { + bool: { + should: [ + { term: { 'event.category': 'process' } }, + { term: { 'endgame.event_type_full': 'process_event' } }, + ], + }, + }, + }, + registry_event: { + filter: { + bool: { + should: [ + { term: { 'event.category': 'registry' } }, + { term: { 'endgame.event_type_full': 'registry_event' } }, + ], + }, + }, + }, + security_event_count: { + filter: { + bool: { + should: [ + { + bool: { + filter: [ + { term: { 'event.category': 'session' } }, + { term: { 'event.category': 'authentication' } }, + ], + }, + }, + { term: { 'endgame.event_type_full': 'security_event' } }, + ], + }, + }, + }, + }, + }, + fim_count: { filter: { term: { 'event.module': 'file_integrity' } } }, + winlog_module: { + filter: { term: { 'agent.type': 'winlogbeat' } }, + aggs: { + mwsysmon_operational_event_count: { + filter: { term: { 'winlog.channel': 'Microsoft-Windows-Sysmon/Operational' } }, + }, + security_event_count: { filter: { term: { 'winlog.channel': 'Security' } } }, + }, + }, + system_module: { + filter: { term: { 'event.module': 'system' } }, + aggs: { + login_count: { filter: { term: { 'event.dataset': 'login' } } }, + package_count: { filter: { term: { 'event.dataset': 'package' } } }, + process_count: { filter: { term: { 'event.dataset': 'process' } } }, + user_count: { filter: { term: { 'event.dataset': 'user' } } }, + filebeat_count: { filter: { term: { 'agent.type': 'filebeat' } } }, + }, + }, + }, + query: { + bool: { + filter: [ + '{"bool":{"must":[],"filter":[{"match_all":{}},{"bool":{"filter":[{"bool":{"should":[{"exists":{"field":"host.name"}}],"minimum_should_match":1}}]}}],"should":[],"must_not":[]}}', + { + range: { + '@timestamp': { + gte: '2020-09-07T09:47:28.606Z', + lte: '2020-09-08T09:47:28.606Z', + format: 'strict_date_optional_time', + }, + }, + }, + ], + }, + }, + size: 0, + track_total_hits: false, + }, +}; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/index.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/index.test.ts new file mode 100644 index 0000000000000..e5c3f4bd2c2c3 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/index.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import * as buildQuery from './query.overview_host.dsl'; +import { hostOverview } from '.'; +import { + mockOptions, + mockSearchStrategyResponse, + formattedSearchStrategyResponse, +} from './__mocks__'; + +describe('hostOverview search strategy', () => { + const buildOverviewHostQuery = jest.spyOn(buildQuery, 'buildOverviewHostQuery'); + + afterEach(() => { + buildOverviewHostQuery.mockClear(); + }); + + describe('buildDsl', () => { + test('should build dsl query', () => { + hostOverview.buildDsl(mockOptions); + expect(buildOverviewHostQuery).toHaveBeenCalledWith(mockOptions); + }); + }); + + describe('parse', () => { + test('should parse data correctly', async () => { + const result = await hostOverview.parse(mockOptions, mockSearchStrategyResponse); + expect(result).toMatchObject(formattedSearchStrategyResponse); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.overview_host.dsl.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.overview_host.dsl.test.ts new file mode 100644 index 0000000000000..eb4ea4f215b34 --- /dev/null +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/overview/query.overview_host.dsl.test.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { buildOverviewHostQuery as buildQuery } from './query.overview_host.dsl'; +import { mockOptions, expectedDsl } from './__mocks__/'; + +describe('buildQuery', () => { + test('build query from options correctly', () => { + expect(buildQuery(mockOptions)).toEqual(expectedDsl); + }); +}); From e8803d86f45a1d04cfab93d1bb2ceca3c86f65d6 Mon Sep 17 00:00:00 2001 From: James Rodewig <40268737+jrodewig@users.noreply.github.com> Date: Tue, 8 Sep 2020 10:01:47 -0400 Subject: [PATCH 23/58] [Ingest Pipelines] Add descriptions for ingest processors E-J (#76113) Co-authored-by: Jean-Louis Leysens --- .../manage_processor_form/processors/gsub.tsx | 14 +--- .../processors/html_strip.tsx | 12 +--- .../manage_processor_form/processors/join.tsx | 14 +--- .../manage_processor_form/processors/json.tsx | 7 +- .../shared/map_processor_type_to_form.tsx | 69 ++++++++++++++++++- 5 files changed, 72 insertions(+), 44 deletions(-) diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/gsub.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/gsub.tsx index a42df6873d57b..2f2a75853d9e9 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/gsub.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/gsub.tsx @@ -6,8 +6,6 @@ import React, { FunctionComponent } from 'react'; import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n/react'; -import { EuiCode } from '@elastic/eui'; import { FIELD_TYPES, fieldValidators, UseField, Field } from '../../../../../../shared_imports'; @@ -87,17 +85,7 @@ export const Gsub: FunctionComponent = () => { - {'field'}, - }} - /> - } - /> + diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/html_strip.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/html_strip.tsx index fb1a2d97672b0..c3f38cb021371 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/html_strip.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/html_strip.tsx @@ -6,8 +6,6 @@ import React, { FunctionComponent } from 'react'; import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n/react'; -import { EuiCode } from '@elastic/eui'; import { FieldNameField } from './common_fields/field_name_field'; import { IgnoreMissingField } from './common_fields/ignore_missing_field'; @@ -23,15 +21,7 @@ export const HtmlStrip: FunctionComponent = () => { )} /> - {'field'} }} - /> - } - /> + diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/join.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/join.tsx index ab077d3337f63..c70f48e0297e4 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/join.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/join.tsx @@ -6,8 +6,6 @@ import React, { FunctionComponent } from 'react'; import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n/react'; -import { EuiCode } from '@elastic/eui'; import { FIELD_TYPES, fieldValidators, UseField, Field } from '../../../../../../shared_imports'; @@ -55,17 +53,7 @@ export const Join: FunctionComponent = () => { - {'field'}, - }} - /> - } - /> + ); }; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/json.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/json.tsx index b68b398325085..f01228a26297b 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/json.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/manage_processor_form/processors/json.tsx @@ -65,12 +65,7 @@ export const Json: FunctionComponent = () => { )} /> - + + {'enrich policy'} + + ), + }} + /> + ); + }, }, fail: { FieldsComponent: Fail, @@ -178,6 +198,10 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.fail', { defaultMessage: 'Fail', }), + description: i18n.translate('xpack.ingestPipelines.processors.description.fail', { + defaultMessage: + 'Returns a custom error message on failure. Often used to notify requesters of required conditions.', + }), }, foreach: { FieldsComponent: Foreach, @@ -185,6 +209,9 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.foreach', { defaultMessage: 'Foreach', }), + description: i18n.translate('xpack.ingestPipelines.processors.description.foreach', { + defaultMessage: 'Applies an ingest processor to each value in an array.', + }), }, geoip: { FieldsComponent: GeoIP, @@ -192,6 +219,10 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.geoip', { defaultMessage: 'GeoIP', }), + description: i18n.translate('xpack.ingestPipelines.processors.description.geoip', { + defaultMessage: + 'Adds geo data based on an IP address. Uses geo data from a Maxmind database file.', + }), }, grok: { FieldsComponent: Grok, @@ -199,6 +230,25 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.grok', { defaultMessage: 'Grok', }), + description: function Description() { + const { + services: { documentation }, + } = useKibana(); + const esDocUrl = documentation.getEsDocsBasePath(); + return ( + + {'grok'} + + ), + }} + /> + ); + }, }, gsub: { FieldsComponent: Gsub, @@ -206,6 +256,9 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.gsub', { defaultMessage: 'Gsub', }), + description: i18n.translate('xpack.ingestPipelines.processors.description.gsub', { + defaultMessage: 'Uses a regular expression to replace field substrings.', + }), }, html_strip: { FieldsComponent: HtmlStrip, @@ -213,6 +266,9 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.htmlStrip', { defaultMessage: 'HTML strip', }), + description: i18n.translate('xpack.ingestPipelines.processors.description.htmlStrip', { + defaultMessage: 'Removes HTML tags from a field.', + }), }, inference: { FieldsComponent: Inference, @@ -220,6 +276,10 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.inference', { defaultMessage: 'Inference', }), + description: i18n.translate('xpack.ingestPipelines.processors.description.inference', { + defaultMessage: + 'Uses a pre-trained data frame analytics model to infer against incoming data.', + }), }, join: { FieldsComponent: Join, @@ -227,6 +287,10 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.join', { defaultMessage: 'Join', }), + description: i18n.translate('xpack.ingestPipelines.processors.description.join', { + defaultMessage: + 'Joins array elements into a string. Inserts a separator between each element.', + }), }, json: { FieldsComponent: Json, @@ -234,6 +298,9 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { label: i18n.translate('xpack.ingestPipelines.processors.label.json', { defaultMessage: 'JSON', }), + description: i18n.translate('xpack.ingestPipelines.processors.description.json', { + defaultMessage: 'Creates a JSON object from a compatible string.', + }), }, kv: { FieldsComponent: Kv, From 0286c7f70298ad9b92b4fbc2d40ba9a2ab83b195 Mon Sep 17 00:00:00 2001 From: Nathan L Smith Date: Tue, 8 Sep 2020 09:15:28 -0500 Subject: [PATCH 24/58] Replace uses of useUrlParams for path params (#76459) Part of #51963. --- .../apm/dev_docs/routing_and_linking.md | 38 ++++ .../app/ErrorGroupDetails/index.tsx | 27 ++- .../List/__test__/List.test.tsx | 4 +- .../app/ErrorGroupOverview/List/index.tsx | 8 +- .../app/ErrorGroupOverview/index.tsx | 17 +- .../app/Main/route_config/index.tsx | 192 ++++++++++++------ .../Main/route_config/route_config.test.tsx | 6 +- .../route_handlers/agent_configuration.tsx | 16 +- .../app/RumDashboard/ClientMetrics/index.tsx | 6 +- .../PageLoadDistribution/index.tsx | 13 +- .../PageLoadDistribution/use_breakdowns.ts | 6 +- .../app/RumDashboard/PageViewsTrend/index.tsx | 6 +- .../RumDashboard/VisitorBreakdown/index.tsx | 6 +- .../app/ServiceDetails/ServiceDetailTabs.tsx | 21 +- .../components/app/ServiceDetails/index.tsx | 19 +- .../components/app/ServiceMetrics/index.tsx | 10 +- .../app/ServiceNodeMetrics/index.test.tsx | 8 +- .../app/ServiceNodeMetrics/index.tsx | 35 ++-- .../app/ServiceNodeOverview/index.tsx | 14 +- .../app/TraceLink/__test__/TraceLink.test.tsx | 103 ++++++---- .../public/components/app/TraceLink/index.tsx | 7 +- .../app/TransactionDetails/index.tsx | 8 +- .../TransactionOverview.test.tsx | 12 +- .../app/TransactionOverview/index.tsx | 9 +- .../shared/EnvironmentFilter/index.tsx | 5 +- .../shared/ErrorRateAlertTrigger/index.tsx | 18 +- .../shared/KueryBar/get_bool_filter.ts | 25 ++- .../components/shared/KueryBar/index.tsx | 16 +- .../shared/KueryBar/use_processor_event.ts | 47 +++++ .../shared/ServiceAlertTrigger/index.tsx | 6 +- .../TransactionDurationAlertTrigger/index.tsx | 4 +- .../index.tsx | 3 +- .../charts/TransactionCharts/ml_header.tsx | 13 +- .../apm/public/context/ChartsSyncContext.tsx | 5 +- .../__tests__/UrlParamsContext.test.tsx | 18 -- .../context/UrlParamsContext/helpers.ts | 77 ------- .../UrlParamsContext/resolveUrlParams.ts | 18 -- .../public/context/UrlParamsContext/types.ts | 6 - .../plugins/apm/public/hooks/useAgentName.ts | 5 +- .../public/hooks/useServiceMetricCharts.ts | 9 +- .../hooks/useServiceTransactionTypes.tsx | 4 +- .../apm/public/hooks/useTransactionList.ts | 8 +- x-pack/plugins/apm/readme.md | 1 + 43 files changed, 495 insertions(+), 384 deletions(-) create mode 100644 x-pack/plugins/apm/dev_docs/routing_and_linking.md create mode 100644 x-pack/plugins/apm/public/components/shared/KueryBar/use_processor_event.ts diff --git a/x-pack/plugins/apm/dev_docs/routing_and_linking.md b/x-pack/plugins/apm/dev_docs/routing_and_linking.md new file mode 100644 index 0000000000000..d27513d44935f --- /dev/null +++ b/x-pack/plugins/apm/dev_docs/routing_and_linking.md @@ -0,0 +1,38 @@ +# APM Plugin Routing and Linking + +## Routing + +This document describes routing in the APM plugin. + +### Server-side + +Route definitions for APM's server-side API are in the [server/routes directory](../server/routes). Routes are created with [the `createRoute` function](../server/routes/create_route.ts). Routes are added to the API in [the `createApmApi` function](../server/routes/create_apm_api.ts), which is initialized in the plugin `start` lifecycle method. + +The path and query string parameters are defined in the calls to `createRoute` with io-ts types, so that each route has its parameters type checked. + +### Client-side + +The client-side routing uses [React Router](https://reactrouter.com/), The [`ApmRoute` component from the Elastic RUM Agent](https://www.elastic.co/guide/en/apm/agent/rum-js/current/react-integration.html), and the `history` object provided by the Kibana Platform. + +Routes are defined in [public/components/app/Main/route_config/index.tsx](../public/components/app/Main/route_config/index.tsx). These contain route definitions as well as the breadcrumb text. + +#### Parameter handling + +Path parameters (like `serviceName` in '/services/:serviceName/transactions') are handled by the `match.params` props passed into +routes by React Router. The types of these parameters are defined in the route definitions. + +If the parameters are not available as props you can use React Router's `useParams`, but their type definitions should be delcared inline and it's a good idea to make the properties optional if you don't know where a component will be used, since those parameters might not be available at that route. + +Query string parameters can be used in any component with `useUrlParams`. All of the available parameters are defined by this hook and its context. + +## Linking + +Raw URLs should almost never be used in the APM UI. Instead, we have mechanisms for creating links and URLs that ensure links are reliable. + +### In-app linking + +Links that stay inside APM should use the [`getAPMHref` function and `APMLink` component](../public/components/shared/Links/apm/APMLink.tsx). Other components inside that directory contain other functions and components that provide the same functionality for linking to more specific sections inside the APM plugin. + +### Cross-app linking + +Other helpers and components in [the Links directory](../public/components/shared/Links) allow linking to other Kibana apps. diff --git a/x-pack/plugins/apm/public/components/app/ErrorGroupDetails/index.tsx b/x-pack/plugins/apm/public/components/app/ErrorGroupDetails/index.tsx index 31f299f94bc26..e95d35142684d 100644 --- a/x-pack/plugins/apm/public/components/app/ErrorGroupDetails/index.tsx +++ b/x-pack/plugins/apm/public/components/app/ErrorGroupDetails/index.tsx @@ -15,11 +15,11 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { Fragment } from 'react'; +import { RouteComponentProps } from 'react-router-dom'; import styled from 'styled-components'; import { useTrackPageview } from '../../../../../observability/public'; import { NOT_AVAILABLE_LABEL } from '../../../../common/i18n'; import { useFetcher } from '../../../hooks/useFetcher'; -import { useLocation } from '../../../hooks/useLocation'; import { useUrlParams } from '../../../hooks/useUrlParams'; import { callApmApi } from '../../../services/rest/createCallApmApi'; import { fontFamilyCode, fontSizes, px, units } from '../../../style/variables'; @@ -56,19 +56,24 @@ function getShortGroupId(errorGroupId?: string) { return errorGroupId.slice(0, 5); } -export function ErrorGroupDetails() { - const location = useLocation(); +type ErrorGroupDetailsProps = RouteComponentProps<{ + groupId: string; + serviceName: string; +}>; + +export function ErrorGroupDetails({ location, match }: ErrorGroupDetailsProps) { + const { serviceName, groupId } = match.params; const { urlParams, uiFilters } = useUrlParams(); - const { serviceName, start, end, errorGroupId } = urlParams; + const { start, end } = urlParams; const { data: errorGroupData } = useFetcher(() => { - if (serviceName && start && end && errorGroupId) { + if (start && end) { return callApmApi({ pathname: '/api/apm/services/{serviceName}/errors/{groupId}', params: { path: { serviceName, - groupId: errorGroupId, + groupId, }, query: { start, @@ -78,10 +83,10 @@ export function ErrorGroupDetails() { }, }); } - }, [serviceName, start, end, errorGroupId, uiFilters]); + }, [serviceName, start, end, groupId, uiFilters]); const { data: errorDistributionData } = useFetcher(() => { - if (serviceName && start && end && errorGroupId) { + if (start && end) { return callApmApi({ pathname: '/api/apm/services/{serviceName}/errors/distribution', params: { @@ -91,13 +96,13 @@ export function ErrorGroupDetails() { query: { start, end, - groupId: errorGroupId, + groupId, uiFilters: JSON.stringify(uiFilters), }, }, }); } - }, [serviceName, start, end, errorGroupId, uiFilters]); + }, [serviceName, start, end, groupId, uiFilters]); useTrackPageview({ app: 'apm', path: 'error_group_details' }); useTrackPageview({ app: 'apm', path: 'error_group_details', delay: 15000 }); @@ -124,7 +129,7 @@ export function ErrorGroupDetails() { {i18n.translate('xpack.apm.errorGroupDetails.errorGroupTitle', { defaultMessage: 'Error group {errorGroupId}', values: { - errorGroupId: getShortGroupId(urlParams.errorGroupId), + errorGroupId: getShortGroupId(groupId), }, })} diff --git a/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/List/__test__/List.test.tsx b/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/List/__test__/List.test.tsx index 5798deaf19c9c..1acfc5c49245d 100644 --- a/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/List/__test__/List.test.tsx +++ b/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/List/__test__/List.test.tsx @@ -27,7 +27,7 @@ describe('ErrorGroupOverview -> List', () => { const storeState = {}; const wrapper = mount( - + , storeState ); @@ -39,7 +39,7 @@ describe('ErrorGroupOverview -> List', () => { const wrapper = mount( - + ); diff --git a/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/List/index.tsx b/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/List/index.tsx index 5c16bf0f324be..33105189f9c3e 100644 --- a/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/List/index.tsx +++ b/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/List/index.tsx @@ -51,16 +51,12 @@ const Culprit = styled.div` interface Props { items: ErrorGroupListAPIResponse; + serviceName: string; } -function ErrorGroupList(props: Props) { - const { items } = props; +function ErrorGroupList({ items, serviceName }: Props) { const { urlParams } = useUrlParams(); - const { serviceName } = urlParams; - if (!serviceName) { - throw new Error('Service name is required'); - } const columns = useMemo( () => [ { diff --git a/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/index.tsx b/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/index.tsx index 92ea044720531..42b0016ca8cfe 100644 --- a/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/index.tsx @@ -22,13 +22,17 @@ import { LocalUIFilters } from '../../shared/LocalUIFilters'; import { ErrorDistribution } from '../ErrorGroupDetails/Distribution'; import { ErrorGroupList } from './List'; -function ErrorGroupOverview() { +interface ErrorGroupOverviewProps { + serviceName: string; +} + +function ErrorGroupOverview({ serviceName }: ErrorGroupOverviewProps) { const { urlParams, uiFilters } = useUrlParams(); - const { serviceName, start, end, sortField, sortDirection } = urlParams; + const { start, end, sortField, sortDirection } = urlParams; const { data: errorDistributionData } = useFetcher(() => { - if (serviceName && start && end) { + if (start && end) { return callApmApi({ pathname: '/api/apm/services/{serviceName}/errors/distribution', params: { @@ -48,7 +52,7 @@ function ErrorGroupOverview() { const { data: errorGroupListData } = useFetcher(() => { const normalizedSortDirection = sortDirection === 'asc' ? 'asc' : 'desc'; - if (serviceName && start && end) { + if (start && end) { return callApmApi({ pathname: '/api/apm/services/{serviceName}/errors', params: { @@ -117,7 +121,10 @@ function ErrorGroupOverview() { - + diff --git a/x-pack/plugins/apm/public/components/app/Main/route_config/index.tsx b/x-pack/plugins/apm/public/components/app/Main/route_config/index.tsx index 56026dcf477ec..1fe5f17c39985 100644 --- a/x-pack/plugins/apm/public/components/app/Main/route_config/index.tsx +++ b/x-pack/plugins/apm/public/components/app/Main/route_config/index.tsx @@ -7,38 +7,33 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; import { Redirect, RouteComponentProps } from 'react-router-dom'; +import { UNIDENTIFIED_SERVICE_NODES_LABEL } from '../../../../../common/i18n'; import { SERVICE_NODE_NAME_MISSING } from '../../../../../common/service_nodes'; +import { toQuery } from '../../../shared/Links/url_helpers'; import { ErrorGroupDetails } from '../../ErrorGroupDetails'; -import { ServiceDetails } from '../../ServiceDetails'; -import { TransactionDetails } from '../../TransactionDetails'; import { Home } from '../../Home'; -import { BreadcrumbRoute } from '../ProvideBreadcrumbs'; -import { RouteName } from './route_names'; +import { ServiceDetails } from '../../ServiceDetails'; +import { ServiceNodeMetrics } from '../../ServiceNodeMetrics'; import { Settings } from '../../Settings'; import { AgentConfigurations } from '../../Settings/AgentConfigurations'; +import { AnomalyDetection } from '../../Settings/anomaly_detection'; import { ApmIndices } from '../../Settings/ApmIndices'; -import { toQuery } from '../../../shared/Links/url_helpers'; -import { ServiceNodeMetrics } from '../../ServiceNodeMetrics'; -import { resolveUrlParams } from '../../../../context/UrlParamsContext/resolveUrlParams'; -import { UNIDENTIFIED_SERVICE_NODES_LABEL } from '../../../../../common/i18n'; -import { TraceLink } from '../../TraceLink'; import { CustomizeUI } from '../../Settings/CustomizeUI'; -import { AnomalyDetection } from '../../Settings/anomaly_detection'; +import { TraceLink } from '../../TraceLink'; +import { TransactionDetails } from '../../TransactionDetails'; +import { BreadcrumbRoute } from '../ProvideBreadcrumbs'; import { CreateAgentConfigurationRouteHandler, EditAgentConfigurationRouteHandler, } from './route_handlers/agent_configuration'; +import { RouteName } from './route_names'; -const metricsBreadcrumb = i18n.translate('xpack.apm.breadcrumb.metricsTitle', { - defaultMessage: 'Metrics', -}); - -interface RouteParams { - serviceName: string; -} - -export const renderAsRedirectTo = (to: string) => { - return ({ location }: RouteComponentProps) => { +/** + * Given a path, redirect to that location, preserving the search and maintaining + * backward-compatibilty with legacy (pre-7.9) hash-based URLs. + */ +export function renderAsRedirectTo(to: string) { + return ({ location }: RouteComponentProps<{}>) => { let resolvedUrl: URL | undefined; // Redirect root URLs with a hash to support backward compatibility with URLs @@ -60,20 +55,113 @@ export const renderAsRedirectTo = (to: string) => { /> ); }; -}; +} + +// These component function definitions are used below with the `component` +// property of the route definitions. +// +// If you provide an inline function to the component prop, you would create a +// new component every render. This results in the existing component unmounting +// and the new component mounting instead of just updating the existing component. +// +// This means you should use `render` if you're providing an inline function. +// However, the `ApmRoute` component from @elastic/apm-rum-react, only supports +// `component`, and will give you a large console warning if you use `render`. +// +// This warning cannot be turned off +// (see https://github.com/elastic/apm-agent-rum-js/issues/881) so while this is +// slightly more code, it provides better performance without causing console +// warnings to appear. +function HomeServices() { + return ; +} + +function HomeServiceMap() { + return ; +} + +function HomeTraces() { + return ; +} + +function ServiceDetailsErrors( + props: RouteComponentProps<{ serviceName: string }> +) { + return ; +} + +function ServiceDetailsMetrics( + props: RouteComponentProps<{ serviceName: string }> +) { + return ; +} + +function ServiceDetailsNodes( + props: RouteComponentProps<{ serviceName: string }> +) { + return ; +} + +function ServiceDetailsServiceMap( + props: RouteComponentProps<{ serviceName: string }> +) { + return ; +} + +function ServiceDetailsTransactions( + props: RouteComponentProps<{ serviceName: string }> +) { + return ; +} + +function SettingsAgentConfiguration() { + return ( + + + + ); +} + +function SettingsAnomalyDetection() { + return ( + + + + ); +} + +function SettingsApmIndices() { + return ( + + + + ); +} +function SettingsCustomizeUI() { + return ( + + + + ); +} + +/** + * The array of route definitions to be used when the application + * creates the routes. + */ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/', - render: renderAsRedirectTo('/services'), + component: renderAsRedirectTo('/services'), breadcrumb: 'APM', name: RouteName.HOME, }, { exact: true, path: '/services', - component: () => , + component: HomeServices, breadcrumb: i18n.translate('xpack.apm.breadcrumb.servicesTitle', { defaultMessage: 'Services', }), @@ -82,7 +170,7 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/traces', - component: () => , + component: HomeTraces, breadcrumb: i18n.translate('xpack.apm.breadcrumb.tracesTitle', { defaultMessage: 'Traces', }), @@ -91,7 +179,7 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/settings', - render: renderAsRedirectTo('/settings/agent-configuration'), + component: renderAsRedirectTo('/settings/agent-configuration'), breadcrumb: i18n.translate('xpack.apm.breadcrumb.listSettingsTitle', { defaultMessage: 'Settings', }), @@ -100,11 +188,7 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/settings/apm-indices', - component: () => ( - - - - ), + component: SettingsApmIndices, breadcrumb: i18n.translate('xpack.apm.breadcrumb.settings.indicesTitle', { defaultMessage: 'Indices', }), @@ -113,18 +197,13 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/settings/agent-configuration', - component: () => ( - - - - ), + component: SettingsAgentConfiguration, breadcrumb: i18n.translate( 'xpack.apm.breadcrumb.settings.agentConfigurationTitle', { defaultMessage: 'Agent Configuration' } ), name: RouteName.AGENT_CONFIGURATION, }, - { exact: true, path: '/settings/agent-configuration/create', @@ -133,7 +212,7 @@ export const routes: BreadcrumbRoute[] = [ { defaultMessage: 'Create Agent Configuration' } ), name: RouteName.AGENT_CONFIGURATION_CREATE, - component: () => , + component: CreateAgentConfigurationRouteHandler, }, { exact: true, @@ -143,13 +222,13 @@ export const routes: BreadcrumbRoute[] = [ { defaultMessage: 'Edit Agent Configuration' } ), name: RouteName.AGENT_CONFIGURATION_EDIT, - component: () => , + component: EditAgentConfigurationRouteHandler, }, { exact: true, path: '/services/:serviceName', breadcrumb: ({ match }) => match.params.serviceName, - render: (props: RouteComponentProps) => + component: (props: RouteComponentProps<{ serviceName: string }>) => renderAsRedirectTo( `/services/${props.match.params.serviceName}/transactions` )(props), @@ -166,7 +245,7 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/services/:serviceName/errors', - component: () => , + component: ServiceDetailsErrors, breadcrumb: i18n.translate('xpack.apm.breadcrumb.errorsTitle', { defaultMessage: 'Errors', }), @@ -176,7 +255,7 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/services/:serviceName/transactions', - component: () => , + component: ServiceDetailsTransactions, breadcrumb: i18n.translate('xpack.apm.breadcrumb.transactionsTitle', { defaultMessage: 'Transactions', }), @@ -186,15 +265,17 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/services/:serviceName/metrics', - component: () => , - breadcrumb: metricsBreadcrumb, + component: ServiceDetailsMetrics, + breadcrumb: i18n.translate('xpack.apm.breadcrumb.metricsTitle', { + defaultMessage: 'Metrics', + }), name: RouteName.METRICS, }, // service nodes, only enabled for java agents for now { exact: true, path: '/services/:serviceName/nodes', - component: () => , + component: ServiceDetailsNodes, breadcrumb: i18n.translate('xpack.apm.breadcrumb.nodesTitle', { defaultMessage: 'JVMs', }), @@ -204,9 +285,9 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/services/:serviceName/nodes/:serviceNodeName/metrics', - component: () => , - breadcrumb: ({ location }) => { - const { serviceNodeName } = resolveUrlParams(location, {}); + component: ServiceNodeMetrics, + breadcrumb: ({ match }) => { + const { serviceNodeName } = match.params; if (serviceNodeName === SERVICE_NODE_NAME_MISSING) { return UNIDENTIFIED_SERVICE_NODES_LABEL; @@ -233,11 +314,10 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: null, name: RouteName.LINK_TO_TRACE, }, - { exact: true, path: '/service-map', - component: () => , + component: HomeServiceMap, breadcrumb: i18n.translate('xpack.apm.breadcrumb.serviceMapTitle', { defaultMessage: 'Service Map', }), @@ -246,7 +326,7 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/services/:serviceName/service-map', - component: () => , + component: ServiceDetailsServiceMap, breadcrumb: i18n.translate('xpack.apm.breadcrumb.serviceMapTitle', { defaultMessage: 'Service Map', }), @@ -255,11 +335,7 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/settings/customize-ui', - component: () => ( - - - - ), + component: SettingsCustomizeUI, breadcrumb: i18n.translate('xpack.apm.breadcrumb.settings.customizeUI', { defaultMessage: 'Customize UI', }), @@ -268,11 +344,7 @@ export const routes: BreadcrumbRoute[] = [ { exact: true, path: '/settings/anomaly-detection', - component: () => ( - - - - ), + component: SettingsAnomalyDetection, breadcrumb: i18n.translate( 'xpack.apm.breadcrumb.settings.anomalyDetection', { diff --git a/x-pack/plugins/apm/public/components/app/Main/route_config/route_config.test.tsx b/x-pack/plugins/apm/public/components/app/Main/route_config/route_config.test.tsx index ad12afe35fa20..21a162111bc79 100644 --- a/x-pack/plugins/apm/public/components/app/Main/route_config/route_config.test.tsx +++ b/x-pack/plugins/apm/public/components/app/Main/route_config/route_config.test.tsx @@ -14,7 +14,7 @@ describe('routes', () => { it('redirects to /services', () => { const location = { hash: '', pathname: '/', search: '' }; expect( - (route as any).render({ location } as any).props.to.pathname + (route as any).component({ location } as any).props.to.pathname ).toEqual('/services'); }); }); @@ -28,7 +28,9 @@ describe('routes', () => { search: '', }; - expect(((route as any).render({ location }) as any).props.to).toEqual({ + expect( + ((route as any).component({ location }) as any).props.to + ).toEqual({ hash: '', pathname: '/services/opbeans-python/transactions/view', search: diff --git a/x-pack/plugins/apm/public/components/app/Main/route_config/route_handlers/agent_configuration.tsx b/x-pack/plugins/apm/public/components/app/Main/route_config/route_handlers/agent_configuration.tsx index 7a00840daa3c5..cc07286457908 100644 --- a/x-pack/plugins/apm/public/components/app/Main/route_config/route_handlers/agent_configuration.tsx +++ b/x-pack/plugins/apm/public/components/app/Main/route_config/route_handlers/agent_configuration.tsx @@ -5,14 +5,17 @@ */ import React from 'react'; -import { useHistory } from 'react-router-dom'; +import { RouteComponentProps } from 'react-router-dom'; import { useFetcher } from '../../../../../hooks/useFetcher'; import { toQuery } from '../../../../shared/Links/url_helpers'; import { Settings } from '../../../Settings'; import { AgentConfigurationCreateEdit } from '../../../Settings/AgentConfigurations/AgentConfigurationCreateEdit'; -export function EditAgentConfigurationRouteHandler() { - const history = useHistory(); +type EditAgentConfigurationRouteHandler = RouteComponentProps<{}>; + +export function EditAgentConfigurationRouteHandler({ + history, +}: EditAgentConfigurationRouteHandler) { const { search } = history.location; // typescript complains because `pageStop` does not exist in `APMQueryParams` @@ -40,8 +43,11 @@ export function EditAgentConfigurationRouteHandler() { ); } -export function CreateAgentConfigurationRouteHandler() { - const history = useHistory(); +type CreateAgentConfigurationRouteHandlerProps = RouteComponentProps<{}>; + +export function CreateAgentConfigurationRouteHandler({ + history, +}: CreateAgentConfigurationRouteHandlerProps) { const { search } = history.location; // Ignoring here because we specifically DO NOT want to add the query params to the global route handler diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx index 67404ece3d2c7..e21dd0d6ff126 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx @@ -22,11 +22,11 @@ const ClFlexGroup = styled(EuiFlexGroup)` export function ClientMetrics() { const { urlParams, uiFilters } = useUrlParams(); - const { start, end, serviceName } = urlParams; + const { start, end } = urlParams; const { data, status } = useFetcher( (callApmApi) => { - if (start && end && serviceName) { + if (start && end) { return callApmApi({ pathname: '/api/apm/rum/client-metrics', params: { @@ -36,7 +36,7 @@ export function ClientMetrics() { } return Promise.resolve(null); }, - [start, end, serviceName, uiFilters] + [start, end, uiFilters] ); const STAT_STYLE = { width: '240px' }; diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/index.tsx index 3e35f15254937..8fd03ebb65f4c 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/index.tsx @@ -27,7 +27,7 @@ export interface PercentileRange { export function PageLoadDistribution() { const { urlParams, uiFilters } = useUrlParams(); - const { start, end, serviceName } = urlParams; + const { start, end } = urlParams; const [percentileRange, setPercentileRange] = useState({ min: null, @@ -38,7 +38,7 @@ export function PageLoadDistribution() { const { data, status } = useFetcher( (callApmApi) => { - if (start && end && serviceName) { + if (start && end) { return callApmApi({ pathname: '/api/apm/rum-client/page-load-distribution', params: { @@ -58,14 +58,7 @@ export function PageLoadDistribution() { } return Promise.resolve(null); }, - [ - end, - start, - serviceName, - uiFilters, - percentileRange.min, - percentileRange.max, - ] + [end, start, uiFilters, percentileRange.min, percentileRange.max] ); const onPercentileChange = (min: number, max: number) => { diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/use_breakdowns.ts b/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/use_breakdowns.ts index 805d19e2321d5..814cf977c9569 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/use_breakdowns.ts +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/use_breakdowns.ts @@ -17,13 +17,13 @@ interface Props { export const useBreakdowns = ({ percentileRange, field, value }: Props) => { const { urlParams, uiFilters } = useUrlParams(); - const { start, end, serviceName } = urlParams; + const { start, end } = urlParams; const { min: minP, max: maxP } = percentileRange ?? {}; return useFetcher( (callApmApi) => { - if (start && end && serviceName && field && value) { + if (start && end && field && value) { return callApmApi({ pathname: '/api/apm/rum-client/page-load-distribution/breakdown', params: { @@ -43,6 +43,6 @@ export const useBreakdowns = ({ percentileRange, field, value }: Props) => { }); } }, - [end, start, serviceName, uiFilters, field, value, minP, maxP] + [end, start, uiFilters, field, value, minP, maxP] ); }; diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/PageViewsTrend/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/PageViewsTrend/index.tsx index a67f6dd8e3cb5..62ecc4ddbaaca 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/PageViewsTrend/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/PageViewsTrend/index.tsx @@ -16,13 +16,13 @@ import { BreakdownItem } from '../../../../../typings/ui_filters'; export function PageViewsTrend() { const { urlParams, uiFilters } = useUrlParams(); - const { start, end, serviceName } = urlParams; + const { start, end } = urlParams; const [breakdown, setBreakdown] = useState(null); const { data, status } = useFetcher( (callApmApi) => { - if (start && end && serviceName) { + if (start && end) { return callApmApi({ pathname: '/api/apm/rum-client/page-view-trends', params: { @@ -41,7 +41,7 @@ export function PageViewsTrend() { } return Promise.resolve(undefined); }, - [end, start, serviceName, uiFilters, breakdown] + [end, start, uiFilters, breakdown] ); return ( diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdown/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdown/index.tsx index 5c68ebb1667ab..c19e2cd4a3742 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdown/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdown/index.tsx @@ -14,11 +14,11 @@ import { useUrlParams } from '../../../../hooks/useUrlParams'; export function VisitorBreakdown() { const { urlParams, uiFilters } = useUrlParams(); - const { start, end, serviceName } = urlParams; + const { start, end } = urlParams; const { data } = useFetcher( (callApmApi) => { - if (start && end && serviceName) { + if (start && end) { return callApmApi({ pathname: '/api/apm/rum-client/visitor-breakdown', params: { @@ -32,7 +32,7 @@ export function VisitorBreakdown() { } return Promise.resolve(null); }, - [end, start, serviceName, uiFilters] + [end, start, uiFilters] ); return ( diff --git a/x-pack/plugins/apm/public/components/app/ServiceDetails/ServiceDetailTabs.tsx b/x-pack/plugins/apm/public/components/app/ServiceDetails/ServiceDetailTabs.tsx index 2f35e329720de..cbb6d9a8fbe41 100644 --- a/x-pack/plugins/apm/public/components/app/ServiceDetails/ServiceDetailTabs.tsx +++ b/x-pack/plugins/apm/public/components/app/ServiceDetails/ServiceDetailTabs.tsx @@ -10,7 +10,6 @@ import React from 'react'; import { isJavaAgentName, isRumAgentName } from '../../../../common/agent_name'; import { useAgentName } from '../../../hooks/useAgentName'; import { useApmPluginContext } from '../../../hooks/useApmPluginContext'; -import { useUrlParams } from '../../../hooks/useUrlParams'; import { EuiTabLink } from '../../shared/EuiTabLink'; import { ErrorOverviewLink } from '../../shared/Links/apm/ErrorOverviewLink'; import { MetricOverviewLink } from '../../shared/Links/apm/MetricOverviewLink'; @@ -24,20 +23,14 @@ import { ServiceNodeOverview } from '../ServiceNodeOverview'; import { TransactionOverview } from '../TransactionOverview'; interface Props { + serviceName: string; tab: 'transactions' | 'errors' | 'metrics' | 'nodes' | 'service-map'; } -export function ServiceDetailTabs({ tab }: Props) { - const { urlParams } = useUrlParams(); - const { serviceName } = urlParams; +export function ServiceDetailTabs({ serviceName, tab }: Props) { const { agentName } = useAgentName(); const { serviceMapEnabled } = useApmPluginContext().config; - if (!serviceName) { - // this never happens, urlParams type is not accurate enough - throw new Error('Service name was not defined'); - } - const transactionsTab = { link: ( @@ -46,7 +39,7 @@ export function ServiceDetailTabs({ tab }: Props) { })} ), - render: () => , + render: () => , name: 'transactions', }; @@ -59,7 +52,7 @@ export function ServiceDetailTabs({ tab }: Props) { ), render: () => { - return ; + return ; }, name: 'errors', }; @@ -75,7 +68,7 @@ export function ServiceDetailTabs({ tab }: Props) { })} ), - render: () => , + render: () => , name: 'nodes', }; tabs.push(nodesListTab); @@ -88,7 +81,9 @@ export function ServiceDetailTabs({ tab }: Props) { })} ), - render: () => , + render: () => ( + + ), name: 'metrics', }; tabs.push(metricsTab); diff --git a/x-pack/plugins/apm/public/components/app/ServiceDetails/index.tsx b/x-pack/plugins/apm/public/components/app/ServiceDetails/index.tsx index b5a4ca4799afd..67c4a7c4cde1b 100644 --- a/x-pack/plugins/apm/public/components/app/ServiceDetails/index.tsx +++ b/x-pack/plugins/apm/public/components/app/ServiceDetails/index.tsx @@ -5,27 +5,26 @@ */ import { + EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiTitle, - EuiButtonEmpty, } from '@elastic/eui'; -import React from 'react'; import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { RouteComponentProps } from 'react-router-dom'; +import { useApmPluginContext } from '../../../hooks/useApmPluginContext'; import { ApmHeader } from '../../shared/ApmHeader'; -import { ServiceDetailTabs } from './ServiceDetailTabs'; -import { useUrlParams } from '../../../hooks/useUrlParams'; import { AlertIntegrations } from './AlertIntegrations'; -import { useApmPluginContext } from '../../../hooks/useApmPluginContext'; +import { ServiceDetailTabs } from './ServiceDetailTabs'; -interface Props { +interface Props extends RouteComponentProps<{ serviceName: string }> { tab: React.ComponentProps['tab']; } -export function ServiceDetails({ tab }: Props) { +export function ServiceDetails({ match, tab }: Props) { const plugin = useApmPluginContext(); - const { urlParams } = useUrlParams(); - const { serviceName } = urlParams; + const { serviceName } = match.params; const capabilities = plugin.core.application.capabilities; const canReadAlerts = !!capabilities.apm['alerting:show']; const canSaveAlerts = !!capabilities.apm['alerting:save']; @@ -76,7 +75,7 @@ export function ServiceDetails({ tab }: Props) { - + ); } diff --git a/x-pack/plugins/apm/public/components/app/ServiceMetrics/index.tsx b/x-pack/plugins/apm/public/components/app/ServiceMetrics/index.tsx index 9b01f9ebb7e99..2fb500f3c9916 100644 --- a/x-pack/plugins/apm/public/components/app/ServiceMetrics/index.tsx +++ b/x-pack/plugins/apm/public/components/app/ServiceMetrics/index.tsx @@ -21,11 +21,14 @@ import { LocalUIFilters } from '../../shared/LocalUIFilters'; interface ServiceMetricsProps { agentName: string; + serviceName: string; } -export function ServiceMetrics({ agentName }: ServiceMetricsProps) { +export function ServiceMetrics({ + agentName, + serviceName, +}: ServiceMetricsProps) { const { urlParams } = useUrlParams(); - const { serviceName, serviceNodeName } = urlParams; const { data } = useServiceMetricCharts(urlParams, agentName); const { start, end } = urlParams; @@ -34,12 +37,11 @@ export function ServiceMetrics({ agentName }: ServiceMetricsProps) { filterNames: ['host', 'containerId', 'podName', 'serviceVersion'], params: { serviceName, - serviceNodeName, }, projection: Projection.metrics, showCount: false, }), - [serviceName, serviceNodeName] + [serviceName] ); return ( diff --git a/x-pack/plugins/apm/public/components/app/ServiceNodeMetrics/index.test.tsx b/x-pack/plugins/apm/public/components/app/ServiceNodeMetrics/index.test.tsx index eced7457318d8..c6f7e68e4f4d0 100644 --- a/x-pack/plugins/apm/public/components/app/ServiceNodeMetrics/index.test.tsx +++ b/x-pack/plugins/apm/public/components/app/ServiceNodeMetrics/index.test.tsx @@ -8,14 +8,20 @@ import React from 'react'; import { shallow } from 'enzyme'; import { ServiceNodeMetrics } from '.'; import { MockApmPluginContextWrapper } from '../../../context/ApmPluginContext/MockApmPluginContext'; +import { RouteComponentProps } from 'react-router-dom'; describe('ServiceNodeMetrics', () => { describe('render', () => { it('renders', () => { + const props = ({} as unknown) as RouteComponentProps<{ + serviceName: string; + serviceNodeName: string; + }>; + expect(() => shallow( - + ) ).not.toThrowError(); diff --git a/x-pack/plugins/apm/public/components/app/ServiceNodeMetrics/index.tsx b/x-pack/plugins/apm/public/components/app/ServiceNodeMetrics/index.tsx index e81968fb298fa..84a1920d17fa8 100644 --- a/x-pack/plugins/apm/public/components/app/ServiceNodeMetrics/index.tsx +++ b/x-pack/plugins/apm/public/components/app/ServiceNodeMetrics/index.tsx @@ -5,30 +5,31 @@ */ import { + EuiCallOut, + EuiFlexGrid, EuiFlexGroup, EuiFlexItem, - EuiTitle, EuiHorizontalRule, - EuiFlexGrid, EuiPanel, EuiSpacer, EuiStat, + EuiTitle, EuiToolTip, - EuiCallOut, } from '@elastic/eui'; -import React from 'react'; import { i18n } from '@kbn/i18n'; -import styled from 'styled-components'; import { FormattedMessage } from '@kbn/i18n/react'; +import React from 'react'; +import { RouteComponentProps } from 'react-router-dom'; +import styled from 'styled-components'; import { SERVICE_NODE_NAME_MISSING } from '../../../../common/service_nodes'; -import { ApmHeader } from '../../shared/ApmHeader'; -import { useUrlParams } from '../../../hooks/useUrlParams'; +import { ChartsSyncContextProvider } from '../../../context/ChartsSyncContext'; import { useAgentName } from '../../../hooks/useAgentName'; +import { FETCH_STATUS, useFetcher } from '../../../hooks/useFetcher'; import { useServiceMetricCharts } from '../../../hooks/useServiceMetricCharts'; -import { ChartsSyncContextProvider } from '../../../context/ChartsSyncContext'; +import { useUrlParams } from '../../../hooks/useUrlParams'; +import { px, truncate, unit } from '../../../style/variables'; +import { ApmHeader } from '../../shared/ApmHeader'; import { MetricsChart } from '../../shared/charts/MetricsChart'; -import { useFetcher, FETCH_STATUS } from '../../../hooks/useFetcher'; -import { truncate, px, unit } from '../../../style/variables'; import { ElasticDocsLink } from '../../shared/Links/ElasticDocsLink'; const INITIAL_DATA = { @@ -41,17 +42,21 @@ const Truncate = styled.span` ${truncate(px(unit * 12))} `; -export function ServiceNodeMetrics() { - const { urlParams, uiFilters } = useUrlParams(); - const { serviceName, serviceNodeName } = urlParams; +type ServiceNodeMetricsProps = RouteComponentProps<{ + serviceName: string; + serviceNodeName: string; +}>; +export function ServiceNodeMetrics({ match }: ServiceNodeMetricsProps) { + const { urlParams, uiFilters } = useUrlParams(); + const { serviceName, serviceNodeName } = match.params; const { agentName } = useAgentName(); const { data } = useServiceMetricCharts(urlParams, agentName); const { start, end } = urlParams; const { data: { host, containerId } = INITIAL_DATA, status } = useFetcher( (callApmApi) => { - if (serviceName && serviceNodeName && start && end) { + if (start && end) { return callApmApi({ pathname: '/api/apm/services/{serviceName}/node/{serviceNodeName}/metadata', @@ -167,7 +172,7 @@ export function ServiceNodeMetrics() { )} - {agentName && serviceNodeName && ( + {agentName && ( {data.charts.map((chart) => ( diff --git a/x-pack/plugins/apm/public/components/app/ServiceNodeOverview/index.tsx b/x-pack/plugins/apm/public/components/app/ServiceNodeOverview/index.tsx index 9940a7aabb219..28477d2448899 100644 --- a/x-pack/plugins/apm/public/components/app/ServiceNodeOverview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/ServiceNodeOverview/index.tsx @@ -33,9 +33,13 @@ const ServiceNodeName = styled.div` ${truncate(px(8 * unit))} `; -function ServiceNodeOverview() { +interface ServiceNodeOverviewProps { + serviceName: string; +} + +function ServiceNodeOverview({ serviceName }: ServiceNodeOverviewProps) { const { uiFilters, urlParams } = useUrlParams(); - const { serviceName, start, end } = urlParams; + const { start, end } = urlParams; const localFiltersConfig: React.ComponentProps = useMemo( () => ({ @@ -50,7 +54,7 @@ function ServiceNodeOverview() { const { data: items = [] } = useFetcher( (callApmApi) => { - if (!serviceName || !start || !end) { + if (!start || !end) { return undefined; } return callApmApi({ @@ -70,10 +74,6 @@ function ServiceNodeOverview() { [serviceName, start, end, uiFilters] ); - if (!serviceName) { - return null; - } - const columns: Array> = [ { name: ( diff --git a/x-pack/plugins/apm/public/components/app/TraceLink/__test__/TraceLink.test.tsx b/x-pack/plugins/apm/public/components/app/TraceLink/__test__/TraceLink.test.tsx index bbaf6340e18f7..8d37a8e54d87c 100644 --- a/x-pack/plugins/apm/public/components/app/TraceLink/__test__/TraceLink.test.tsx +++ b/x-pack/plugins/apm/public/components/app/TraceLink/__test__/TraceLink.test.tsx @@ -5,63 +5,84 @@ */ import { render } from '@testing-library/react'; import { shallow } from 'enzyme'; -import React from 'react'; +import React, { ReactNode } from 'react'; +import { MemoryRouter, RouteComponentProps } from 'react-router-dom'; import { TraceLink } from '../'; +import { ApmPluginContextValue } from '../../../../context/ApmPluginContext'; +import { + mockApmPluginContextValue, + MockApmPluginContextWrapper, +} from '../../../../context/ApmPluginContext/MockApmPluginContext'; import * as hooks from '../../../../hooks/useFetcher'; import * as urlParamsHooks from '../../../../hooks/useUrlParams'; -import { MockApmPluginContextWrapper } from '../../../../context/ApmPluginContext/MockApmPluginContext'; -const renderOptions = { wrapper: MockApmPluginContextWrapper }; +function Wrapper({ children }: { children?: ReactNode }) { + return ( + + + {children} + + + ); +} -jest.mock('../../Main/route_config', () => ({ - routes: [ - { - path: '/services/:serviceName/transactions/view', - name: 'transaction_name', - }, - { - path: '/traces', - name: 'traces', - }, - ], -})); +const renderOptions = { wrapper: Wrapper }; describe('TraceLink', () => { afterAll(() => { jest.clearAllMocks(); }); - it('renders transition page', () => { - const component = render(, renderOptions); + + it('renders a transition page', () => { + const props = ({ + match: { params: { traceId: 'x' } }, + } as unknown) as RouteComponentProps<{ traceId: string }>; + const component = render(, renderOptions); + expect(component.getByText('Fetching trace...')).toBeDefined(); }); - it('renders trace page when transaction is not found', () => { - jest.spyOn(urlParamsHooks, 'useUrlParams').mockReturnValue({ - urlParams: { - traceIdLink: '123', - rangeFrom: 'now-24h', - rangeTo: 'now', - }, - refreshTimeRange: jest.fn(), - uiFilters: {}, - }); - jest.spyOn(hooks, 'useFetcher').mockReturnValue({ - data: { transaction: undefined }, - status: hooks.FETCH_STATUS.SUCCESS, - refetch: jest.fn(), - }); + describe('when no transaction is found', () => { + it('renders a trace page', () => { + jest.spyOn(urlParamsHooks, 'useUrlParams').mockReturnValue({ + urlParams: { + rangeFrom: 'now-24h', + rangeTo: 'now', + }, + refreshTimeRange: jest.fn(), + uiFilters: {}, + }); + jest.spyOn(hooks, 'useFetcher').mockReturnValue({ + data: { transaction: undefined }, + status: hooks.FETCH_STATUS.SUCCESS, + refetch: jest.fn(), + }); + + const props = ({ + match: { params: { traceId: '123' } }, + } as unknown) as RouteComponentProps<{ traceId: string }>; + const component = shallow(); - const component = shallow(); - expect(component.prop('to')).toEqual( - '/traces?kuery=trace.id%2520%253A%2520%2522123%2522&rangeFrom=now-24h&rangeTo=now' - ); + expect(component.prop('to')).toEqual( + '/traces?kuery=trace.id%2520%253A%2520%2522123%2522&rangeFrom=now-24h&rangeTo=now' + ); + }); }); describe('transaction page', () => { beforeAll(() => { jest.spyOn(urlParamsHooks, 'useUrlParams').mockReturnValue({ urlParams: { - traceIdLink: '123', rangeFrom: 'now-24h', rangeTo: 'now', }, @@ -69,6 +90,7 @@ describe('TraceLink', () => { uiFilters: {}, }); }); + it('renders with date range params', () => { const transaction = { service: { name: 'foo' }, @@ -84,7 +106,12 @@ describe('TraceLink', () => { status: hooks.FETCH_STATUS.SUCCESS, refetch: jest.fn(), }); - const component = shallow(); + + const props = ({ + match: { params: { traceId: '123' } }, + } as unknown) as RouteComponentProps<{ traceId: string }>; + const component = shallow(); + expect(component.prop('to')).toEqual( '/services/foo/transactions/view?traceId=123&transactionId=456&transactionName=bar&transactionType=GET&rangeFrom=now-24h&rangeTo=now' ); diff --git a/x-pack/plugins/apm/public/components/app/TraceLink/index.tsx b/x-pack/plugins/apm/public/components/app/TraceLink/index.tsx index 55ab275002b4e..584af956c2022 100644 --- a/x-pack/plugins/apm/public/components/app/TraceLink/index.tsx +++ b/x-pack/plugins/apm/public/components/app/TraceLink/index.tsx @@ -6,7 +6,7 @@ import { EuiEmptyPrompt } from '@elastic/eui'; import React from 'react'; -import { Redirect } from 'react-router-dom'; +import { Redirect, RouteComponentProps } from 'react-router-dom'; import styled from 'styled-components'; import url from 'url'; import { TRACE_ID } from '../../../../common/elasticsearch_fieldnames'; @@ -58,9 +58,10 @@ const redirectToTracePage = ({ }, }); -export function TraceLink() { +export function TraceLink({ match }: RouteComponentProps<{ traceId: string }>) { + const { traceId } = match.params; const { urlParams } = useUrlParams(); - const { traceIdLink: traceId, rangeFrom, rangeTo } = urlParams; + const { rangeFrom, rangeTo } = urlParams; const { data = { transaction: null }, status } = useFetcher( (callApmApi) => { diff --git a/x-pack/plugins/apm/public/components/app/TransactionDetails/index.tsx b/x-pack/plugins/apm/public/components/app/TransactionDetails/index.tsx index 515fcbc88c901..bab31c9a460d0 100644 --- a/x-pack/plugins/apm/public/components/app/TransactionDetails/index.tsx +++ b/x-pack/plugins/apm/public/components/app/TransactionDetails/index.tsx @@ -13,6 +13,7 @@ import { EuiTitle, } from '@elastic/eui'; import React, { useMemo } from 'react'; +import { RouteComponentProps } from 'react-router-dom'; import { useTrackPageview } from '../../../../../observability/public'; import { Projection } from '../../../../common/projections'; import { ChartsSyncContextProvider } from '../../../context/ChartsSyncContext'; @@ -29,7 +30,10 @@ import { LocalUIFilters } from '../../shared/LocalUIFilters'; import { TransactionDistribution } from './Distribution'; import { WaterfallWithSummmary } from './WaterfallWithSummmary'; -export function TransactionDetails() { +type TransactionDetailsProps = RouteComponentProps<{ serviceName: string }>; + +export function TransactionDetails({ match }: TransactionDetailsProps) { + const { serviceName } = match.params; const location = useLocation(); const { urlParams } = useUrlParams(); const { @@ -41,7 +45,7 @@ export function TransactionDetails() { const { waterfall, exceedsMax, status: waterfallStatus } = useWaterfall( urlParams ); - const { transactionName, transactionType, serviceName } = urlParams; + const { transactionName, transactionType } = urlParams; useTrackPageview({ app: 'apm', path: 'transaction_details' }); useTrackPageview({ app: 'apm', path: 'transaction_details', delay: 15000 }); diff --git a/x-pack/plugins/apm/public/components/app/TransactionOverview/TransactionOverview.test.tsx b/x-pack/plugins/apm/public/components/app/TransactionOverview/TransactionOverview.test.tsx index 81fe9e2282667..b7d1b93600a73 100644 --- a/x-pack/plugins/apm/public/components/app/TransactionOverview/TransactionOverview.test.tsx +++ b/x-pack/plugins/apm/public/components/app/TransactionOverview/TransactionOverview.test.tsx @@ -12,7 +12,6 @@ import { } from '@testing-library/react'; import { createMemoryHistory } from 'history'; import { CoreStart } from 'kibana/public'; -import { omit } from 'lodash'; import React from 'react'; import { Router } from 'react-router-dom'; import { createKibanaReactContext } from 'src/plugins/kibana_react/public'; @@ -42,7 +41,7 @@ function setup({ }) { const defaultLocation = { pathname: '/services/foo/transactions', - search: fromQuery(omit(urlParams, 'serviceName')), + search: fromQuery(urlParams), } as any; history.replace({ @@ -60,7 +59,7 @@ function setup({ - + @@ -87,9 +86,7 @@ describe('TransactionOverview', () => { it('should redirect to first type', () => { setup({ serviceTransactionTypes: ['firstType', 'secondType'], - urlParams: { - serviceName: 'MyServiceName', - }, + urlParams: {}, }); expect(history.replace).toHaveBeenCalledWith( expect.objectContaining({ @@ -107,7 +104,6 @@ describe('TransactionOverview', () => { serviceTransactionTypes: ['firstType', 'secondType'], urlParams: { transactionType: 'secondType', - serviceName: 'MyServiceName', }, }); @@ -122,7 +118,6 @@ describe('TransactionOverview', () => { serviceTransactionTypes: ['firstType', 'secondType'], urlParams: { transactionType: 'secondType', - serviceName: 'MyServiceName', }, }); @@ -143,7 +138,6 @@ describe('TransactionOverview', () => { serviceTransactionTypes: ['firstType'], urlParams: { transactionType: 'firstType', - serviceName: 'MyServiceName', }, }); diff --git a/x-pack/plugins/apm/public/components/app/TransactionOverview/index.tsx b/x-pack/plugins/apm/public/components/app/TransactionOverview/index.tsx index 5999988abe848..544e2450fe5d9 100644 --- a/x-pack/plugins/apm/public/components/app/TransactionOverview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/TransactionOverview/index.tsx @@ -59,11 +59,14 @@ function getRedirectLocation({ } } -export function TransactionOverview() { +interface TransactionOverviewProps { + serviceName: string; +} + +export function TransactionOverview({ serviceName }: TransactionOverviewProps) { const location = useLocation(); const { urlParams } = useUrlParams(); - - const { serviceName, transactionType } = urlParams; + const { transactionType } = urlParams; // TODO: fetching of transaction types should perhaps be lifted since it is needed in several places. Context? const serviceTransactionTypes = useServiceTransactionTypes(urlParams); diff --git a/x-pack/plugins/apm/public/components/shared/EnvironmentFilter/index.tsx b/x-pack/plugins/apm/public/components/shared/EnvironmentFilter/index.tsx index 9a61e773d73bf..7e5c789507e07 100644 --- a/x-pack/plugins/apm/public/components/shared/EnvironmentFilter/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/EnvironmentFilter/index.tsx @@ -8,7 +8,7 @@ import { EuiSelect } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { History } from 'history'; import React from 'react'; -import { useHistory } from 'react-router-dom'; +import { useHistory, useParams } from 'react-router-dom'; import { ENVIRONMENT_ALL, ENVIRONMENT_NOT_DEFINED, @@ -63,10 +63,11 @@ function getOptions(environments: string[]) { export function EnvironmentFilter() { const history = useHistory(); const location = useLocation(); + const { serviceName } = useParams<{ serviceName?: string }>(); const { uiFilters, urlParams } = useUrlParams(); const { environment } = uiFilters; - const { serviceName, start, end } = urlParams; + const { start, end } = urlParams; const { environments, status = 'loading' } = useEnvironments({ serviceName, start, diff --git a/x-pack/plugins/apm/public/components/shared/ErrorRateAlertTrigger/index.tsx b/x-pack/plugins/apm/public/components/shared/ErrorRateAlertTrigger/index.tsx index 7344839795955..7b284696477f3 100644 --- a/x-pack/plugins/apm/public/components/shared/ErrorRateAlertTrigger/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/ErrorRateAlertTrigger/index.tsx @@ -3,21 +3,21 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import React from 'react'; -import { EuiFieldNumber } from '@elastic/eui'; +import { EuiFieldNumber, EuiSelect } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { isFinite } from 'lodash'; -import { EuiSelect } from '@elastic/eui'; +import React from 'react'; +import { useParams } from 'react-router-dom'; import { ForLastExpression } from '../../../../../triggers_actions_ui/public'; import { ALERT_TYPES_CONFIG } from '../../../../common/alert_types'; -import { ServiceAlertTrigger } from '../ServiceAlertTrigger'; -import { PopoverExpression } from '../ServiceAlertTrigger/PopoverExpression'; -import { useEnvironments } from '../../../hooks/useEnvironments'; -import { useUrlParams } from '../../../hooks/useUrlParams'; import { ENVIRONMENT_ALL, getEnvironmentLabel, } from '../../../../common/environment_filter_values'; +import { useEnvironments } from '../../../hooks/useEnvironments'; +import { useUrlParams } from '../../../hooks/useUrlParams'; +import { ServiceAlertTrigger } from '../ServiceAlertTrigger'; +import { PopoverExpression } from '../ServiceAlertTrigger/PopoverExpression'; export interface ErrorRateAlertTriggerParams { windowSize: number; @@ -34,9 +34,9 @@ interface Props { export function ErrorRateAlertTrigger(props: Props) { const { setAlertParams, setAlertProperty, alertParams } = props; - + const { serviceName } = useParams<{ serviceName?: string }>(); const { urlParams } = useUrlParams(); - const { serviceName, start, end } = urlParams; + const { start, end } = urlParams; const { environmentOptions } = useEnvironments({ serviceName, start, end }); const defaults = { diff --git a/x-pack/plugins/apm/public/components/shared/KueryBar/get_bool_filter.ts b/x-pack/plugins/apm/public/components/shared/KueryBar/get_bool_filter.ts index 5bac01cfaf55d..74d7ace20dae0 100644 --- a/x-pack/plugins/apm/public/components/shared/KueryBar/get_bool_filter.ts +++ b/x-pack/plugins/apm/public/components/shared/KueryBar/get_bool_filter.ts @@ -4,18 +4,29 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ESFilter } from '../../../../typings/elasticsearch'; import { - TRANSACTION_TYPE, ERROR_GROUP_ID, PROCESSOR_EVENT, - TRANSACTION_NAME, SERVICE_NAME, + TRANSACTION_NAME, + TRANSACTION_TYPE, } from '../../../../common/elasticsearch_fieldnames'; +import { UIProcessorEvent } from '../../../../common/processor_event'; +import { ESFilter } from '../../../../typings/elasticsearch'; import { IUrlParams } from '../../../context/UrlParamsContext/types'; -export function getBoolFilter(urlParams: IUrlParams) { - const { start, end, serviceName, processorEvent } = urlParams; +export function getBoolFilter({ + groupId, + processorEvent, + serviceName, + urlParams, +}: { + groupId?: string; + processorEvent?: UIProcessorEvent; + serviceName?: string; + urlParams: IUrlParams; +}) { + const { start, end } = urlParams; if (!start || !end) { throw new Error('Date range was not defined'); @@ -63,9 +74,9 @@ export function getBoolFilter(urlParams: IUrlParams) { term: { [PROCESSOR_EVENT]: 'error' }, }); - if (urlParams.errorGroupId) { + if (groupId) { boolFilter.push({ - term: { [ERROR_GROUP_ID]: urlParams.errorGroupId }, + term: { [ERROR_GROUP_ID]: groupId }, }); } break; diff --git a/x-pack/plugins/apm/public/components/shared/KueryBar/index.tsx b/x-pack/plugins/apm/public/components/shared/KueryBar/index.tsx index a52676ee89590..efd1446f21b21 100644 --- a/x-pack/plugins/apm/public/components/shared/KueryBar/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/KueryBar/index.tsx @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import { startsWith, uniqueId } from 'lodash'; import React, { useState } from 'react'; -import { useHistory } from 'react-router-dom'; +import { useHistory, useParams } from 'react-router-dom'; import styled from 'styled-components'; import { esKuery, @@ -22,6 +22,7 @@ import { fromQuery, toQuery } from '../Links/url_helpers'; import { getBoolFilter } from './get_bool_filter'; // @ts-expect-error import { Typeahead } from './Typeahead'; +import { useProcessorEvent } from './use_processor_event'; const Container = styled.div` margin-bottom: 10px; @@ -38,6 +39,10 @@ function convertKueryToEsQuery(kuery: string, indexPattern: IIndexPattern) { } export function KueryBar() { + const { groupId, serviceName } = useParams<{ + groupId?: string; + serviceName?: string; + }>(); const history = useHistory(); const [state, setState] = useState({ suggestions: [], @@ -49,7 +54,7 @@ export function KueryBar() { let currentRequestCheck; - const { processorEvent } = urlParams; + const processorEvent = useProcessorEvent(); const examples = { transaction: 'transaction.duration.us > 300000', @@ -98,7 +103,12 @@ export function KueryBar() { (await data.autocomplete.getQuerySuggestions({ language: 'kuery', indexPatterns: [indexPattern], - boolFilter: getBoolFilter(urlParams), + boolFilter: getBoolFilter({ + groupId, + processorEvent, + serviceName, + urlParams, + }), query: inputValue, selectionStart, selectionEnd: selectionStart, diff --git a/x-pack/plugins/apm/public/components/shared/KueryBar/use_processor_event.ts b/x-pack/plugins/apm/public/components/shared/KueryBar/use_processor_event.ts new file mode 100644 index 0000000000000..1e8686f0fe5ee --- /dev/null +++ b/x-pack/plugins/apm/public/components/shared/KueryBar/use_processor_event.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useLocation } from 'react-router-dom'; +import { + ProcessorEvent, + UIProcessorEvent, +} from '../../../../common/processor_event'; + +/** + * Infer the processor.event to used based on the route path + */ +export function useProcessorEvent(): UIProcessorEvent | undefined { + const { pathname } = useLocation(); + const paths = pathname.split('/').slice(1); + const pageName = paths[0]; + + switch (pageName) { + case 'services': + let servicePageName = paths[2]; + + if (servicePageName === 'nodes' && paths.length > 3) { + servicePageName = 'metrics'; + } + + switch (servicePageName) { + case 'transactions': + return ProcessorEvent.transaction; + case 'errors': + return ProcessorEvent.error; + case 'metrics': + return ProcessorEvent.metric; + case 'nodes': + return ProcessorEvent.metric; + + default: + return undefined; + } + case 'traces': + return ProcessorEvent.transaction; + default: + return undefined; + } +} diff --git a/x-pack/plugins/apm/public/components/shared/ServiceAlertTrigger/index.tsx b/x-pack/plugins/apm/public/components/shared/ServiceAlertTrigger/index.tsx index 6d90a10891c21..86dc7f5a90475 100644 --- a/x-pack/plugins/apm/public/components/shared/ServiceAlertTrigger/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/ServiceAlertTrigger/index.tsx @@ -6,7 +6,7 @@ import React, { useEffect } from 'react'; import { EuiSpacer, EuiFlexGrid, EuiFlexItem } from '@elastic/eui'; -import { useUrlParams } from '../../../hooks/useUrlParams'; +import { useParams } from 'react-router-dom'; interface Props { alertTypeName: string; @@ -17,7 +17,7 @@ interface Props { } export function ServiceAlertTrigger(props: Props) { - const { urlParams } = useUrlParams(); + const { serviceName } = useParams<{ serviceName?: string }>(); const { fields, @@ -29,7 +29,7 @@ export function ServiceAlertTrigger(props: Props) { const params: Record = { ...defaults, - serviceName: urlParams.serviceName!, + serviceName, }; useEffect(() => { diff --git a/x-pack/plugins/apm/public/components/shared/TransactionDurationAlertTrigger/index.tsx b/x-pack/plugins/apm/public/components/shared/TransactionDurationAlertTrigger/index.tsx index ba12b11c9527d..3c1669c39ac4c 100644 --- a/x-pack/plugins/apm/public/components/shared/TransactionDurationAlertTrigger/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/TransactionDurationAlertTrigger/index.tsx @@ -40,12 +40,12 @@ interface Props { export function TransactionDurationAlertTrigger(props: Props) { const { setAlertParams, alertParams, setAlertProperty } = props; - + const { serviceName } = alertParams; const { urlParams } = useUrlParams(); const transactionTypes = useServiceTransactionTypes(urlParams); - const { serviceName, start, end } = urlParams; + const { start, end } = urlParams; const { environmentOptions } = useEnvironments({ serviceName, start, end }); if (!transactionTypes.length) { diff --git a/x-pack/plugins/apm/public/components/shared/TransactionDurationAnomalyAlertTrigger/index.tsx b/x-pack/plugins/apm/public/components/shared/TransactionDurationAnomalyAlertTrigger/index.tsx index 911c51013a844..20e0a3f27c4a4 100644 --- a/x-pack/plugins/apm/public/components/shared/TransactionDurationAnomalyAlertTrigger/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/TransactionDurationAnomalyAlertTrigger/index.tsx @@ -42,9 +42,10 @@ interface Props { export function TransactionDurationAnomalyAlertTrigger(props: Props) { const { setAlertParams, alertParams, setAlertProperty } = props; + const { serviceName } = alertParams; const { urlParams } = useUrlParams(); const transactionTypes = useServiceTransactionTypes(urlParams); - const { serviceName, start, end } = urlParams; + const { start, end } = urlParams; const { environmentOptions } = useEnvironments({ serviceName, start, end }); const supportedTransactionTypes = transactionTypes.filter((transactionType) => [TRANSACTION_PAGE_LOAD, TRANSACTION_REQUEST].includes(transactionType) diff --git a/x-pack/plugins/apm/public/components/shared/charts/TransactionCharts/ml_header.tsx b/x-pack/plugins/apm/public/components/shared/charts/TransactionCharts/ml_header.tsx index f829b5841efa9..52b0470d31552 100644 --- a/x-pack/plugins/apm/public/components/shared/charts/TransactionCharts/ml_header.tsx +++ b/x-pack/plugins/apm/public/components/shared/charts/TransactionCharts/ml_header.tsx @@ -4,13 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -import { EuiIconTip } from '@elastic/eui'; +import { EuiFlexItem, EuiIconTip, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { isEmpty } from 'lodash'; import React from 'react'; -import { EuiFlexItem } from '@elastic/eui'; +import { useParams } from 'react-router-dom'; import styled from 'styled-components'; -import { i18n } from '@kbn/i18n'; -import { EuiText } from '@elastic/eui'; import { useUrlParams } from '../../../../hooks/useUrlParams'; import { MLJobLink } from '../../Links/MachineLearningLinks/MLJobLink'; @@ -32,16 +31,14 @@ const ShiftedEuiText = styled(EuiText)` `; export function MLHeader({ hasValidMlLicense, mlJobId }: Props) { + const { serviceName } = useParams<{ serviceName?: string }>(); const { urlParams } = useUrlParams(); if (!hasValidMlLicense || !mlJobId) { return null; } - const { serviceName, kuery, transactionType } = urlParams; - if (!serviceName) { - return null; - } + const { kuery, transactionType } = urlParams; const hasKuery = !isEmpty(kuery); const icon = hasKuery ? ( diff --git a/x-pack/plugins/apm/public/context/ChartsSyncContext.tsx b/x-pack/plugins/apm/public/context/ChartsSyncContext.tsx index 801c1d7e53f2e..7df35bc443226 100644 --- a/x-pack/plugins/apm/public/context/ChartsSyncContext.tsx +++ b/x-pack/plugins/apm/public/context/ChartsSyncContext.tsx @@ -5,7 +5,7 @@ */ import React, { ReactNode, useMemo, useState } from 'react'; -import { useHistory } from 'react-router-dom'; +import { useHistory, useParams } from 'react-router-dom'; import { fromQuery, toQuery } from '../components/shared/Links/url_helpers'; import { useFetcher } from '../hooks/useFetcher'; import { useUrlParams } from '../hooks/useUrlParams'; @@ -20,9 +20,10 @@ const ChartsSyncContext = React.createContext<{ function ChartsSyncContextProvider({ children }: { children: ReactNode }) { const history = useHistory(); const [time, setTime] = useState(null); + const { serviceName } = useParams<{ serviceName?: string }>(); const { urlParams, uiFilters } = useUrlParams(); - const { start, end, serviceName } = urlParams; + const { start, end } = urlParams; const { environment } = uiFilters; const { data = { annotations: [] } } = useFetcher( diff --git a/x-pack/plugins/apm/public/context/UrlParamsContext/__tests__/UrlParamsContext.test.tsx b/x-pack/plugins/apm/public/context/UrlParamsContext/__tests__/UrlParamsContext.test.tsx index fbb79eae6a136..9989e568953f5 100644 --- a/x-pack/plugins/apm/public/context/UrlParamsContext/__tests__/UrlParamsContext.test.tsx +++ b/x-pack/plugins/apm/public/context/UrlParamsContext/__tests__/UrlParamsContext.test.tsx @@ -41,24 +41,6 @@ describe('UrlParamsContext', () => { moment.tz.setDefault(''); }); - it('should have default params', () => { - const location = { - pathname: '/services/opbeans-node/transactions', - } as Location; - - jest - .spyOn(Date, 'now') - .mockImplementation(() => new Date('2000-06-15T12:00:00Z').getTime()); - const wrapper = mountParams(location); - const params = getDataFromOutput(wrapper); - - expect(params).toEqual({ - serviceName: 'opbeans-node', - page: 0, - processorEvent: 'transaction', - }); - }); - it('should read values in from location', () => { const location = { pathname: '/test/pathname', diff --git a/x-pack/plugins/apm/public/context/UrlParamsContext/helpers.ts b/x-pack/plugins/apm/public/context/UrlParamsContext/helpers.ts index 65514ff71d02b..45db4dcc94cce 100644 --- a/x-pack/plugins/apm/public/context/UrlParamsContext/helpers.ts +++ b/x-pack/plugins/apm/public/context/UrlParamsContext/helpers.ts @@ -7,18 +7,6 @@ import { compact, pickBy } from 'lodash'; import datemath from '@elastic/datemath'; import { IUrlParams } from './types'; -import { - ProcessorEvent, - UIProcessorEvent, -} from '../../../common/processor_event'; - -interface PathParams { - processorEvent?: UIProcessorEvent; - serviceName?: string; - errorGroupId?: string; - serviceNodeName?: string; - traceId?: string; -} export function getParsedDate(rawDate?: string, opts = {}) { if (rawDate) { @@ -67,68 +55,3 @@ export function getPathAsArray(pathname: string = '') { export function removeUndefinedProps(obj: T): Partial { return pickBy(obj, (value) => value !== undefined); } - -export function getPathParams(pathname: string = ''): PathParams { - const paths = getPathAsArray(pathname); - const pageName = paths[0]; - // TODO: use react router's real match params instead of guessing the path order - - switch (pageName) { - case 'services': - let servicePageName = paths[2]; - const serviceName = paths[1]; - const serviceNodeName = paths[3]; - - if (servicePageName === 'nodes' && paths.length > 3) { - servicePageName = 'metrics'; - } - - switch (servicePageName) { - case 'transactions': - return { - processorEvent: ProcessorEvent.transaction, - serviceName, - }; - case 'errors': - return { - processorEvent: ProcessorEvent.error, - serviceName, - errorGroupId: paths[3], - }; - case 'metrics': - return { - processorEvent: ProcessorEvent.metric, - serviceName, - serviceNodeName, - }; - case 'nodes': - return { - processorEvent: ProcessorEvent.metric, - serviceName, - }; - case 'service-map': - return { - serviceName, - }; - default: - return {}; - } - - case 'traces': - return { - processorEvent: ProcessorEvent.transaction, - }; - case 'link-to': - const link = paths[1]; - switch (link) { - case 'trace': - return { - traceId: paths[2], - }; - default: - return {}; - } - default: - return {}; - } -} diff --git a/x-pack/plugins/apm/public/context/UrlParamsContext/resolveUrlParams.ts b/x-pack/plugins/apm/public/context/UrlParamsContext/resolveUrlParams.ts index 2201e162904a2..8feb4ac1858d1 100644 --- a/x-pack/plugins/apm/public/context/UrlParamsContext/resolveUrlParams.ts +++ b/x-pack/plugins/apm/public/context/UrlParamsContext/resolveUrlParams.ts @@ -7,7 +7,6 @@ import { Location } from 'history'; import { IUrlParams } from './types'; import { - getPathParams, removeUndefinedProps, getStart, getEnd, @@ -26,14 +25,6 @@ type TimeUrlParams = Pick< >; export function resolveUrlParams(location: Location, state: TimeUrlParams) { - const { - processorEvent, - serviceName, - serviceNodeName, - errorGroupId, - traceId: traceIdLink, - } = getPathParams(location.pathname); - const query = toQuery(location.search); const { @@ -85,15 +76,6 @@ export function resolveUrlParams(location: Location, state: TimeUrlParams) { transactionType, searchTerm: toString(searchTerm), - // path params - processorEvent, - serviceName, - traceIdLink, - errorGroupId, - serviceNodeName: serviceNodeName - ? decodeURIComponent(serviceNodeName) - : serviceNodeName, - // ui filters environment, ...localUIFilters, diff --git a/x-pack/plugins/apm/public/context/UrlParamsContext/types.ts b/x-pack/plugins/apm/public/context/UrlParamsContext/types.ts index 7b50a705afa33..574eca3b74f70 100644 --- a/x-pack/plugins/apm/public/context/UrlParamsContext/types.ts +++ b/x-pack/plugins/apm/public/context/UrlParamsContext/types.ts @@ -6,12 +6,10 @@ // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { LocalUIFilterName } from '../../../server/lib/ui_filters/local_ui_filters/config'; -import { UIProcessorEvent } from '../../../common/processor_event'; export type IUrlParams = { detailTab?: string; end?: string; - errorGroupId?: string; flyoutDetailTab?: string; kuery?: string; environment?: string; @@ -19,7 +17,6 @@ export type IUrlParams = { rangeTo?: string; refreshInterval?: number; refreshPaused?: boolean; - serviceName?: string; sortDirection?: string; sortField?: string; start?: string; @@ -30,8 +27,5 @@ export type IUrlParams = { waterfallItemId?: string; page?: number; pageSize?: number; - serviceNodeName?: string; searchTerm?: string; - processorEvent?: UIProcessorEvent; - traceIdLink?: string; } & Partial>; diff --git a/x-pack/plugins/apm/public/hooks/useAgentName.ts b/x-pack/plugins/apm/public/hooks/useAgentName.ts index 7a11b662f06f0..1f8a3b916ecd0 100644 --- a/x-pack/plugins/apm/public/hooks/useAgentName.ts +++ b/x-pack/plugins/apm/public/hooks/useAgentName.ts @@ -3,13 +3,14 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - +import { useParams } from 'react-router-dom'; import { useFetcher } from './useFetcher'; import { useUrlParams } from './useUrlParams'; export function useAgentName() { + const { serviceName } = useParams<{ serviceName?: string }>(); const { urlParams } = useUrlParams(); - const { start, end, serviceName } = urlParams; + const { start, end } = urlParams; const { data: agentName, error, status } = useFetcher( (callApmApi) => { diff --git a/x-pack/plugins/apm/public/hooks/useServiceMetricCharts.ts b/x-pack/plugins/apm/public/hooks/useServiceMetricCharts.ts index 78f022ec6b8b5..f4a981ff0975b 100644 --- a/x-pack/plugins/apm/public/hooks/useServiceMetricCharts.ts +++ b/x-pack/plugins/apm/public/hooks/useServiceMetricCharts.ts @@ -4,10 +4,11 @@ * you may not use this file except in compliance with the Elastic License. */ +import { useParams } from 'react-router-dom'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { MetricsChartsByAgentAPIResponse } from '../../server/lib/metrics/get_metrics_chart_data_by_agent'; -import { IUrlParams } from '../context/UrlParamsContext/types'; import { useUiFilters } from '../context/UrlParamsContext'; +import { IUrlParams } from '../context/UrlParamsContext/types'; import { useFetcher } from './useFetcher'; const INITIAL_DATA: MetricsChartsByAgentAPIResponse = { @@ -18,7 +19,8 @@ export function useServiceMetricCharts( urlParams: IUrlParams, agentName?: string ) { - const { serviceName, start, end, serviceNodeName } = urlParams; + const { serviceName } = useParams<{ serviceName?: string }>(); + const { start, end } = urlParams; const uiFilters = useUiFilters(urlParams); const { data = INITIAL_DATA, error, status } = useFetcher( (callApmApi) => { @@ -31,14 +33,13 @@ export function useServiceMetricCharts( start, end, agentName, - serviceNodeName, uiFilters: JSON.stringify(uiFilters), }, }, }); } }, - [serviceName, start, end, agentName, serviceNodeName, uiFilters] + [serviceName, start, end, agentName, uiFilters] ); return { diff --git a/x-pack/plugins/apm/public/hooks/useServiceTransactionTypes.tsx b/x-pack/plugins/apm/public/hooks/useServiceTransactionTypes.tsx index 227cd849d6c7c..4e110ac2d4380 100644 --- a/x-pack/plugins/apm/public/hooks/useServiceTransactionTypes.tsx +++ b/x-pack/plugins/apm/public/hooks/useServiceTransactionTypes.tsx @@ -4,13 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ +import { useParams } from 'react-router-dom'; import { IUrlParams } from '../context/UrlParamsContext/types'; import { useFetcher } from './useFetcher'; const INITIAL_DATA = { transactionTypes: [] }; export function useServiceTransactionTypes(urlParams: IUrlParams) { - const { serviceName, start, end } = urlParams; + const { serviceName } = useParams<{ serviceName?: string }>(); + const { start, end } = urlParams; const { data = INITIAL_DATA } = useFetcher( (callApmApi) => { if (serviceName && start && end) { diff --git a/x-pack/plugins/apm/public/hooks/useTransactionList.ts b/x-pack/plugins/apm/public/hooks/useTransactionList.ts index 0ad221b95b4ff..9c3a18b9c0d0d 100644 --- a/x-pack/plugins/apm/public/hooks/useTransactionList.ts +++ b/x-pack/plugins/apm/public/hooks/useTransactionList.ts @@ -4,10 +4,11 @@ * you may not use this file except in compliance with the Elastic License. */ -import { IUrlParams } from '../context/UrlParamsContext/types'; +import { useParams } from 'react-router-dom'; import { useUiFilters } from '../context/UrlParamsContext'; -import { useFetcher } from './useFetcher'; +import { IUrlParams } from '../context/UrlParamsContext/types'; import { APIReturnType } from '../services/rest/createCallApmApi'; +import { useFetcher } from './useFetcher'; type TransactionsAPIResponse = APIReturnType< '/api/apm/services/{serviceName}/transaction_groups' @@ -20,7 +21,8 @@ const DEFAULT_RESPONSE: TransactionsAPIResponse = { }; export function useTransactionList(urlParams: IUrlParams) { - const { serviceName, transactionType, start, end } = urlParams; + const { serviceName } = useParams<{ serviceName?: string }>(); + const { transactionType, start, end } = urlParams; const uiFilters = useUiFilters(urlParams); const { data = DEFAULT_RESPONSE, error, status } = useFetcher( (callApmApi) => { diff --git a/x-pack/plugins/apm/readme.md b/x-pack/plugins/apm/readme.md index 9b02972d35302..d6fdb5f52291c 100644 --- a/x-pack/plugins/apm/readme.md +++ b/x-pack/plugins/apm/readme.md @@ -162,4 +162,5 @@ You can access the development environment at http://localhost:9001. - [Cypress integration tests](./e2e/README.md) - [VSCode setup instructions](./dev_docs/vscode_setup.md) - [Github PR commands](./dev_docs/github_commands.md) +- [Routing and Linking](./dev_docs/routing_and_linking.md) - [Telemetry](./dev_docs/telemetry.md) From caa4e0c11b430719cff97a42ecac5548c8d3cf4d Mon Sep 17 00:00:00 2001 From: Daniil Suleiman <31325372+sulemanof@users.noreply.github.com> Date: Tue, 8 Sep 2020 17:20:51 +0300 Subject: [PATCH 25/58] [TSVB/Markdown] Introduce formatted date field label (#75555) * Introduce formatted date field label * Apply changes * Use default format if can't parse, add comments Co-authored-by: Elastic Machine --- .../components/lib/convert_series_to_vars.js | 20 +++++++++++++++++++ .../server/lib/vis_data/helpers/get_splits.js | 1 + .../lib/vis_data/helpers/get_splits.test.js | 4 ++++ .../response_processors/series/std_metric.js | 1 + 4 files changed, 26 insertions(+) diff --git a/src/plugins/vis_type_timeseries/public/application/components/lib/convert_series_to_vars.js b/src/plugins/vis_type_timeseries/public/application/components/lib/convert_series_to_vars.js index f969778bbc615..34f339ce24c21 100644 --- a/src/plugins/vis_type_timeseries/public/application/components/lib/convert_series_to_vars.js +++ b/src/plugins/vis_type_timeseries/public/application/components/lib/convert_series_to_vars.js @@ -54,6 +54,26 @@ export const convertSeriesToVars = (series, model, dateFormat = 'lll', getConfig }; set(variables, varName, data); set(variables, `${_.snakeCase(row.label)}.label`, row.label); + + /** + * Handle the case when a field has "key_as_string" value. + * Common case is the value is a date string (e.x. "2020-08-21T20:36:58.000Z") or a boolean stringified value ("true"/"false"). + * Try to convert the value into a moment object and format it with "dateFormat" from UI settings, + * if the "key_as_string" value is recognized by a known format in Moments.js https://momentjs.com/docs/#/parsing/string/ . + * If not, return a formatted value from elasticsearch + */ + if (row.labelFormatted) { + const momemntObj = moment(row.labelFormatted); + let val; + + if (momemntObj.isValid()) { + val = momemntObj.format(dateFormat); + } else { + val = row.labelFormatted; + } + + set(variables, `${_.snakeCase(row.label)}.formatted`, val); + } }); }); return variables; diff --git a/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.js b/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.js index 54139a7c27e3f..37cc7fd3380d0 100644 --- a/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.js +++ b/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.js @@ -42,6 +42,7 @@ export function getSplits(resp, panel, series, meta) { return buckets.map((bucket) => { bucket.id = `${series.id}:${bucket.key}`; bucket.label = formatKey(bucket.key, series); + bucket.labelFormatted = bucket.key_as_string || ''; bucket.color = panel.type === 'top_n' ? color.string() : colors.shift(); bucket.meta = meta; return bucket; diff --git a/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.test.js b/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.test.js index 376d32d0da13f..28f056613b082 100644 --- a/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.test.js +++ b/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.test.js @@ -89,6 +89,7 @@ describe('getSplits(resp, panel, series)', () => { id: 'SERIES:example-01', key: 'example-01', label: 'example-01', + labelFormatted: '', meta: { bucketSize: 10 }, color: 'rgb(255, 0, 0)', timeseries: { buckets: [] }, @@ -98,6 +99,7 @@ describe('getSplits(resp, panel, series)', () => { id: 'SERIES:example-02', key: 'example-02', label: 'example-02', + labelFormatted: '', meta: { bucketSize: 10 }, color: 'rgb(255, 0, 0)', timeseries: { buckets: [] }, @@ -145,6 +147,7 @@ describe('getSplits(resp, panel, series)', () => { id: 'SERIES:example-01', key: 'example-01', label: 'example-01', + labelFormatted: '', meta: { bucketSize: 10 }, color: undefined, timeseries: { buckets: [] }, @@ -154,6 +157,7 @@ describe('getSplits(resp, panel, series)', () => { id: 'SERIES:example-02', key: 'example-02', label: 'example-02', + labelFormatted: '', meta: { bucketSize: 10 }, color: undefined, timeseries: { buckets: [] }, diff --git a/src/plugins/vis_type_timeseries/server/lib/vis_data/response_processors/series/std_metric.js b/src/plugins/vis_type_timeseries/server/lib/vis_data/response_processors/series/std_metric.js index 0d567b7fd4154..e04c3a93e81bb 100644 --- a/src/plugins/vis_type_timeseries/server/lib/vis_data/response_processors/series/std_metric.js +++ b/src/plugins/vis_type_timeseries/server/lib/vis_data/response_processors/series/std_metric.js @@ -40,6 +40,7 @@ export function stdMetric(resp, panel, series, meta) { results.push({ id: `${split.id}`, label: split.label, + labelFormatted: split.labelFormatted, color: split.color, data, ...decoration, From e827a6761e1667ea8b9ff1f10603849bc7219f91 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Tue, 8 Sep 2020 17:19:48 +0200 Subject: [PATCH 26/58] [RUM Dashboard] Added rum core web vitals (#75685) Co-authored-by: Elastic Machine --- .../elasticsearch_fieldnames.test.ts.snap | 30 +++++ .../apm/common/elasticsearch_fieldnames.ts | 6 + .../app/RumDashboard/ClientMetrics/index.tsx | 2 +- .../CoreVitals/ColorPaletteFlexItem.tsx | 72 ++++++++++ .../RumDashboard/CoreVitals/CoreVitalItem.tsx | 124 ++++++++++++++++++ .../CoreVitals/PaletteLegends.tsx | 69 ++++++++++ .../__stories__/CoreVitals.stories.tsx | 93 +++++++++++++ .../app/RumDashboard/CoreVitals/index.tsx | 73 +++++++++++ .../RumDashboard/CoreVitals/translations.ts | 50 +++++++ .../ResetPercentileZoom.tsx | 53 ++++++++ .../PageLoadDistribution/index.tsx | 25 +--- .../app/RumDashboard/RumDashboard.tsx | 16 ++- .../app/RumDashboard/translations.ts | 9 ++ .../lib/rum_client/get_web_core_vitals.ts | 123 +++++++++++++++++ .../apm/server/routes/create_apm_api.ts | 2 + .../plugins/apm/server/routes/rum_client.ts | 13 ++ .../apm/typings/elasticsearch/aggregations.ts | 2 +- 17 files changed, 740 insertions(+), 22 deletions(-) create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/ColorPaletteFlexItem.tsx create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/CoreVitalItem.tsx create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/PaletteLegends.tsx create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/__stories__/CoreVitals.stories.tsx create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/index.tsx create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/translations.ts create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/ResetPercentileZoom.tsx create mode 100644 x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts diff --git a/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap b/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap index 6238fbfdaa1ab..f93df9a01dea2 100644 --- a/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap +++ b/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap @@ -14,6 +14,8 @@ exports[`Error CLOUD_PROVIDER 1`] = `"gcp"`; exports[`Error CLOUD_REGION 1`] = `"europe-west1"`; +exports[`Error CLS_FIELD 1`] = `undefined`; + exports[`Error CONTAINER_ID 1`] = `undefined`; exports[`Error DESTINATION_ADDRESS 1`] = `undefined`; @@ -34,6 +36,10 @@ exports[`Error ERROR_LOG_MESSAGE 1`] = `undefined`; exports[`Error ERROR_PAGE_URL 1`] = `undefined`; +exports[`Error FCP_FIELD 1`] = `undefined`; + +exports[`Error FID_FIELD 1`] = `undefined`; + exports[`Error EVENT_OUTCOME 1`] = `undefined`; exports[`Error HOST_NAME 1`] = `"my hostname"`; @@ -44,6 +50,8 @@ exports[`Error HTTP_RESPONSE_STATUS_CODE 1`] = `undefined`; exports[`Error LABEL_NAME 1`] = `undefined`; +exports[`Error LCP_FIELD 1`] = `undefined`; + exports[`Error METRIC_JAVA_GC_COUNT 1`] = `undefined`; exports[`Error METRIC_JAVA_GC_TIME 1`] = `undefined`; @@ -118,6 +126,8 @@ exports[`Error SPAN_SUBTYPE 1`] = `undefined`; exports[`Error SPAN_TYPE 1`] = `undefined`; +exports[`Error TBT_FIELD 1`] = `undefined`; + exports[`Error TRACE_ID 1`] = `"trace id"`; exports[`Error TRANSACTION_BREAKDOWN_COUNT 1`] = `undefined`; @@ -168,6 +178,8 @@ exports[`Span CLOUD_PROVIDER 1`] = `"gcp"`; exports[`Span CLOUD_REGION 1`] = `"europe-west1"`; +exports[`Span CLS_FIELD 1`] = `undefined`; + exports[`Span CONTAINER_ID 1`] = `undefined`; exports[`Span DESTINATION_ADDRESS 1`] = `undefined`; @@ -188,6 +200,10 @@ exports[`Span ERROR_LOG_MESSAGE 1`] = `undefined`; exports[`Span ERROR_PAGE_URL 1`] = `undefined`; +exports[`Span FCP_FIELD 1`] = `undefined`; + +exports[`Span FID_FIELD 1`] = `undefined`; + exports[`Span EVENT_OUTCOME 1`] = `undefined`; exports[`Span HOST_NAME 1`] = `undefined`; @@ -198,6 +214,8 @@ exports[`Span HTTP_RESPONSE_STATUS_CODE 1`] = `undefined`; exports[`Span LABEL_NAME 1`] = `undefined`; +exports[`Span LCP_FIELD 1`] = `undefined`; + exports[`Span METRIC_JAVA_GC_COUNT 1`] = `undefined`; exports[`Span METRIC_JAVA_GC_TIME 1`] = `undefined`; @@ -272,6 +290,8 @@ exports[`Span SPAN_SUBTYPE 1`] = `"my subtype"`; exports[`Span SPAN_TYPE 1`] = `"span type"`; +exports[`Span TBT_FIELD 1`] = `undefined`; + exports[`Span TRACE_ID 1`] = `"trace id"`; exports[`Span TRANSACTION_BREAKDOWN_COUNT 1`] = `undefined`; @@ -322,6 +342,8 @@ exports[`Transaction CLOUD_PROVIDER 1`] = `"gcp"`; exports[`Transaction CLOUD_REGION 1`] = `"europe-west1"`; +exports[`Transaction CLS_FIELD 1`] = `undefined`; + exports[`Transaction CONTAINER_ID 1`] = `"container1234567890abcdef"`; exports[`Transaction DESTINATION_ADDRESS 1`] = `undefined`; @@ -342,6 +364,10 @@ exports[`Transaction ERROR_LOG_MESSAGE 1`] = `undefined`; exports[`Transaction ERROR_PAGE_URL 1`] = `undefined`; +exports[`Transaction FCP_FIELD 1`] = `undefined`; + +exports[`Transaction FID_FIELD 1`] = `undefined`; + exports[`Transaction EVENT_OUTCOME 1`] = `undefined`; exports[`Transaction HOST_NAME 1`] = `"my hostname"`; @@ -352,6 +378,8 @@ exports[`Transaction HTTP_RESPONSE_STATUS_CODE 1`] = `200`; exports[`Transaction LABEL_NAME 1`] = `undefined`; +exports[`Transaction LCP_FIELD 1`] = `undefined`; + exports[`Transaction METRIC_JAVA_GC_COUNT 1`] = `undefined`; exports[`Transaction METRIC_JAVA_GC_TIME 1`] = `undefined`; @@ -426,6 +454,8 @@ exports[`Transaction SPAN_SUBTYPE 1`] = `undefined`; exports[`Transaction SPAN_TYPE 1`] = `undefined`; +exports[`Transaction TBT_FIELD 1`] = `undefined`; + exports[`Transaction TRACE_ID 1`] = `"trace id"`; exports[`Transaction TRANSACTION_BREAKDOWN_COUNT 1`] = `undefined`; diff --git a/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts b/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts index c13169549a566..b322abeb3d597 100644 --- a/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts +++ b/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts @@ -106,3 +106,9 @@ export const TRANSACTION_TIME_TO_FIRST_BYTE = 'transaction.marks.agent.timeToFirstByte'; export const TRANSACTION_DOM_INTERACTIVE = 'transaction.marks.agent.domInteractive'; + +export const FCP_FIELD = 'transaction.marks.agent.firstContentfulPaint'; +export const LCP_FIELD = 'transaction.marks.agent.largestContentfulPaint'; +export const TBT_FIELD = 'transaction.experience.tbt'; +export const FID_FIELD = 'transaction.experience.fid'; +export const CLS_FIELD = 'transaction.experience.cls'; diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx index e21dd0d6ff126..b2132c50dc6bc 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx @@ -56,7 +56,7 @@ export function ClientMetrics() { diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/ColorPaletteFlexItem.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/ColorPaletteFlexItem.tsx new file mode 100644 index 0000000000000..fc2390acde0be --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/ColorPaletteFlexItem.tsx @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { EuiFlexItem, EuiToolTip } from '@elastic/eui'; +import styled from 'styled-components'; + +const ColoredSpan = styled.div` + height: 16px; + width: 100%; + cursor: pointer; +`; + +const getSpanStyle = ( + position: number, + inFocus: boolean, + hexCode: string, + percentage: number +) => { + let first = position === 0 || percentage === 100; + let last = position === 2 || percentage === 100; + if (percentage === 100) { + first = true; + last = true; + } + + const spanStyle: any = { + backgroundColor: hexCode, + opacity: !inFocus ? 1 : 0.3, + }; + let borderRadius = ''; + + if (first) { + borderRadius = '4px 0 0 4px'; + } + if (last) { + borderRadius = '0 4px 4px 0'; + } + if (first && last) { + borderRadius = '4px'; + } + spanStyle.borderRadius = borderRadius; + + return spanStyle; +}; + +export function ColorPaletteFlexItem({ + hexCode, + inFocus, + percentage, + tooltip, + position, +}: { + hexCode: string; + position: number; + inFocus: boolean; + percentage: number; + tooltip: string; +}) { + const spanStyle = getSpanStyle(position, inFocus, hexCode, percentage); + + return ( + + + + + + ); +} diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/CoreVitalItem.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/CoreVitalItem.tsx new file mode 100644 index 0000000000000..a4cbebf20b54c --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/CoreVitalItem.tsx @@ -0,0 +1,124 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + EuiFlexGroup, + euiPaletteForStatus, + EuiSpacer, + EuiStat, +} from '@elastic/eui'; +import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { PaletteLegends } from './PaletteLegends'; +import { ColorPaletteFlexItem } from './ColorPaletteFlexItem'; +import { + AVERAGE_LABEL, + GOOD_LABEL, + LESS_LABEL, + MORE_LABEL, + POOR_LABEL, +} from './translations'; + +export interface Thresholds { + good: string; + bad: string; +} + +interface Props { + title: string; + value: string; + ranks?: number[]; + loading: boolean; + thresholds: Thresholds; +} + +export function getCoreVitalTooltipMessage( + thresholds: Thresholds, + position: number, + title: string, + percentage: number +) { + const good = position === 0; + const bad = position === 2; + const average = !good && !bad; + + return i18n.translate('xpack.apm.csm.dashboard.webVitals.palette.tooltip', { + defaultMessage: + '{percentage} % of users have {exp} experience because the {title} takes {moreOrLess} than {value}{averageMessage}.', + values: { + percentage, + title: title?.toLowerCase(), + exp: good ? GOOD_LABEL : bad ? POOR_LABEL : AVERAGE_LABEL, + moreOrLess: bad || average ? MORE_LABEL : LESS_LABEL, + value: good || average ? thresholds.good : thresholds.bad, + averageMessage: average + ? i18n.translate('xpack.apm.rum.coreVitals.averageMessage', { + defaultMessage: ' and less than {bad}', + values: { bad: thresholds.bad }, + }) + : '', + }, + }); +} + +export function CoreVitalItem({ + loading, + title, + value, + thresholds, + ranks = [100, 0, 0], +}: Props) { + const palette = euiPaletteForStatus(3); + + const [inFocusInd, setInFocusInd] = useState(null); + + const biggestValIndex = ranks.indexOf(Math.max(...ranks)); + + return ( + <> + + + + {palette.map((hexCode, ind) => ( + + ))} + + + { + setInFocusInd(ind); + }} + /> + + + ); +} diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/PaletteLegends.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/PaletteLegends.tsx new file mode 100644 index 0000000000000..84cc5f1ddb230 --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/PaletteLegends.tsx @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiHealth, + euiPaletteForStatus, + EuiToolTip, +} from '@elastic/eui'; +import styled from 'styled-components'; +import { getCoreVitalTooltipMessage, Thresholds } from './CoreVitalItem'; + +const PaletteLegend = styled(EuiHealth)` + &:hover { + cursor: pointer; + text-decoration: underline; + background-color: #e7f0f7; + } +`; + +interface Props { + onItemHover: (ind: number | null) => void; + ranks: number[]; + thresholds: Thresholds; + title: string; +} + +export function PaletteLegends({ + ranks, + title, + onItemHover, + thresholds, +}: Props) { + const palette = euiPaletteForStatus(3); + + return ( + + {palette.map((color, ind) => ( + { + onItemHover(ind); + }} + onMouseLeave={() => { + onItemHover(null); + }} + > + + {ranks?.[ind]}% + + + ))} + + ); +} diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/__stories__/CoreVitals.stories.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/__stories__/CoreVitals.stories.tsx new file mode 100644 index 0000000000000..a611df00f1e65 --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/__stories__/CoreVitals.stories.tsx @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { storiesOf } from '@storybook/react'; +import React from 'react'; +import { EuiThemeProvider } from '../../../../../../../observability/public'; +import { CoreVitalItem } from '../CoreVitalItem'; +import { LCP_LABEL } from '../translations'; + +storiesOf('app/RumDashboard/WebCoreVitals', module) + .addDecorator((storyFn) => {storyFn()}) + .add( + 'Basic', + () => { + return ( + + ); + }, + { + info: { + propTables: false, + source: false, + }, + } + ) + .add( + '50% Good', + () => { + return ( + + ); + }, + { + info: { + propTables: false, + source: false, + }, + } + ) + .add( + '100% Bad', + () => { + return ( + + ); + }, + { + info: { + propTables: false, + source: false, + }, + } + ) + .add( + '100% Average', + () => { + return ( + + ); + }, + { + info: { + propTables: false, + source: false, + }, + } + ); diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/index.tsx new file mode 100644 index 0000000000000..e8305a6aef0d4 --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/index.tsx @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import * as React from 'react'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; + +import { useFetcher } from '../../../../hooks/useFetcher'; +import { useUrlParams } from '../../../../hooks/useUrlParams'; +import { CLS_LABEL, FID_LABEL, LCP_LABEL } from './translations'; +import { CoreVitalItem } from './CoreVitalItem'; + +const CoreVitalsThresholds = { + LCP: { good: '2.5s', bad: '4.0s' }, + FID: { good: '100ms', bad: '300ms' }, + CLS: { good: '0.1', bad: '0.25' }, +}; + +export function CoreVitals() { + const { urlParams, uiFilters } = useUrlParams(); + + const { start, end, serviceName } = urlParams; + + const { data, status } = useFetcher( + (callApmApi) => { + if (start && end && serviceName) { + return callApmApi({ + pathname: '/api/apm/rum-client/web-core-vitals', + params: { + query: { start, end, uiFilters: JSON.stringify(uiFilters) }, + }, + }); + } + return Promise.resolve(null); + }, + [start, end, serviceName, uiFilters] + ); + + const { lcp, lcpRanks, fid, fidRanks, cls, clsRanks } = data || {}; + + return ( + + + + + + + + + + + + ); +} diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/translations.ts b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/translations.ts new file mode 100644 index 0000000000000..136dfb279e336 --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/translations.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; + +export const LCP_LABEL = i18n.translate('xpack.apm.rum.coreVitals.lcp', { + defaultMessage: 'Largest contentful paint', +}); + +export const FID_LABEL = i18n.translate('xpack.apm.rum.coreVitals.fip', { + defaultMessage: 'First input delay', +}); + +export const CLS_LABEL = i18n.translate('xpack.apm.rum.coreVitals.cls', { + defaultMessage: 'Cumulative layout shift', +}); + +export const FCP_LABEL = i18n.translate('xpack.apm.rum.coreVitals.fcp', { + defaultMessage: 'First contentful paint', +}); + +export const TBT_LABEL = i18n.translate('xpack.apm.rum.coreVitals.tbt', { + defaultMessage: 'Total blocking time', +}); + +export const POOR_LABEL = i18n.translate('xpack.apm.rum.coreVitals.poor', { + defaultMessage: 'a poor', +}); + +export const GOOD_LABEL = i18n.translate('xpack.apm.rum.coreVitals.good', { + defaultMessage: 'a good', +}); + +export const AVERAGE_LABEL = i18n.translate( + 'xpack.apm.rum.coreVitals.average', + { + defaultMessage: 'an average', + } +); + +export const MORE_LABEL = i18n.translate('xpack.apm.rum.coreVitals.more', { + defaultMessage: 'more', +}); + +export const LESS_LABEL = i18n.translate('xpack.apm.rum.coreVitals.less', { + defaultMessage: 'less', +}); diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/ResetPercentileZoom.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/ResetPercentileZoom.tsx new file mode 100644 index 0000000000000..deaeed70e572b --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/ResetPercentileZoom.tsx @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { + EuiButtonEmpty, + EuiHideFor, + EuiShowFor, + EuiButtonIcon, +} from '@elastic/eui'; +import { I18LABELS } from '../translations'; +import { PercentileRange } from './index'; + +interface Props { + percentileRange: PercentileRange; + setPercentileRange: (value: PercentileRange) => void; +} +export function ResetPercentileZoom({ + percentileRange, + setPercentileRange, +}: Props) { + const isDisabled = + percentileRange.min === null && percentileRange.max === null; + const onClick = () => { + setPercentileRange({ min: null, max: null }); + }; + return ( + <> + + + + + + {I18LABELS.resetZoom} + + + + ); +} diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/index.tsx index 8fd03ebb65f4c..f63b914c73398 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/PageLoadDistribution/index.tsx @@ -5,19 +5,14 @@ */ import React, { useState } from 'react'; -import { - EuiButtonEmpty, - EuiFlexGroup, - EuiFlexItem, - EuiSpacer, - EuiTitle, -} from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui'; import { useUrlParams } from '../../../../hooks/useUrlParams'; import { useFetcher } from '../../../../hooks/useFetcher'; import { I18LABELS } from '../translations'; import { BreakdownFilter } from '../Breakdowns/BreakdownFilter'; import { PageLoadDistChart } from '../Charts/PageLoadDistChart'; import { BreakdownItem } from '../../../../../typings/ui_filters'; +import { ResetPercentileZoom } from './ResetPercentileZoom'; export interface PercentileRange { min?: number | null; @@ -74,18 +69,10 @@ export function PageLoadDistribution() { - { - setPercentileRange({ min: null, max: null }); - }} - disabled={ - percentileRange.min === null && percentileRange.max === null - } - > - {I18LABELS.resetZoom} - + -

{I18LABELS.pageLoadTimes}

+

{I18LABELS.pageLoadDuration}

@@ -34,6 +35,19 @@ export function RumDashboard() {
+ + + + + +

{I18LABELS.coreWebVitals}

+
+ + +
+
+
+
diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts b/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts index 66eeaf433d2a1..042e138793f11 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts @@ -25,6 +25,12 @@ export const I18LABELS = { pageLoadTimes: i18n.translate('xpack.apm.rum.dashboard.pageLoadTimes.label', { defaultMessage: 'Page load times', }), + pageLoadDuration: i18n.translate( + 'xpack.apm.rum.dashboard.pageLoadDuration.label', + { + defaultMessage: 'Page load duration', + } + ), pageLoadDistribution: i18n.translate( 'xpack.apm.rum.dashboard.pageLoadDistribution.label', { @@ -46,6 +52,9 @@ export const I18LABELS = { seconds: i18n.translate('xpack.apm.rum.filterGroup.seconds', { defaultMessage: 'seconds', }), + coreWebVitals: i18n.translate('xpack.apm.rum.filterGroup.coreWebVitals', { + defaultMessage: 'Core web vitals', + }), }; export const VisitorBreakdownLabel = i18n.translate( diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts b/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts new file mode 100644 index 0000000000000..9395e5fe14336 --- /dev/null +++ b/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts @@ -0,0 +1,123 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { getRumOverviewProjection } from '../../projections/rum_overview'; +import { mergeProjection } from '../../projections/util/merge_projection'; +import { + Setup, + SetupTimeRange, + SetupUIFilters, +} from '../helpers/setup_request'; +import { + CLS_FIELD, + FID_FIELD, + LCP_FIELD, +} from '../../../common/elasticsearch_fieldnames'; + +export async function getWebCoreVitals({ + setup, +}: { + setup: Setup & SetupTimeRange & SetupUIFilters; +}) { + const projection = getRumOverviewProjection({ + setup, + }); + + const params = mergeProjection(projection, { + body: { + size: 0, + query: { + bool: { + filter: [ + ...projection.body.query.bool.filter, + { + term: { + 'user_agent.name': 'Chrome', + }, + }, + ], + }, + }, + aggs: { + lcp: { + percentiles: { + field: LCP_FIELD, + percents: [50], + }, + }, + fid: { + percentiles: { + field: FID_FIELD, + percents: [50], + }, + }, + cls: { + percentiles: { + field: CLS_FIELD, + percents: [50], + }, + }, + lcpRanks: { + percentile_ranks: { + field: LCP_FIELD, + values: [2500, 4000], + keyed: false, + }, + }, + fidRanks: { + percentile_ranks: { + field: FID_FIELD, + values: [100, 300], + keyed: false, + }, + }, + clsRanks: { + percentile_ranks: { + field: CLS_FIELD, + values: [0.1, 0.25], + keyed: false, + }, + }, + }, + }, + }); + + const { apmEventClient } = setup; + + const response = await apmEventClient.search(params); + const { + lcp, + cls, + fid, + lcpRanks, + fidRanks, + clsRanks, + } = response.aggregations!; + + const getRanksPercentages = ( + ranks: Array<{ key: number; value: number }> + ) => { + const ranksVal = (ranks ?? [0, 0]).map( + ({ value }) => value?.toFixed(0) ?? 0 + ); + return [ + Number(ranksVal?.[0]), + Number(ranksVal?.[1]) - Number(ranksVal?.[0]), + 100 - Number(ranksVal?.[1]), + ]; + }; + + // Divide by 1000 to convert ms into seconds + return { + cls: String(cls.values['50.0'] || 0), + fid: ((fid.values['50.0'] || 0) / 1000).toFixed(2), + lcp: ((lcp.values['50.0'] || 0) / 1000).toFixed(2), + + lcpRanks: getRanksPercentages(lcpRanks.values), + fidRanks: getRanksPercentages(fidRanks.values), + clsRanks: getRanksPercentages(clsRanks.values), + }; +} diff --git a/x-pack/plugins/apm/server/routes/create_apm_api.ts b/x-pack/plugins/apm/server/routes/create_apm_api.ts index 5dff13e5b37e0..cf7a02cde975c 100644 --- a/x-pack/plugins/apm/server/routes/create_apm_api.ts +++ b/x-pack/plugins/apm/server/routes/create_apm_api.ts @@ -77,6 +77,7 @@ import { rumPageLoadDistBreakdownRoute, rumServicesRoute, rumVisitorsBreakdownRoute, + rumWebCoreVitals, } from './rum_client'; import { observabilityOverviewHasDataRoute, @@ -172,6 +173,7 @@ const createApmApi = () => { .add(rumClientMetricsRoute) .add(rumServicesRoute) .add(rumVisitorsBreakdownRoute) + .add(rumWebCoreVitals) // Observability dashboard .add(observabilityOverviewHasDataRoute) diff --git a/x-pack/plugins/apm/server/routes/rum_client.ts b/x-pack/plugins/apm/server/routes/rum_client.ts index 0781512c6f7a0..e17791f56eef2 100644 --- a/x-pack/plugins/apm/server/routes/rum_client.ts +++ b/x-pack/plugins/apm/server/routes/rum_client.ts @@ -14,6 +14,7 @@ import { getPageLoadDistribution } from '../lib/rum_client/get_page_load_distrib import { getPageLoadDistBreakdown } from '../lib/rum_client/get_pl_dist_breakdown'; import { getRumServices } from '../lib/rum_client/get_rum_services'; import { getVisitorBreakdown } from '../lib/rum_client/get_visitor_breakdown'; +import { getWebCoreVitals } from '../lib/rum_client/get_web_core_vitals'; export const percentileRangeRt = t.partial({ minPercentile: t.string, @@ -117,3 +118,15 @@ export const rumVisitorsBreakdownRoute = createRoute(() => ({ return getVisitorBreakdown({ setup }); }, })); + +export const rumWebCoreVitals = createRoute(() => ({ + path: '/api/apm/rum-client/web-core-vitals', + params: { + query: t.intersection([uiFiltersRt, rangeRt]), + }, + handler: async ({ context, request }) => { + const setup = await setupRequest(context, request); + + return getWebCoreVitals({ setup }); + }, +})); diff --git a/x-pack/plugins/apm/typings/elasticsearch/aggregations.ts b/x-pack/plugins/apm/typings/elasticsearch/aggregations.ts index f957614122547..7a7592b248960 100644 --- a/x-pack/plugins/apm/typings/elasticsearch/aggregations.ts +++ b/x-pack/plugins/apm/typings/elasticsearch/aggregations.ts @@ -146,7 +146,7 @@ export interface AggregationOptionsByType { buckets: number; } & AggregationSourceOptions; percentile_ranks: { - values: string[]; + values: Array; keyed?: boolean; hdr?: { number_of_significant_value_digits: number }; } & AggregationSourceOptions; From 728dfb4b6bd6fd9ee1c736132b4b7f96fcccb70e Mon Sep 17 00:00:00 2001 From: Marta Bondyra Date: Tue, 8 Sep 2020 17:40:06 +0200 Subject: [PATCH 27/58] [Lens] Update grouping editor to indicate the expected result of a grouping change (#76904) --- .../dimension_panel/bucket_nesting_editor.tsx | 5 +++-- x-pack/plugins/translations/translations/ja-JP.json | 2 -- x-pack/plugins/translations/translations/zh-CN.json | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/bucket_nesting_editor.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/bucket_nesting_editor.tsx index 198be7085f5fc..e5d63f1f92e19 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/bucket_nesting_editor.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/bucket_nesting_editor.tsx @@ -80,7 +80,8 @@ export function BucketNestingEditor({ values: { field: fieldName }, }) : i18n.translate('xpack.lens.indexPattern.groupingOverallDateHistogram', { - defaultMessage: 'Dates overall', + defaultMessage: 'Top values for each {field}', + values: { field: fieldName }, }) } checked={!prevColumn} @@ -96,7 +97,7 @@ export function BucketNestingEditor({ values: { target: target.fieldName }, }) : i18n.translate('xpack.lens.indexPattern.groupingSecondDateHistogram', { - defaultMessage: 'Dates for each {target}', + defaultMessage: 'Overall top {target}', values: { target: target.fieldName }, }) } diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index eacb1febd20ff..ac23d1e62bcdf 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -9643,9 +9643,7 @@ "xpack.lens.indexPattern.fieldTopValuesLabel": "トップの値", "xpack.lens.indexPattern.groupByDropdown": "グループ分けの条件", "xpack.lens.indexPattern.groupingControlLabel": "グループ分け", - "xpack.lens.indexPattern.groupingOverallDateHistogram": "全体の日付", "xpack.lens.indexPattern.groupingOverallTerms": "全体のトップ {field}", - "xpack.lens.indexPattern.groupingSecondDateHistogram": "各 {target} の日付", "xpack.lens.indexPattern.groupingSecondTerms": "各 {target} のトップの値", "xpack.lens.indexPattern.indexPatternLoadError": "インデックスパターンの読み込み中にエラーが発生", "xpack.lens.indexPattern.invalidInterval": "無効な間隔値", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index bd30703dd5bd6..4d5e5c05cb795 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -9649,9 +9649,7 @@ "xpack.lens.indexPattern.fieldTopValuesLabel": "排名最前值", "xpack.lens.indexPattern.groupByDropdown": "分组依据", "xpack.lens.indexPattern.groupingControlLabel": "分组", - "xpack.lens.indexPattern.groupingOverallDateHistogram": "日期 - 总体", "xpack.lens.indexPattern.groupingOverallTerms": "总体排名最前 {field}", - "xpack.lens.indexPattern.groupingSecondDateHistogram": "每个 {target} 的日期", "xpack.lens.indexPattern.groupingSecondTerms": "每个 {target} 的排名最前值", "xpack.lens.indexPattern.indexPatternLoadError": "加载索引模式时出错", "xpack.lens.indexPattern.invalidInterval": "时间间隔值无效", From 4afa2d633f2e7b002ebb556becaad176d259c5f4 Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Tue, 8 Sep 2020 11:52:05 -0400 Subject: [PATCH 28/58] [Uptime] Modify router to use `ScopedHistory` (#76421) * Remove hashbang and modify router to use ScopedHistory. * Update test to conform to refactored API. * Update test snapshots. * Fix broken type check. * Remove unneeded prop. * Prevent full page reload for breadcrumbs. * Fix outdated test. * Fix type errors. * Add default value for focusConnectorField url param. * Make stringify function support focusFieldConnector empty values. * Avoid unnecessary text in breadcrumb href. * Refresh test snapshot. Co-authored-by: Elastic Machine --- .../common/constants/client_defaults.ts | 1 + .../plugins/uptime/common/constants/plugin.ts | 1 - x-pack/plugins/uptime/public/apps/plugin.ts | 3 +- .../plugins/uptime/public/apps/render_app.tsx | 5 ++-- .../plugins/uptime/public/apps/uptime_app.tsx | 8 ++--- .../public/apps/uptime_overview_fetcher.ts | 2 +- .../data_or_index_missing.test.tsx.snap | 2 +- .../__snapshots__/empty_state.test.tsx.snap | 24 +++++++-------- .../empty_state/data_or_index_missing.tsx | 2 +- .../most_recent_error.test.tsx.snap | 2 +- .../hooks/__tests__/use_breadcrumbs.test.tsx | 10 ++++++- .../uptime/public/hooks/use_breadcrumbs.ts | 29 +++++++++++++++---- .../stringify_url_params.test.ts.snap | 5 ---- .../__tests__/stringify_url_params.test.ts | 10 +++++-- .../public/lib/helper/stringify_url_params.ts | 4 +++ 15 files changed, 68 insertions(+), 40 deletions(-) delete mode 100644 x-pack/plugins/uptime/public/lib/helper/__tests__/__snapshots__/stringify_url_params.test.ts.snap diff --git a/x-pack/plugins/uptime/common/constants/client_defaults.ts b/x-pack/plugins/uptime/common/constants/client_defaults.ts index d8a3ef8d7cbbb..a5db67ae3b58f 100644 --- a/x-pack/plugins/uptime/common/constants/client_defaults.ts +++ b/x-pack/plugins/uptime/common/constants/client_defaults.ts @@ -31,6 +31,7 @@ export const CLIENT_DEFAULTS = { * The end of the default date range is now. */ DATE_RANGE_END: 'now', + FOCUS_CONNECTOR_FIELD: false, FILTERS: '', MONITOR_LIST_PAGE_INDEX: 0, MONITOR_LIST_PAGE_SIZE: 20, diff --git a/x-pack/plugins/uptime/common/constants/plugin.ts b/x-pack/plugins/uptime/common/constants/plugin.ts index 6064524872a0a..71bae9d8dafcd 100644 --- a/x-pack/plugins/uptime/common/constants/plugin.ts +++ b/x-pack/plugins/uptime/common/constants/plugin.ts @@ -17,7 +17,6 @@ export const PLUGIN = { NAME: i18n.translate('xpack.uptime.featureRegistry.uptimeFeatureName', { defaultMessage: 'Uptime', }), - ROUTER_BASE_NAME: '/app/uptime#', TITLE: i18n.translate('xpack.uptime.uptimeFeatureCatalogueTitle', { defaultMessage: 'Uptime', }), diff --git a/x-pack/plugins/uptime/public/apps/plugin.ts b/x-pack/plugins/uptime/public/apps/plugin.ts index 9f7907ec39187..8a6699c16269e 100644 --- a/x-pack/plugins/uptime/public/apps/plugin.ts +++ b/x-pack/plugins/uptime/public/apps/plugin.ts @@ -59,7 +59,7 @@ export class UptimePlugin title: PLUGIN.TITLE, description: PLUGIN.DESCRIPTION, icon: 'uptimeApp', - path: '/app/uptime#/', + path: '/app/uptime', showOnHomePage: false, category: FeatureCatalogueCategory.DATA, }); @@ -84,7 +84,6 @@ export class UptimePlugin }); core.application.register({ - appRoute: '/app/uptime#/', id: PLUGIN.ID, euiIconType: 'uptimeApp', order: 8400, diff --git a/x-pack/plugins/uptime/public/apps/render_app.tsx b/x-pack/plugins/uptime/public/apps/render_app.tsx index f834f8b5cdd3c..c0567ff956ce4 100644 --- a/x-pack/plugins/uptime/public/apps/render_app.tsx +++ b/x-pack/plugins/uptime/public/apps/render_app.tsx @@ -16,13 +16,12 @@ import { } from '../../common/constants'; import { UptimeApp, UptimeAppProps } from './uptime_app'; import { ClientPluginsSetup, ClientPluginsStart } from './plugin'; -import { PLUGIN } from '../../common/constants/plugin'; export function renderApp( core: CoreStart, plugins: ClientPluginsSetup, startPlugins: ClientPluginsStart, - { element }: AppMountParameters + { element, history }: AppMountParameters ) { const { application: { capabilities }, @@ -48,6 +47,7 @@ export function renderApp( basePath: basePath.get(), darkMode: core.uiSettings.get(DEFAULT_DARK_MODE), commonlyUsedRanges: core.uiSettings.get(DEFAULT_TIMEPICKER_QUICK_RANGES), + history, isApmAvailable: apm, isInfraAvailable: infrastructure, isLogsAvailable: logs, @@ -67,7 +67,6 @@ export function renderApp( }, ], }), - routerBasename: basePath.prepend(PLUGIN.ROUTER_BASE_NAME), setBadge, setBreadcrumbs: core.chrome.setBreadcrumbs, }; diff --git a/x-pack/plugins/uptime/public/apps/uptime_app.tsx b/x-pack/plugins/uptime/public/apps/uptime_app.tsx index 1dc34b44b7c64..4b58ba104314f 100644 --- a/x-pack/plugins/uptime/public/apps/uptime_app.tsx +++ b/x-pack/plugins/uptime/public/apps/uptime_app.tsx @@ -8,7 +8,7 @@ import { EuiPage, EuiErrorBoundary } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useEffect } from 'react'; import { Provider as ReduxProvider } from 'react-redux'; -import { BrowserRouter as Router } from 'react-router-dom'; +import { Router } from 'react-router-dom'; import { I18nStart, ChromeBreadcrumb, CoreStart } from 'kibana/public'; import { KibanaContextProvider, @@ -31,6 +31,7 @@ import { } from '../components/overview/alerts'; import { store } from '../state'; import { kibanaService } from '../state/kibana_service'; +import { ScopedHistory } from '../../../../../src/core/public'; export interface UptimeAppColors { danger: string; @@ -46,13 +47,13 @@ export interface UptimeAppProps { canSave: boolean; core: CoreStart; darkMode: boolean; + history: ScopedHistory; i18n: I18nStart; isApmAvailable: boolean; isInfraAvailable: boolean; isLogsAvailable: boolean; plugins: ClientPluginsSetup; startPlugins: ClientPluginsStart; - routerBasename: string; setBadge: UMUpdateBadge; renderGlobalHelpControls(): void; commonlyUsedRanges: CommonlyUsedRange[]; @@ -68,7 +69,6 @@ const Application = (props: UptimeAppProps) => { i18n: i18nCore, plugins, renderGlobalHelpControls, - routerBasename, setBadge, startPlugins, } = props; @@ -99,7 +99,7 @@ const Application = (props: UptimeAppProps) => { - + diff --git a/x-pack/plugins/uptime/public/apps/uptime_overview_fetcher.ts b/x-pack/plugins/uptime/public/apps/uptime_overview_fetcher.ts index 7e5c18f13b29e..b077f622c1dee 100644 --- a/x-pack/plugins/uptime/public/apps/uptime_overview_fetcher.ts +++ b/x-pack/plugins/uptime/public/apps/uptime_overview_fetcher.ts @@ -24,7 +24,7 @@ async function fetchUptimeOverviewData({ const pings = await fetchPingHistogram({ dateStart: start, dateEnd: end, bucketSize }); const response: UptimeFetchDataResponse = { - appLink: `/app/uptime#/?dateRangeStart=${relativeTime.start}&dateRangeEnd=${relativeTime.end}`, + appLink: `/app/uptime?dateRangeStart=${relativeTime.start}&dateRangeEnd=${relativeTime.end}`, stats: { monitors: { type: 'number', diff --git a/x-pack/plugins/uptime/public/components/overview/empty_state/__tests__/__snapshots__/data_or_index_missing.test.tsx.snap b/x-pack/plugins/uptime/public/components/overview/empty_state/__tests__/__snapshots__/data_or_index_missing.test.tsx.snap index 0429d36bf8741..41e46259715ee 100644 --- a/x-pack/plugins/uptime/public/components/overview/empty_state/__tests__/__snapshots__/data_or_index_missing.test.tsx.snap +++ b/x-pack/plugins/uptime/public/components/overview/empty_state/__tests__/__snapshots__/data_or_index_missing.test.tsx.snap @@ -36,7 +36,7 @@ exports[`DataOrIndexMissing component renders headingMessage 1`] = ` - + Get https://expired.badssl.com: x509: certificate has expired or is not yet valid diff --git a/x-pack/plugins/uptime/public/hooks/__tests__/use_breadcrumbs.test.tsx b/x-pack/plugins/uptime/public/hooks/__tests__/use_breadcrumbs.test.tsx index d688660f564ca..9b9af20285304 100644 --- a/x-pack/plugins/uptime/public/hooks/__tests__/use_breadcrumbs.test.tsx +++ b/x-pack/plugins/uptime/public/hooks/__tests__/use_breadcrumbs.test.tsx @@ -44,7 +44,11 @@ describe('useBreadcrumbs', () => { ); const urlParams: UptimeUrlParams = getSupportedUrlParams({}); - expect(getBreadcrumbs()).toStrictEqual([makeBaseBreadcrumb(urlParams)].concat(expectedCrumbs)); + expect(JSON.stringify(getBreadcrumbs())).toEqual( + JSON.stringify( + [makeBaseBreadcrumb('/app/uptime', jest.fn(), urlParams)].concat(expectedCrumbs) + ) + ); }); }); @@ -54,6 +58,10 @@ const mockCore: () => [() => ChromeBreadcrumb[], any] = () => { return breadcrumbObj; }; const core = { + application: { + getUrlForApp: () => '/app/uptime', + navigateToUrl: jest.fn(), + }, chrome: { setBreadcrumbs: (newBreadcrumbs: ChromeBreadcrumb[]) => { breadcrumbObj = newBreadcrumbs; diff --git a/x-pack/plugins/uptime/public/hooks/use_breadcrumbs.ts b/x-pack/plugins/uptime/public/hooks/use_breadcrumbs.ts index 182c6b0114128..ddd3ca7c4f528 100644 --- a/x-pack/plugins/uptime/public/hooks/use_breadcrumbs.ts +++ b/x-pack/plugins/uptime/public/hooks/use_breadcrumbs.ts @@ -7,35 +7,52 @@ import { ChromeBreadcrumb } from 'kibana/public'; import { i18n } from '@kbn/i18n'; import { useEffect } from 'react'; +import { EuiBreadcrumb } from '@elastic/eui'; import { UptimeUrlParams } from '../lib/helper'; import { stringifyUrlParams } from '../lib/helper/stringify_url_params'; import { useKibana } from '../../../../../src/plugins/kibana_react/public'; import { useUrlParams } from '.'; +import { PLUGIN } from '../../common/constants/plugin'; -export const makeBaseBreadcrumb = (params?: UptimeUrlParams): ChromeBreadcrumb => { - let href = '#/'; +const EMPTY_QUERY = '?'; + +export const makeBaseBreadcrumb = ( + href: string, + navigateToHref?: (url: string) => Promise, + params?: UptimeUrlParams +): EuiBreadcrumb => { if (params) { const crumbParams: Partial = { ...params }; // We don't want to encode this values because they are often set to Date.now(), the relative // values in dateRangeStart are better for a URL. delete crumbParams.absoluteDateRangeStart; delete crumbParams.absoluteDateRangeEnd; - href += stringifyUrlParams(crumbParams, true); + const query = stringifyUrlParams(crumbParams, true); + href += query === EMPTY_QUERY ? '' : query; } return { text: i18n.translate('xpack.uptime.breadcrumbs.overviewBreadcrumbText', { defaultMessage: 'Uptime', }), href, + onClick: (event) => { + if (href && navigateToHref) { + event.preventDefault(); + navigateToHref(href); + } + }, }; }; export const useBreadcrumbs = (extraCrumbs: ChromeBreadcrumb[]) => { const params = useUrlParams()[0](); - const setBreadcrumbs = useKibana().services.chrome?.setBreadcrumbs; + const kibana = useKibana(); + const setBreadcrumbs = kibana.services.chrome?.setBreadcrumbs; + const appPath = kibana.services.application?.getUrlForApp(PLUGIN.ID) ?? ''; + const navigate = kibana.services.application?.navigateToUrl; useEffect(() => { if (setBreadcrumbs) { - setBreadcrumbs([makeBaseBreadcrumb(params)].concat(extraCrumbs)); + setBreadcrumbs([makeBaseBreadcrumb(appPath, navigate, params)].concat(extraCrumbs)); } - }, [extraCrumbs, params, setBreadcrumbs]); + }, [appPath, extraCrumbs, navigate, params, setBreadcrumbs]); }; diff --git a/x-pack/plugins/uptime/public/lib/helper/__tests__/__snapshots__/stringify_url_params.test.ts.snap b/x-pack/plugins/uptime/public/lib/helper/__tests__/__snapshots__/stringify_url_params.test.ts.snap deleted file mode 100644 index 31f5ceff7d046..0000000000000 --- a/x-pack/plugins/uptime/public/lib/helper/__tests__/__snapshots__/stringify_url_params.test.ts.snap +++ /dev/null @@ -1,5 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`stringifyUrlParams creates expected string value 1`] = `"?autorefreshInterval=50000&autorefreshIsPaused=false&dateRangeStart=now-15m&dateRangeEnd=now&filters=monitor.id%3A%20bar&search=monitor.id%3A%20foo&selectedPingStatus=down&statusFilter=up"`; - -exports[`stringifyUrlParams creates expected string value when ignore empty is true 1`] = `"?autorefreshInterval=50000&filters=monitor.id%3A%20bar"`; diff --git a/x-pack/plugins/uptime/public/lib/helper/__tests__/stringify_url_params.test.ts b/x-pack/plugins/uptime/public/lib/helper/__tests__/stringify_url_params.test.ts index a2f9b29c4ff58..8cf35c728fc04 100644 --- a/x-pack/plugins/uptime/public/lib/helper/__tests__/stringify_url_params.test.ts +++ b/x-pack/plugins/uptime/public/lib/helper/__tests__/stringify_url_params.test.ts @@ -14,11 +14,14 @@ describe('stringifyUrlParams', () => { dateRangeStart: 'now-15m', dateRangeEnd: 'now', filters: 'monitor.id: bar', + focusConnectorField: true, search: 'monitor.id: foo', selectedPingStatus: 'down', statusFilter: 'up', }); - expect(result).toMatchSnapshot(); + expect(result).toMatchInlineSnapshot( + `"?autorefreshInterval=50000&autorefreshIsPaused=false&dateRangeStart=now-15m&dateRangeEnd=now&filters=monitor.id%3A%20bar&focusConnectorField=true&search=monitor.id%3A%20foo&selectedPingStatus=down&statusFilter=up"` + ); }); it('creates expected string value when ignore empty is true', () => { @@ -29,6 +32,7 @@ describe('stringifyUrlParams', () => { dateRangeStart: 'now-15m', dateRangeEnd: 'now', filters: 'monitor.id: bar', + focusConnectorField: false, search: undefined, selectedPingStatus: undefined, statusFilter: '', @@ -36,7 +40,9 @@ describe('stringifyUrlParams', () => { }, true ); - expect(result).toMatchSnapshot(); + expect(result).toMatchInlineSnapshot( + `"?autorefreshInterval=50000&filters=monitor.id%3A%20bar"` + ); expect(result.includes('pagination')).toBeFalsy(); expect(result.includes('search')).toBeFalsy(); diff --git a/x-pack/plugins/uptime/public/lib/helper/stringify_url_params.ts b/x-pack/plugins/uptime/public/lib/helper/stringify_url_params.ts index a8ce86c4399e2..b10af15961401 100644 --- a/x-pack/plugins/uptime/public/lib/helper/stringify_url_params.ts +++ b/x-pack/plugins/uptime/public/lib/helper/stringify_url_params.ts @@ -13,6 +13,7 @@ const { AUTOREFRESH_IS_PAUSED, DATE_RANGE_START, DATE_RANGE_END, + FOCUS_CONNECTOR_FIELD, } = CLIENT_DEFAULTS; export const stringifyUrlParams = (params: Partial, ignoreEmpty = false) => { @@ -36,6 +37,9 @@ export const stringifyUrlParams = (params: Partial, ignoreEmpty if (key === 'autorefreshInterval' && val === AUTOREFRESH_INTERVAL) { delete params[key]; } + if (key === 'focusConnectorField' && val === FOCUS_CONNECTOR_FIELD) { + delete params[key]; + } }); } return `?${stringify(params, { sort: false })}`; From 075e75e2f7bcd0791cd5db88e865d745ec39e153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20C=C3=B4t=C3=A9?= Date: Tue, 8 Sep 2020 11:53:21 -0400 Subject: [PATCH 29/58] Rename status API to instance summary (#76541) * Rename status API to instance summary * Remove unused translations * Fix typos Co-authored-by: Elastic Machine --- x-pack/plugins/alerts/README.md | 6 +- ...rt_status.ts => alert_instance_summary.ts} | 2 +- x-pack/plugins/alerts/common/index.ts | 2 +- .../alerts/server/alerts_client.mock.ts | 2 +- .../alerts/server/alerts_client.test.ts | 86 +++++++++------ x-pack/plugins/alerts/server/alerts_client.ts | 25 +++-- .../authorization/alerts_authorization.ts | 2 +- ...t_instance_summary_from_event_log.test.ts} | 100 +++++++++++++----- ... alert_instance_summary_from_event_log.ts} | 28 ++--- x-pack/plugins/alerts/server/plugin.ts | 4 +- ....ts => get_alert_instance_summary.test.ts} | 24 ++--- ...tatus.ts => get_alert_instance_summary.ts} | 8 +- x-pack/plugins/alerts/server/routes/index.ts | 2 +- .../alerting.test.ts | 8 +- .../feature_privilege_builder/alerting.ts | 2 +- .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../public/application/lib/alert_api.ts | 14 ++- .../components/alert_instances.test.tsx | 31 +++--- .../components/alert_instances.tsx | 10 +- .../components/alert_instances_route.test.tsx | 54 ++++++---- .../components/alert_instances_route.tsx | 39 ++++--- .../with_bulk_alert_api_operations.tsx | 10 +- .../triggers_actions_ui/public/types.ts | 4 +- ...tatus.ts => get_alert_instance_summary.ts} | 20 ++-- .../tests/alerting/index.ts | 2 +- ...tatus.ts => get_alert_instance_summary.ts} | 20 ++-- .../spaces_only/tests/alerting/index.ts | 2 +- .../apps/triggers_actions_ui/details.ts | 20 ++-- .../services/alerting/alerts.ts | 6 +- 30 files changed, 325 insertions(+), 210 deletions(-) rename x-pack/plugins/alerts/common/{alert_status.ts => alert_instance_summary.ts} (95%) rename x-pack/plugins/alerts/server/lib/{alert_status_from_event_log.test.ts => alert_instance_summary_from_event_log.test.ts} (83%) rename x-pack/plugins/alerts/server/lib/{alert_status_from_event_log.ts => alert_instance_summary_from_event_log.ts} (79%) rename x-pack/plugins/alerts/server/routes/{get_alert_status.test.ts => get_alert_instance_summary.test.ts} (75%) rename x-pack/plugins/alerts/server/routes/{get_alert_status.ts => get_alert_instance_summary.ts} (83%) rename x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/{get_alert_status.ts => get_alert_instance_summary.ts} (90%) rename x-pack/test/alerting_api_integration/spaces_only/tests/alerting/{get_alert_status.ts => get_alert_instance_summary.ts} (95%) diff --git a/x-pack/plugins/alerts/README.md b/x-pack/plugins/alerts/README.md index aab05cb0a7cfd..6307e463af853 100644 --- a/x-pack/plugins/alerts/README.md +++ b/x-pack/plugins/alerts/README.md @@ -26,7 +26,7 @@ Table of Contents - [`GET /api/alerts/_find`: Find alerts](#get-apialertfind-find-alerts) - [`GET /api/alerts/alert/{id}`: Get alert](#get-apialertid-get-alert) - [`GET /api/alerts/alert/{id}/state`: Get alert state](#get-apialertidstate-get-alert-state) - - [`GET /api/alerts/alert/{id}/status`: Get alert status](#get-apialertidstate-get-alert-status) + - [`GET /api/alerts/alert/{id}/_instance_summary`: Get alert instance summary](#get-apialertidstate-get-alert-instance-summary) - [`GET /api/alerts/list_alert_types`: List alert types](#get-apialerttypes-list-alert-types) - [`PUT /api/alerts/alert/{id}`: Update alert](#put-apialertid-update-alert) - [`POST /api/alerts/alert/{id}/_enable`: Enable an alert](#post-apialertidenable-enable-an-alert) @@ -505,7 +505,7 @@ Params: |---|---|---| |id|The id of the alert whose state you're trying to get.|string| -### `GET /api/alerts/alert/{id}/status`: Get alert status +### `GET /api/alerts/alert/{id}/_instance_summary`: Get alert instance summary Similar to the `GET state` call, but collects additional information from the event log. @@ -514,7 +514,7 @@ Params: |Property|Description|Type| |---|---|---| -|id|The id of the alert whose status you're trying to get.|string| +|id|The id of the alert whose instance summary you're trying to get.|string| Query: diff --git a/x-pack/plugins/alerts/common/alert_status.ts b/x-pack/plugins/alerts/common/alert_instance_summary.ts similarity index 95% rename from x-pack/plugins/alerts/common/alert_status.ts rename to x-pack/plugins/alerts/common/alert_instance_summary.ts index 517db6d6cb243..333db3ccda963 100644 --- a/x-pack/plugins/alerts/common/alert_status.ts +++ b/x-pack/plugins/alerts/common/alert_instance_summary.ts @@ -7,7 +7,7 @@ type AlertStatusValues = 'OK' | 'Active' | 'Error'; type AlertInstanceStatusValues = 'OK' | 'Active'; -export interface AlertStatus { +export interface AlertInstanceSummary { id: string; name: string; tags: string[]; diff --git a/x-pack/plugins/alerts/common/index.ts b/x-pack/plugins/alerts/common/index.ts index 0922e164a3aa3..ab71f77a049f6 100644 --- a/x-pack/plugins/alerts/common/index.ts +++ b/x-pack/plugins/alerts/common/index.ts @@ -9,7 +9,7 @@ export * from './alert_type'; export * from './alert_instance'; export * from './alert_task_instance'; export * from './alert_navigation'; -export * from './alert_status'; +export * from './alert_instance_summary'; export interface ActionGroup { id: string; diff --git a/x-pack/plugins/alerts/server/alerts_client.mock.ts b/x-pack/plugins/alerts/server/alerts_client.mock.ts index b61139ae72c99..b28e9f805f725 100644 --- a/x-pack/plugins/alerts/server/alerts_client.mock.ts +++ b/x-pack/plugins/alerts/server/alerts_client.mock.ts @@ -25,7 +25,7 @@ const createAlertsClientMock = () => { muteInstance: jest.fn(), unmuteInstance: jest.fn(), listAlertTypes: jest.fn(), - getAlertStatus: jest.fn(), + getAlertInstanceSummary: jest.fn(), }; return mocked; }; diff --git a/x-pack/plugins/alerts/server/alerts_client.test.ts b/x-pack/plugins/alerts/server/alerts_client.test.ts index f4aef62657abc..801c2c8775361 100644 --- a/x-pack/plugins/alerts/server/alerts_client.test.ts +++ b/x-pack/plugins/alerts/server/alerts_client.test.ts @@ -20,7 +20,7 @@ import { ActionsAuthorization } from '../../actions/server'; import { eventLogClientMock } from '../../event_log/server/mocks'; import { QueryEventsBySavedObjectResult } from '../../event_log/server'; import { SavedObject } from 'kibana/server'; -import { EventsFactory } from './lib/alert_status_from_event_log.test'; +import { EventsFactory } from './lib/alert_instance_summary_from_event_log.test'; const taskManager = taskManagerMock.start(); const alertTypeRegistry = alertTypeRegistryMock.create(); @@ -2382,16 +2382,16 @@ describe('getAlertState()', () => { }); }); -const AlertStatusFindEventsResult: QueryEventsBySavedObjectResult = { +const AlertInstanceSummaryFindEventsResult: QueryEventsBySavedObjectResult = { page: 1, per_page: 10000, total: 0, data: [], }; -const AlertStatusIntervalSeconds = 1; +const AlertInstanceSummaryIntervalSeconds = 1; -const BaseAlertStatusSavedObject: SavedObject = { +const BaseAlertInstanceSummarySavedObject: SavedObject = { id: '1', type: 'alert', attributes: { @@ -2400,7 +2400,7 @@ const BaseAlertStatusSavedObject: SavedObject = { tags: ['tag-1', 'tag-2'], alertTypeId: '123', consumer: 'alert-consumer', - schedule: { interval: `${AlertStatusIntervalSeconds}s` }, + schedule: { interval: `${AlertInstanceSummaryIntervalSeconds}s` }, actions: [], params: {}, createdBy: null, @@ -2415,14 +2415,16 @@ const BaseAlertStatusSavedObject: SavedObject = { references: [], }; -function getAlertStatusSavedObject(attributes: Partial = {}): SavedObject { +function getAlertInstanceSummarySavedObject( + attributes: Partial = {} +): SavedObject { return { - ...BaseAlertStatusSavedObject, - attributes: { ...BaseAlertStatusSavedObject.attributes, ...attributes }, + ...BaseAlertInstanceSummarySavedObject, + attributes: { ...BaseAlertInstanceSummarySavedObject.attributes, ...attributes }, }; } -describe('getAlertStatus()', () => { +describe('getAlertInstanceSummary()', () => { let alertsClient: AlertsClient; beforeEach(() => { @@ -2430,7 +2432,9 @@ describe('getAlertStatus()', () => { }); test('runs as expected with some event log data', async () => { - const alertSO = getAlertStatusSavedObject({ mutedInstanceIds: ['instance-muted-no-activity'] }); + const alertSO = getAlertInstanceSummarySavedObject({ + mutedInstanceIds: ['instance-muted-no-activity'], + }); unsecuredSavedObjectsClient.get.mockResolvedValueOnce(alertSO); const eventsFactory = new EventsFactory(mockedDateString); @@ -2446,7 +2450,7 @@ describe('getAlertStatus()', () => { .addActiveInstance('instance-currently-active') .getEvents(); const eventsResult = { - ...AlertStatusFindEventsResult, + ...AlertInstanceSummaryFindEventsResult, total: events.length, data: events, }; @@ -2454,7 +2458,7 @@ describe('getAlertStatus()', () => { const dateStart = new Date(Date.now() - 60 * 1000).toISOString(); - const result = await alertsClient.getAlertStatus({ id: '1', dateStart }); + const result = await alertsClient.getAlertInstanceSummary({ id: '1', dateStart }); expect(result).toMatchInlineSnapshot(` Object { "alertTypeId": "123", @@ -2494,16 +2498,18 @@ describe('getAlertStatus()', () => { `); }); - // Further tests don't check the result of `getAlertStatus()`, as the result - // is just the result from the `alertStatusFromEventLog()`, which itself + // Further tests don't check the result of `getAlertInstanceSummary()`, as the result + // is just the result from the `alertInstanceSummaryFromEventLog()`, which itself // has a complete set of tests. These tests just make sure the data gets - // sent into `getAlertStatus()` as appropriate. + // sent into `getAlertInstanceSummary()` as appropriate. test('calls saved objects and event log client with default params', async () => { - unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertStatusSavedObject()); - eventLogClient.findEventsBySavedObject.mockResolvedValueOnce(AlertStatusFindEventsResult); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertInstanceSummarySavedObject()); + eventLogClient.findEventsBySavedObject.mockResolvedValueOnce( + AlertInstanceSummaryFindEventsResult + ); - await alertsClient.getAlertStatus({ id: '1' }); + await alertsClient.getAlertInstanceSummary({ id: '1' }); expect(unsecuredSavedObjectsClient.get).toHaveBeenCalledTimes(1); expect(eventLogClient.findEventsBySavedObject).toHaveBeenCalledTimes(1); @@ -2526,17 +2532,21 @@ describe('getAlertStatus()', () => { const startMillis = Date.parse(start!); const endMillis = Date.parse(end!); - const expectedDuration = 60 * AlertStatusIntervalSeconds * 1000; + const expectedDuration = 60 * AlertInstanceSummaryIntervalSeconds * 1000; expect(endMillis - startMillis).toBeGreaterThan(expectedDuration - 2); expect(endMillis - startMillis).toBeLessThan(expectedDuration + 2); }); test('calls event log client with start date', async () => { - unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertStatusSavedObject()); - eventLogClient.findEventsBySavedObject.mockResolvedValueOnce(AlertStatusFindEventsResult); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertInstanceSummarySavedObject()); + eventLogClient.findEventsBySavedObject.mockResolvedValueOnce( + AlertInstanceSummaryFindEventsResult + ); - const dateStart = new Date(Date.now() - 60 * AlertStatusIntervalSeconds * 1000).toISOString(); - await alertsClient.getAlertStatus({ id: '1', dateStart }); + const dateStart = new Date( + Date.now() - 60 * AlertInstanceSummaryIntervalSeconds * 1000 + ).toISOString(); + await alertsClient.getAlertInstanceSummary({ id: '1', dateStart }); expect(unsecuredSavedObjectsClient.get).toHaveBeenCalledTimes(1); expect(eventLogClient.findEventsBySavedObject).toHaveBeenCalledTimes(1); @@ -2551,11 +2561,13 @@ describe('getAlertStatus()', () => { }); test('calls event log client with relative start date', async () => { - unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertStatusSavedObject()); - eventLogClient.findEventsBySavedObject.mockResolvedValueOnce(AlertStatusFindEventsResult); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertInstanceSummarySavedObject()); + eventLogClient.findEventsBySavedObject.mockResolvedValueOnce( + AlertInstanceSummaryFindEventsResult + ); const dateStart = '2m'; - await alertsClient.getAlertStatus({ id: '1', dateStart }); + await alertsClient.getAlertInstanceSummary({ id: '1', dateStart }); expect(unsecuredSavedObjectsClient.get).toHaveBeenCalledTimes(1); expect(eventLogClient.findEventsBySavedObject).toHaveBeenCalledTimes(1); @@ -2570,28 +2582,36 @@ describe('getAlertStatus()', () => { }); test('invalid start date throws an error', async () => { - unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertStatusSavedObject()); - eventLogClient.findEventsBySavedObject.mockResolvedValueOnce(AlertStatusFindEventsResult); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertInstanceSummarySavedObject()); + eventLogClient.findEventsBySavedObject.mockResolvedValueOnce( + AlertInstanceSummaryFindEventsResult + ); const dateStart = 'ain"t no way this will get parsed as a date'; - expect(alertsClient.getAlertStatus({ id: '1', dateStart })).rejects.toMatchInlineSnapshot( + expect( + alertsClient.getAlertInstanceSummary({ id: '1', dateStart }) + ).rejects.toMatchInlineSnapshot( `[Error: Invalid date for parameter dateStart: "ain"t no way this will get parsed as a date"]` ); }); test('saved object get throws an error', async () => { unsecuredSavedObjectsClient.get.mockRejectedValueOnce(new Error('OMG!')); - eventLogClient.findEventsBySavedObject.mockResolvedValueOnce(AlertStatusFindEventsResult); + eventLogClient.findEventsBySavedObject.mockResolvedValueOnce( + AlertInstanceSummaryFindEventsResult + ); - expect(alertsClient.getAlertStatus({ id: '1' })).rejects.toMatchInlineSnapshot(`[Error: OMG!]`); + expect(alertsClient.getAlertInstanceSummary({ id: '1' })).rejects.toMatchInlineSnapshot( + `[Error: OMG!]` + ); }); test('findEvents throws an error', async () => { - unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertStatusSavedObject()); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getAlertInstanceSummarySavedObject()); eventLogClient.findEventsBySavedObject.mockRejectedValueOnce(new Error('OMG 2!')); // error eaten but logged - await alertsClient.getAlertStatus({ id: '1' }); + await alertsClient.getAlertInstanceSummary({ id: '1' }); }); }); diff --git a/x-pack/plugins/alerts/server/alerts_client.ts b/x-pack/plugins/alerts/server/alerts_client.ts index 74aef644d58ca..0703a1e13937c 100644 --- a/x-pack/plugins/alerts/server/alerts_client.ts +++ b/x-pack/plugins/alerts/server/alerts_client.ts @@ -24,7 +24,7 @@ import { IntervalSchedule, SanitizedAlert, AlertTaskState, - AlertStatus, + AlertInstanceSummary, } from './types'; import { validateAlertTypeParams } from './lib'; import { @@ -44,7 +44,7 @@ import { } from './authorization/alerts_authorization'; import { IEventLogClient } from '../../../plugins/event_log/server'; import { parseIsoOrRelativeDate } from './lib/iso_or_relative_date'; -import { alertStatusFromEventLog } from './lib/alert_status_from_event_log'; +import { alertInstanceSummaryFromEventLog } from './lib/alert_instance_summary_from_event_log'; import { IEvent } from '../../event_log/server'; import { parseDuration } from '../common/parse_duration'; @@ -139,7 +139,7 @@ interface UpdateOptions { }; } -interface GetAlertStatusParams { +interface GetAlertInstanceSummaryParams { id: string; dateStart?: string; } @@ -284,16 +284,19 @@ export class AlertsClient { } } - public async getAlertStatus({ id, dateStart }: GetAlertStatusParams): Promise { - this.logger.debug(`getAlertStatus(): getting alert ${id}`); + public async getAlertInstanceSummary({ + id, + dateStart, + }: GetAlertInstanceSummaryParams): Promise { + this.logger.debug(`getAlertInstanceSummary(): getting alert ${id}`); const alert = await this.get({ id }); await this.authorization.ensureAuthorized( alert.alertTypeId, alert.consumer, - ReadOperations.GetAlertStatus + ReadOperations.GetAlertInstanceSummary ); - // default duration of status is 60 * alert interval + // default duration of instance summary is 60 * alert interval const dateNow = new Date(); const durationMillis = parseDuration(alert.schedule.interval) * 60; const defaultDateStart = new Date(dateNow.valueOf() - durationMillis); @@ -301,7 +304,7 @@ export class AlertsClient { const eventLogClient = await this.getEventLogClient(); - this.logger.debug(`getAlertStatus(): search the event log for alert ${id}`); + this.logger.debug(`getAlertInstanceSummary(): search the event log for alert ${id}`); let events: IEvent[]; try { const queryResults = await eventLogClient.findEventsBySavedObject('alert', id, { @@ -314,12 +317,12 @@ export class AlertsClient { events = queryResults.data; } catch (err) { this.logger.debug( - `alertsClient.getAlertStatus(): error searching event log for alert ${id}: ${err.message}` + `alertsClient.getAlertInstanceSummary(): error searching event log for alert ${id}: ${err.message}` ); events = []; } - return alertStatusFromEventLog({ + return alertInstanceSummaryFromEventLog({ alert, events, dateStart: parsedDateStart.toISOString(), @@ -952,7 +955,7 @@ function parseDate(dateString: string | undefined, propertyName: string, default const parsedDate = parseIsoOrRelativeDate(dateString); if (parsedDate === undefined) { throw Boom.badRequest( - i18n.translate('xpack.alerts.alertsClient.getAlertStatus.invalidDate', { + i18n.translate('xpack.alerts.alertsClient.invalidDate', { defaultMessage: 'Invalid date for parameter {field}: "{dateValue}"', values: { field: propertyName, diff --git a/x-pack/plugins/alerts/server/authorization/alerts_authorization.ts b/x-pack/plugins/alerts/server/authorization/alerts_authorization.ts index b2a214eae9316..b362a50c9f10b 100644 --- a/x-pack/plugins/alerts/server/authorization/alerts_authorization.ts +++ b/x-pack/plugins/alerts/server/authorization/alerts_authorization.ts @@ -18,7 +18,7 @@ import { Space } from '../../../spaces/server'; export enum ReadOperations { Get = 'get', GetAlertState = 'getAlertState', - GetAlertStatus = 'getAlertStatus', + GetAlertInstanceSummary = 'getAlertInstanceSummary', Find = 'find', } diff --git a/x-pack/plugins/alerts/server/lib/alert_status_from_event_log.test.ts b/x-pack/plugins/alerts/server/lib/alert_instance_summary_from_event_log.test.ts similarity index 83% rename from x-pack/plugins/alerts/server/lib/alert_status_from_event_log.test.ts rename to x-pack/plugins/alerts/server/lib/alert_instance_summary_from_event_log.test.ts index 15570d3032f24..b5936cf3577b3 100644 --- a/x-pack/plugins/alerts/server/lib/alert_status_from_event_log.test.ts +++ b/x-pack/plugins/alerts/server/lib/alert_instance_summary_from_event_log.test.ts @@ -4,22 +4,27 @@ * you may not use this file except in compliance with the Elastic License. */ -import { SanitizedAlert, AlertStatus } from '../types'; +import { SanitizedAlert, AlertInstanceSummary } from '../types'; import { IValidatedEvent } from '../../../event_log/server'; import { EVENT_LOG_ACTIONS, EVENT_LOG_PROVIDER } from '../plugin'; -import { alertStatusFromEventLog } from './alert_status_from_event_log'; +import { alertInstanceSummaryFromEventLog } from './alert_instance_summary_from_event_log'; const ONE_HOUR_IN_MILLIS = 60 * 60 * 1000; const dateStart = '2020-06-18T00:00:00.000Z'; const dateEnd = dateString(dateStart, ONE_HOUR_IN_MILLIS); -describe('alertStatusFromEventLog', () => { +describe('alertInstanceSummaryFromEventLog', () => { test('no events and muted ids', async () => { const alert = createAlert({}); const events: IValidatedEvent[] = []; - const status: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - expect(status).toMatchInlineSnapshot(` + expect(summary).toMatchInlineSnapshot(` Object { "alertTypeId": "123", "consumer": "alert-consumer", @@ -52,14 +57,14 @@ describe('alertStatusFromEventLog', () => { muteAll: true, }); const events: IValidatedEvent[] = []; - const status: AlertStatus = alertStatusFromEventLog({ + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ alert, events, dateStart: dateString(dateEnd, ONE_HOUR_IN_MILLIS), dateEnd: dateString(dateEnd, ONE_HOUR_IN_MILLIS * 2), }); - expect(status).toMatchInlineSnapshot(` + expect(summary).toMatchInlineSnapshot(` Object { "alertTypeId": "456", "consumer": "alert-consumer-2", @@ -87,9 +92,14 @@ describe('alertStatusFromEventLog', () => { mutedInstanceIds: ['instance-1', 'instance-2'], }); const events: IValidatedEvent[] = []; - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, instances } = alertStatus; + const { lastRun, status, instances } = summary; expect({ lastRun, status, instances }).toMatchInlineSnapshot(` Object { "instances": Object { @@ -115,9 +125,14 @@ describe('alertStatusFromEventLog', () => { const eventsFactory = new EventsFactory(); const events = eventsFactory.addExecute().advanceTime(10000).addExecute().getEvents(); - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, instances } = alertStatus; + const { lastRun, status, instances } = summary; expect({ lastRun, status, instances }).toMatchInlineSnapshot(` Object { "instances": Object {}, @@ -136,9 +151,14 @@ describe('alertStatusFromEventLog', () => { .addExecute('rut roh!') .getEvents(); - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, errorMessages, instances } = alertStatus; + const { lastRun, status, errorMessages, instances } = summary; expect({ lastRun, status, errorMessages, instances }).toMatchInlineSnapshot(` Object { "errorMessages": Array [ @@ -170,9 +190,14 @@ describe('alertStatusFromEventLog', () => { .addResolvedInstance('instance-1') .getEvents(); - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, instances } = alertStatus; + const { lastRun, status, instances } = summary; expect({ lastRun, status, instances }).toMatchInlineSnapshot(` Object { "instances": Object { @@ -199,9 +224,14 @@ describe('alertStatusFromEventLog', () => { .addResolvedInstance('instance-1') .getEvents(); - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, instances } = alertStatus; + const { lastRun, status, instances } = summary; expect({ lastRun, status, instances }).toMatchInlineSnapshot(` Object { "instances": Object { @@ -229,9 +259,14 @@ describe('alertStatusFromEventLog', () => { .addActiveInstance('instance-1') .getEvents(); - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, instances } = alertStatus; + const { lastRun, status, instances } = summary; expect({ lastRun, status, instances }).toMatchInlineSnapshot(` Object { "instances": Object { @@ -258,9 +293,14 @@ describe('alertStatusFromEventLog', () => { .addActiveInstance('instance-1') .getEvents(); - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, instances } = alertStatus; + const { lastRun, status, instances } = summary; expect({ lastRun, status, instances }).toMatchInlineSnapshot(` Object { "instances": Object { @@ -291,9 +331,14 @@ describe('alertStatusFromEventLog', () => { .addResolvedInstance('instance-2') .getEvents(); - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, instances } = alertStatus; + const { lastRun, status, instances } = summary; expect({ lastRun, status, instances }).toMatchInlineSnapshot(` Object { "instances": Object { @@ -335,9 +380,14 @@ describe('alertStatusFromEventLog', () => { .addActiveInstance('instance-1') .getEvents(); - const alertStatus: AlertStatus = alertStatusFromEventLog({ alert, events, dateStart, dateEnd }); + const summary: AlertInstanceSummary = alertInstanceSummaryFromEventLog({ + alert, + events, + dateStart, + dateEnd, + }); - const { lastRun, status, instances } = alertStatus; + const { lastRun, status, instances } = summary; expect({ lastRun, status, instances }).toMatchInlineSnapshot(` Object { "instances": Object { diff --git a/x-pack/plugins/alerts/server/lib/alert_status_from_event_log.ts b/x-pack/plugins/alerts/server/lib/alert_instance_summary_from_event_log.ts similarity index 79% rename from x-pack/plugins/alerts/server/lib/alert_status_from_event_log.ts rename to x-pack/plugins/alerts/server/lib/alert_instance_summary_from_event_log.ts index 606bd44c6990c..9a5e870c8199a 100644 --- a/x-pack/plugins/alerts/server/lib/alert_status_from_event_log.ts +++ b/x-pack/plugins/alerts/server/lib/alert_instance_summary_from_event_log.ts @@ -4,21 +4,23 @@ * you may not use this file except in compliance with the Elastic License. */ -import { SanitizedAlert, AlertStatus, AlertInstanceStatus } from '../types'; +import { SanitizedAlert, AlertInstanceSummary, AlertInstanceStatus } from '../types'; import { IEvent } from '../../../event_log/server'; import { EVENT_LOG_ACTIONS, EVENT_LOG_PROVIDER } from '../plugin'; -export interface AlertStatusFromEventLogParams { +export interface AlertInstanceSummaryFromEventLogParams { alert: SanitizedAlert; events: IEvent[]; dateStart: string; dateEnd: string; } -export function alertStatusFromEventLog(params: AlertStatusFromEventLogParams): AlertStatus { +export function alertInstanceSummaryFromEventLog( + params: AlertInstanceSummaryFromEventLogParams +): AlertInstanceSummary { // initialize the result const { alert, events, dateStart, dateEnd } = params; - const alertStatus: AlertStatus = { + const alertInstanceSummary: AlertInstanceSummary = { id: alert.id, name: alert.name, tags: alert.tags, @@ -50,17 +52,17 @@ export function alertStatusFromEventLog(params: AlertStatusFromEventLogParams): if (action === undefined) continue; if (action === EVENT_LOG_ACTIONS.execute) { - alertStatus.lastRun = timeStamp; + alertInstanceSummary.lastRun = timeStamp; const errorMessage = event?.error?.message; if (errorMessage !== undefined) { - alertStatus.status = 'Error'; - alertStatus.errorMessages.push({ + alertInstanceSummary.status = 'Error'; + alertInstanceSummary.errorMessages.push({ date: timeStamp, message: errorMessage, }); } else { - alertStatus.status = 'OK'; + alertInstanceSummary.status = 'OK'; } continue; @@ -91,19 +93,19 @@ export function alertStatusFromEventLog(params: AlertStatusFromEventLogParams): // convert the instances map to object form const instanceIds = Array.from(instances.keys()).sort(); for (const instanceId of instanceIds) { - alertStatus.instances[instanceId] = instances.get(instanceId)!; + alertInstanceSummary.instances[instanceId] = instances.get(instanceId)!; } // set the overall alert status to Active if appropriate - if (alertStatus.status !== 'Error') { + if (alertInstanceSummary.status !== 'Error') { if (Array.from(instances.values()).some((instance) => instance.status === 'Active')) { - alertStatus.status = 'Active'; + alertInstanceSummary.status = 'Active'; } } - alertStatus.errorMessages.sort((a, b) => a.date.localeCompare(b.date)); + alertInstanceSummary.errorMessages.sort((a, b) => a.date.localeCompare(b.date)); - return alertStatus; + return alertInstanceSummary; } // return an instance status object, creating and adding to the map if needed diff --git a/x-pack/plugins/alerts/server/plugin.ts b/x-pack/plugins/alerts/server/plugin.ts index b16ded9fb5c91..4f9b1f7c22e6d 100644 --- a/x-pack/plugins/alerts/server/plugin.ts +++ b/x-pack/plugins/alerts/server/plugin.ts @@ -38,7 +38,7 @@ import { findAlertRoute, getAlertRoute, getAlertStateRoute, - getAlertStatusRoute, + getAlertInstanceSummaryRoute, listAlertTypesRoute, updateAlertRoute, enableAlertRoute, @@ -193,7 +193,7 @@ export class AlertingPlugin { findAlertRoute(router, this.licenseState); getAlertRoute(router, this.licenseState); getAlertStateRoute(router, this.licenseState); - getAlertStatusRoute(router, this.licenseState); + getAlertInstanceSummaryRoute(router, this.licenseState); listAlertTypesRoute(router, this.licenseState); updateAlertRoute(router, this.licenseState); enableAlertRoute(router, this.licenseState); diff --git a/x-pack/plugins/alerts/server/routes/get_alert_status.test.ts b/x-pack/plugins/alerts/server/routes/get_alert_instance_summary.test.ts similarity index 75% rename from x-pack/plugins/alerts/server/routes/get_alert_status.test.ts rename to x-pack/plugins/alerts/server/routes/get_alert_instance_summary.test.ts index 1b4cb1941018b..8957a3d7c091e 100644 --- a/x-pack/plugins/alerts/server/routes/get_alert_status.test.ts +++ b/x-pack/plugins/alerts/server/routes/get_alert_instance_summary.test.ts @@ -4,13 +4,13 @@ * you may not use this file except in compliance with the Elastic License. */ -import { getAlertStatusRoute } from './get_alert_status'; +import { getAlertInstanceSummaryRoute } from './get_alert_instance_summary'; import { httpServiceMock } from 'src/core/server/mocks'; import { mockLicenseState } from '../lib/license_state.mock'; import { mockHandlerArguments } from './_mock_handler_arguments'; import { SavedObjectsErrorHelpers } from 'src/core/server'; import { alertsClientMock } from '../alerts_client.mock'; -import { AlertStatus } from '../types'; +import { AlertInstanceSummary } from '../types'; const alertsClient = alertsClientMock.create(); jest.mock('../lib/license_api_access.ts', () => ({ @@ -21,9 +21,9 @@ beforeEach(() => { jest.resetAllMocks(); }); -describe('getAlertStatusRoute', () => { +describe('getAlertInstanceSummaryRoute', () => { const dateString = new Date().toISOString(); - const mockedAlertStatus: AlertStatus = { + const mockedAlertInstanceSummary: AlertInstanceSummary = { id: '', name: '', tags: [], @@ -39,17 +39,17 @@ describe('getAlertStatusRoute', () => { instances: {}, }; - it('gets alert status', async () => { + it('gets alert instance summary', async () => { const licenseState = mockLicenseState(); const router = httpServiceMock.createRouter(); - getAlertStatusRoute(router, licenseState); + getAlertInstanceSummaryRoute(router, licenseState); const [config, handler] = router.get.mock.calls[0]; - expect(config.path).toMatchInlineSnapshot(`"/api/alerts/alert/{id}/status"`); + expect(config.path).toMatchInlineSnapshot(`"/api/alerts/alert/{id}/_instance_summary"`); - alertsClient.getAlertStatus.mockResolvedValueOnce(mockedAlertStatus); + alertsClient.getAlertInstanceSummary.mockResolvedValueOnce(mockedAlertInstanceSummary); const [context, req, res] = mockHandlerArguments( { alertsClient }, @@ -64,8 +64,8 @@ describe('getAlertStatusRoute', () => { await handler(context, req, res); - expect(alertsClient.getAlertStatus).toHaveBeenCalledTimes(1); - expect(alertsClient.getAlertStatus.mock.calls[0]).toMatchInlineSnapshot(` + expect(alertsClient.getAlertInstanceSummary).toHaveBeenCalledTimes(1); + expect(alertsClient.getAlertInstanceSummary.mock.calls[0]).toMatchInlineSnapshot(` Array [ Object { "dateStart": undefined, @@ -81,11 +81,11 @@ describe('getAlertStatusRoute', () => { const licenseState = mockLicenseState(); const router = httpServiceMock.createRouter(); - getAlertStatusRoute(router, licenseState); + getAlertInstanceSummaryRoute(router, licenseState); const [, handler] = router.get.mock.calls[0]; - alertsClient.getAlertStatus = jest + alertsClient.getAlertInstanceSummary = jest .fn() .mockResolvedValueOnce(SavedObjectsErrorHelpers.createGenericNotFoundError('alert', '1')); diff --git a/x-pack/plugins/alerts/server/routes/get_alert_status.ts b/x-pack/plugins/alerts/server/routes/get_alert_instance_summary.ts similarity index 83% rename from x-pack/plugins/alerts/server/routes/get_alert_status.ts rename to x-pack/plugins/alerts/server/routes/get_alert_instance_summary.ts index eab18c50189f4..11a10c2967a58 100644 --- a/x-pack/plugins/alerts/server/routes/get_alert_status.ts +++ b/x-pack/plugins/alerts/server/routes/get_alert_instance_summary.ts @@ -24,10 +24,10 @@ const querySchema = schema.object({ dateStart: schema.maybe(schema.string()), }); -export const getAlertStatusRoute = (router: IRouter, licenseState: LicenseState) => { +export const getAlertInstanceSummaryRoute = (router: IRouter, licenseState: LicenseState) => { router.get( { - path: `${BASE_ALERT_API_PATH}/alert/{id}/status`, + path: `${BASE_ALERT_API_PATH}/alert/{id}/_instance_summary`, validate: { params: paramSchema, query: querySchema, @@ -45,8 +45,8 @@ export const getAlertStatusRoute = (router: IRouter, licenseState: LicenseState) const alertsClient = context.alerting.getAlertsClient(); const { id } = req.params; const { dateStart } = req.query; - const status = await alertsClient.getAlertStatus({ id, dateStart }); - return res.ok({ body: status }); + const summary = await alertsClient.getAlertInstanceSummary({ id, dateStart }); + return res.ok({ body: summary }); }) ); }; diff --git a/x-pack/plugins/alerts/server/routes/index.ts b/x-pack/plugins/alerts/server/routes/index.ts index 4c6b1eb8e9b58..aed66e82d11f8 100644 --- a/x-pack/plugins/alerts/server/routes/index.ts +++ b/x-pack/plugins/alerts/server/routes/index.ts @@ -9,7 +9,7 @@ export { deleteAlertRoute } from './delete'; export { findAlertRoute } from './find'; export { getAlertRoute } from './get'; export { getAlertStateRoute } from './get_alert_state'; -export { getAlertStatusRoute } from './get_alert_status'; +export { getAlertInstanceSummaryRoute } from './get_alert_instance_summary'; export { listAlertTypesRoute } from './list_alert_types'; export { updateAlertRoute } from './update'; export { enableAlertRoute } from './enable'; diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts index 636082656f1a4..5e9c1818cad2b 100644 --- a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts +++ b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts @@ -74,7 +74,7 @@ describe(`feature_privilege_builder`, () => { Array [ "alerting:1.0.0-zeta1:alert-type/my-feature/get", "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertState", - "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertStatus", + "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertInstanceSummary", "alerting:1.0.0-zeta1:alert-type/my-feature/find", ] `); @@ -111,7 +111,7 @@ describe(`feature_privilege_builder`, () => { Array [ "alerting:1.0.0-zeta1:alert-type/my-feature/get", "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertState", - "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertStatus", + "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertInstanceSummary", "alerting:1.0.0-zeta1:alert-type/my-feature/find", "alerting:1.0.0-zeta1:alert-type/my-feature/create", "alerting:1.0.0-zeta1:alert-type/my-feature/delete", @@ -158,7 +158,7 @@ describe(`feature_privilege_builder`, () => { Array [ "alerting:1.0.0-zeta1:alert-type/my-feature/get", "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertState", - "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertStatus", + "alerting:1.0.0-zeta1:alert-type/my-feature/getAlertInstanceSummary", "alerting:1.0.0-zeta1:alert-type/my-feature/find", "alerting:1.0.0-zeta1:alert-type/my-feature/create", "alerting:1.0.0-zeta1:alert-type/my-feature/delete", @@ -172,7 +172,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:alert-type/my-feature/unmuteInstance", "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/get", "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/getAlertState", - "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/getAlertStatus", + "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/getAlertInstanceSummary", "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/find", ] `); diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts index 540b9e5c1e56e..eb278a5755204 100644 --- a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts +++ b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts @@ -8,7 +8,7 @@ import { uniq } from 'lodash'; import { Feature, FeatureKibanaPrivileges } from '../../../../../features/server'; import { BaseFeaturePrivilegeBuilder } from './feature_privilege_builder'; -const readOperations: string[] = ['get', 'getAlertState', 'getAlertStatus', 'find']; +const readOperations: string[] = ['get', 'getAlertState', 'getAlertInstanceSummary', 'find']; const writeOperations: string[] = [ 'create', 'delete', diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index ac23d1e62bcdf..8b9409f01087c 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -18251,7 +18251,6 @@ "xpack.triggersActionsUI.sections.alertDetails.collapsedItemActons.muteTitle": "ミュート", "xpack.triggersActionsUI.sections.alertDetails.editAlertButtonLabel": "編集", "xpack.triggersActionsUI.sections.alertDetails.unableToLoadAlertMessage": "アラートを読み込めません: {message}", - "xpack.triggersActionsUI.sections.alertDetails.unableToLoadAlertStateMessage": "アラートステートを読み込めません: {message}", "xpack.triggersActionsUI.sections.alertDetails.viewAlertInAppButtonLabel": "アプリで表示", "xpack.triggersActionsUI.sections.alertEdit.betaBadgeTooltipContent": "{pluginName} はベータ段階で、変更される可能性があります。デザインとコードはオフィシャル GA 機能よりも完成度が低く、現状のまま保証なしで提供されています。ベータ機能にはオフィシャル GA 機能の SLA が適用されません。", "xpack.triggersActionsUI.sections.alertEdit.cancelButtonLabel": "キャンセル", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 4d5e5c05cb795..b9fb6340e38cf 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -18262,7 +18262,6 @@ "xpack.triggersActionsUI.sections.alertDetails.collapsedItemActons.muteTitle": "静音", "xpack.triggersActionsUI.sections.alertDetails.editAlertButtonLabel": "编辑", "xpack.triggersActionsUI.sections.alertDetails.unableToLoadAlertMessage": "无法加载告警:{message}", - "xpack.triggersActionsUI.sections.alertDetails.unableToLoadAlertStateMessage": "无法加载告警状态:{message}", "xpack.triggersActionsUI.sections.alertDetails.viewAlertInAppButtonLabel": "在应用中查看", "xpack.triggersActionsUI.sections.alertEdit.betaBadgeTooltipContent": "{pluginName} 为公测版,可能会进行更改。设计和代码相对于正式发行版功能还不够成熟,将按原样提供,且不提供任何保证。公测版功能不受正式发行版功能支持 SLA 的约束。", "xpack.triggersActionsUI.sections.alertEdit.cancelButtonLabel": "取消", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/alert_api.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/alert_api.ts index 7dde344d06fb5..97feea6ba8a0f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/alert_api.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/alert_api.ts @@ -11,7 +11,13 @@ import { fold } from 'fp-ts/lib/Either'; import { pick } from 'lodash'; import { alertStateSchema, AlertingFrameworkHealth } from '../../../../alerts/common'; import { BASE_ALERT_API_PATH } from '../constants'; -import { Alert, AlertType, AlertWithoutId, AlertTaskState, AlertStatus } from '../../types'; +import { + Alert, + AlertType, + AlertWithoutId, + AlertTaskState, + AlertInstanceSummary, +} from '../../types'; export async function loadAlertTypes({ http }: { http: HttpSetup }): Promise { return await http.get(`${BASE_ALERT_API_PATH}/list_alert_types`); @@ -48,14 +54,14 @@ export async function loadAlertState({ }); } -export async function loadAlertStatus({ +export async function loadAlertInstanceSummary({ http, alertId, }: { http: HttpSetup; alertId: string; -}): Promise { - return await http.get(`${BASE_ALERT_API_PATH}/alert/${alertId}/status`); +}): Promise { + return await http.get(`${BASE_ALERT_API_PATH}/alert/${alertId}/_instance_summary`); } export async function loadAlerts({ diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.test.tsx index ff9b518a9f5b1..f59b836a7936e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.test.tsx @@ -7,7 +7,7 @@ import * as React from 'react'; import uuid from 'uuid'; import { shallow } from 'enzyme'; import { AlertInstances, AlertInstanceListItem, alertInstanceToListItem } from './alert_instances'; -import { Alert, AlertStatus, AlertInstanceStatus } from '../../../../types'; +import { Alert, AlertInstanceSummary, AlertInstanceStatus } from '../../../../types'; import { EuiBasicTable } from '@elastic/eui'; const fakeNow = new Date('2020-02-09T23:15:41.941Z'); @@ -34,7 +34,7 @@ jest.mock('../../../app_context', () => { describe('alert_instances', () => { it('render a list of alert instances', () => { const alert = mockAlert(); - const alertStatus = mockAlertStatus({ + const alertInstanceSummary = mockAlertInstanceSummary({ instances: { first_instance: { status: 'OK', @@ -52,19 +52,24 @@ describe('alert_instances', () => { fakeNow.getTime(), alert, 'first_instance', - alertStatus.instances.first_instance + alertInstanceSummary.instances.first_instance ), alertInstanceToListItem( fakeNow.getTime(), alert, 'second_instance', - alertStatus.instances.second_instance + alertInstanceSummary.instances.second_instance ), ]; expect( shallow( - + ) .find(EuiBasicTable) .prop('items') @@ -73,7 +78,7 @@ describe('alert_instances', () => { it('render a hidden field with duration epoch', () => { const alert = mockAlert(); - const alertStatus = mockAlertStatus(); + const alertInstanceSummary = mockAlertInstanceSummary(); expect( shallow( @@ -82,7 +87,7 @@ describe('alert_instances', () => { {...mockAPIs} alert={alert} readOnly={false} - alertStatus={alertStatus} + alertInstanceSummary={alertInstanceSummary} /> ) .find('[name="alertInstancesDurationEpoch"]') @@ -108,7 +113,7 @@ describe('alert_instances', () => { {...mockAPIs} alert={alert} readOnly={false} - alertStatus={mockAlertStatus({ + alertInstanceSummary={mockAlertInstanceSummary({ instances, })} /> @@ -134,7 +139,7 @@ describe('alert_instances', () => { {...mockAPIs} alert={alert} readOnly={false} - alertStatus={mockAlertStatus({ + alertInstanceSummary={mockAlertInstanceSummary({ instances: { 'us-west': { status: 'OK', @@ -253,8 +258,10 @@ function mockAlert(overloads: Partial = {}): Alert { }; } -function mockAlertStatus(overloads: Partial = {}): AlertStatus { - const status: AlertStatus = { +function mockAlertInstanceSummary( + overloads: Partial = {} +): AlertInstanceSummary { + const summary: AlertInstanceSummary = { id: 'alert-id', name: 'alert-name', tags: ['tag-1', 'tag-2'], @@ -274,5 +281,5 @@ function mockAlertStatus(overloads: Partial = {}): AlertStatus { }, }, }; - return { ...status, ...overloads }; + return { ...summary, ...overloads }; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.tsx index 77a3b454a1820..44d65eafc2412 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.tsx @@ -11,7 +11,7 @@ import { EuiBasicTable, EuiHealth, EuiSpacer, EuiSwitch } from '@elastic/eui'; // @ts-ignore import { RIGHT_ALIGNMENT, CENTER_ALIGNMENT } from '@elastic/eui/lib/services'; import { padStart, chunk } from 'lodash'; -import { Alert, AlertStatus, AlertInstanceStatus, Pagination } from '../../../../types'; +import { Alert, AlertInstanceSummary, AlertInstanceStatus, Pagination } from '../../../../types'; import { ComponentOpts as AlertApis, withBulkAlertOperations, @@ -21,7 +21,7 @@ import { DEFAULT_SEARCH_PAGE_SIZE } from '../../../constants'; type AlertInstancesProps = { alert: Alert; readOnly: boolean; - alertStatus: AlertStatus; + alertInstanceSummary: AlertInstanceSummary; requestRefresh: () => Promise; durationEpoch?: number; } & Pick; @@ -113,7 +113,7 @@ function durationAsString(duration: Duration): string { export function AlertInstances({ alert, readOnly, - alertStatus, + alertInstanceSummary, muteAlertInstance, unmuteAlertInstance, requestRefresh, @@ -124,7 +124,9 @@ export function AlertInstances({ size: DEFAULT_SEARCH_PAGE_SIZE, }); - const alertInstances = Object.entries(alertStatus.instances).map(([instanceId, instance]) => + const alertInstances = Object.entries( + alertInstanceSummary.instances + ).map(([instanceId, instance]) => alertInstanceToListItem(durationEpoch, alert, instanceId, instance) ); const pageOfAlertInstances = getPage(alertInstances, pagination); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances_route.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances_route.test.tsx index 61af8f5478521..d92148a8fea53 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances_route.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances_route.test.tsx @@ -7,8 +7,8 @@ import * as React from 'react'; import uuid from 'uuid'; import { shallow } from 'enzyme'; import { ToastsApi } from 'kibana/public'; -import { AlertInstancesRoute, getAlertStatus } from './alert_instances_route'; -import { Alert, AlertStatus } from '../../../../types'; +import { AlertInstancesRoute, getAlertInstanceSummary } from './alert_instances_route'; +import { Alert, AlertInstanceSummary } from '../../../../types'; import { EuiLoadingSpinner } from '@elastic/eui'; const fakeNow = new Date('2020-02-09T23:15:41.941Z'); @@ -20,7 +20,7 @@ jest.mock('../../../app_context', () => { useAppDependencies: jest.fn(() => ({ toastNotifications })), }; }); -describe('alert_status_route', () => { +describe('alert_instance_summary_route', () => { it('render a loader while fetching data', () => { const alert = mockAlert(); @@ -37,25 +37,30 @@ describe('getAlertState useEffect handler', () => { jest.clearAllMocks(); }); - it('fetches alert status', async () => { + it('fetches alert instance summary', async () => { const alert = mockAlert(); - const alertStatus = mockAlertStatus(); - const { loadAlertStatus } = mockApis(); - const { setAlertStatus } = mockStateSetter(); + const alertInstanceSummary = mockAlertInstanceSummary(); + const { loadAlertInstanceSummary } = mockApis(); + const { setAlertInstanceSummary } = mockStateSetter(); - loadAlertStatus.mockImplementationOnce(async () => alertStatus); + loadAlertInstanceSummary.mockImplementationOnce(async () => alertInstanceSummary); const toastNotifications = ({ addDanger: jest.fn(), } as unknown) as ToastsApi; - await getAlertStatus(alert.id, loadAlertStatus, setAlertStatus, toastNotifications); + await getAlertInstanceSummary( + alert.id, + loadAlertInstanceSummary, + setAlertInstanceSummary, + toastNotifications + ); - expect(loadAlertStatus).toHaveBeenCalledWith(alert.id); - expect(setAlertStatus).toHaveBeenCalledWith(alertStatus); + expect(loadAlertInstanceSummary).toHaveBeenCalledWith(alert.id); + expect(setAlertInstanceSummary).toHaveBeenCalledWith(alertInstanceSummary); }); - it('displays an error if the alert status isnt found', async () => { + it('displays an error if the alert instance summary isnt found', async () => { const actionType = { id: '.server-log', name: 'Server log', @@ -72,34 +77,39 @@ describe('getAlertState useEffect handler', () => { ], }); - const { loadAlertStatus } = mockApis(); - const { setAlertStatus } = mockStateSetter(); + const { loadAlertInstanceSummary } = mockApis(); + const { setAlertInstanceSummary } = mockStateSetter(); - loadAlertStatus.mockImplementation(async () => { + loadAlertInstanceSummary.mockImplementation(async () => { throw new Error('OMG'); }); const toastNotifications = ({ addDanger: jest.fn(), } as unknown) as ToastsApi; - await getAlertStatus(alert.id, loadAlertStatus, setAlertStatus, toastNotifications); + await getAlertInstanceSummary( + alert.id, + loadAlertInstanceSummary, + setAlertInstanceSummary, + toastNotifications + ); expect(toastNotifications.addDanger).toHaveBeenCalledTimes(1); expect(toastNotifications.addDanger).toHaveBeenCalledWith({ - title: 'Unable to load alert status: OMG', + title: 'Unable to load alert instance summary: OMG', }); }); }); function mockApis() { return { - loadAlertStatus: jest.fn(), + loadAlertInstanceSummary: jest.fn(), requestRefresh: jest.fn(), }; } function mockStateSetter() { return { - setAlertStatus: jest.fn(), + setAlertInstanceSummary: jest.fn(), }; } @@ -126,8 +136,8 @@ function mockAlert(overloads: Partial = {}): Alert { }; } -function mockAlertStatus(overloads: Partial = {}): any { - const status: AlertStatus = { +function mockAlertInstanceSummary(overloads: Partial = {}): any { + const summary: AlertInstanceSummary = { id: 'alert-id', name: 'alert-name', tags: ['tag-1', 'tag-2'], @@ -147,5 +157,5 @@ function mockAlertStatus(overloads: Partial = {}): any { }, }, }; - return status; + return summary; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances_route.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances_route.tsx index 3afec45bcad64..9137a26a32dd4 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances_route.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances_route.tsx @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { ToastsApi } from 'kibana/public'; import React, { useState, useEffect } from 'react'; import { EuiLoadingSpinner } from '@elastic/eui'; -import { Alert, AlertStatus } from '../../../../types'; +import { Alert, AlertInstanceSummary } from '../../../../types'; import { useAppDependencies } from '../../../app_context'; import { ComponentOpts as AlertApis, @@ -16,33 +16,40 @@ import { } from '../../common/components/with_bulk_alert_api_operations'; import { AlertInstancesWithApi as AlertInstances } from './alert_instances'; -type WithAlertStatusProps = { +type WithAlertInstanceSummaryProps = { alert: Alert; readOnly: boolean; requestRefresh: () => Promise; -} & Pick; +} & Pick; -export const AlertInstancesRoute: React.FunctionComponent = ({ +export const AlertInstancesRoute: React.FunctionComponent = ({ alert, readOnly, requestRefresh, - loadAlertStatus: loadAlertStatus, + loadAlertInstanceSummary: loadAlertInstanceSummary, }) => { const { toastNotifications } = useAppDependencies(); - const [alertStatus, setAlertStatus] = useState(null); + const [alertInstanceSummary, setAlertInstanceSummary] = useState( + null + ); useEffect(() => { - getAlertStatus(alert.id, loadAlertStatus, setAlertStatus, toastNotifications); + getAlertInstanceSummary( + alert.id, + loadAlertInstanceSummary, + setAlertInstanceSummary, + toastNotifications + ); // eslint-disable-next-line react-hooks/exhaustive-deps }, [alert]); - return alertStatus ? ( + return alertInstanceSummary ? ( ) : (
); }; -export async function getAlertStatus( +export async function getAlertInstanceSummary( alertId: string, - loadAlertStatus: AlertApis['loadAlertStatus'], - setAlertStatus: React.Dispatch>, + loadAlertInstanceSummary: AlertApis['loadAlertInstanceSummary'], + setAlertInstanceSummary: React.Dispatch>, toastNotifications: Pick ) { try { - const loadedStatus = await loadAlertStatus(alertId); - setAlertStatus(loadedStatus); + const loadedInstanceSummary = await loadAlertInstanceSummary(alertId); + setAlertInstanceSummary(loadedInstanceSummary); } catch (e) { toastNotifications.addDanger({ title: i18n.translate( - 'xpack.triggersActionsUI.sections.alertDetails.unableToLoadAlertStateMessage', + 'xpack.triggersActionsUI.sections.alertDetails.unableToLoadAlertInstanceSummaryMessage', { - defaultMessage: 'Unable to load alert status: {message}', + defaultMessage: 'Unable to load alert instance summary: {message}', values: { message: e.message, }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_alert_api_operations.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_alert_api_operations.tsx index fd8b35a96bdf0..dc961482f182d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_alert_api_operations.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_alert_api_operations.tsx @@ -10,7 +10,7 @@ import { Alert, AlertType, AlertTaskState, - AlertStatus, + AlertInstanceSummary, AlertingFrameworkHealth, } from '../../../../types'; import { useAppDependencies } from '../../../app_context'; @@ -28,7 +28,7 @@ import { unmuteAlertInstance, loadAlert, loadAlertState, - loadAlertStatus, + loadAlertInstanceSummary, loadAlertTypes, health, } from '../../../lib/alert_api'; @@ -58,7 +58,7 @@ export interface ComponentOpts { }>; loadAlert: (id: Alert['id']) => Promise; loadAlertState: (id: Alert['id']) => Promise; - loadAlertStatus: (id: Alert['id']) => Promise; + loadAlertInstanceSummary: (id: Alert['id']) => Promise; loadAlertTypes: () => Promise; getHealth: () => Promise; } @@ -127,7 +127,9 @@ export function withBulkAlertOperations( deleteAlert={async (alert: Alert) => deleteAlerts({ http, ids: [alert.id] })} loadAlert={async (alertId: Alert['id']) => loadAlert({ http, alertId })} loadAlertState={async (alertId: Alert['id']) => loadAlertState({ http, alertId })} - loadAlertStatus={async (alertId: Alert['id']) => loadAlertStatus({ http, alertId })} + loadAlertInstanceSummary={async (alertId: Alert['id']) => + loadAlertInstanceSummary({ http, alertId }) + } loadAlertTypes={async () => loadAlertTypes({ http })} getHealth={async () => health({ http })} /> diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 0c0d99eed4e7b..762f41ba3691c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -12,7 +12,7 @@ import { SanitizedAlert as Alert, AlertAction, AlertTaskState, - AlertStatus, + AlertInstanceSummary, AlertInstanceStatus, RawAlertInstance, AlertingFrameworkHealth, @@ -21,7 +21,7 @@ export { Alert, AlertAction, AlertTaskState, - AlertStatus, + AlertInstanceSummary, AlertInstanceStatus, RawAlertInstance, AlertingFrameworkHealth, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/get_alert_status.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/get_alert_instance_summary.ts similarity index 90% rename from x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/get_alert_status.ts rename to x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/get_alert_instance_summary.ts index b700b5fb40b63..c8148f0c7a871 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/get_alert_status.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/get_alert_instance_summary.ts @@ -17,11 +17,11 @@ import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { UserAtSpaceScenarios } from '../../scenarios'; // eslint-disable-next-line import/no-default-export -export default function createGetAlertStatusTests({ getService }: FtrProviderContext) { +export default function createGetAlertInstanceSummaryTests({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); - describe('getAlertStatus', () => { + describe('getAlertInstanceSummary', () => { const objectRemover = new ObjectRemover(supertest); afterEach(() => objectRemover.removeAll()); @@ -29,7 +29,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon for (const scenario of UserAtSpaceScenarios) { const { user, space } = scenario; describe(scenario.id, () => { - it('should handle getAlertStatus alert request appropriately', async () => { + it('should handle getAlertInstanceSummary alert request appropriately', async () => { const { body: createdAlert } = await supertest .post(`${getUrlPrefix(space.id)}/api/alerts/alert`) .set('kbn-xsrf', 'foo') @@ -38,7 +38,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon objectRemover.add(space.id, createdAlert.id, 'alert', 'alerts'); const response = await supertestWithoutAuth - .get(`${getUrlPrefix(space.id)}/api/alerts/alert/${createdAlert.id}/status`) + .get(`${getUrlPrefix(space.id)}/api/alerts/alert/${createdAlert.id}/_instance_summary`) .auth(user.username, user.password); switch (scenario.id) { @@ -85,7 +85,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon } }); - it('should handle getAlertStatus alert request appropriately when unauthorized', async () => { + it('should handle getAlertInstanceSummary alert request appropriately when unauthorized', async () => { const { body: createdAlert } = await supertest .post(`${getUrlPrefix(space.id)}/api/alerts/alert`) .set('kbn-xsrf', 'foo') @@ -99,7 +99,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon objectRemover.add(space.id, createdAlert.id, 'alert', 'alerts'); const response = await supertestWithoutAuth - .get(`${getUrlPrefix(space.id)}/api/alerts/alert/${createdAlert.id}/status`) + .get(`${getUrlPrefix(space.id)}/api/alerts/alert/${createdAlert.id}/_instance_summary`) .auth(user.username, user.password); switch (scenario.id) { @@ -140,7 +140,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon } }); - it(`shouldn't getAlertStatus for an alert from another space`, async () => { + it(`shouldn't getAlertInstanceSummary for an alert from another space`, async () => { const { body: createdAlert } = await supertest .post(`${getUrlPrefix(space.id)}/api/alerts/alert`) .set('kbn-xsrf', 'foo') @@ -149,7 +149,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon objectRemover.add(space.id, createdAlert.id, 'alert', 'alerts'); const response = await supertestWithoutAuth - .get(`${getUrlPrefix('other')}/api/alerts/alert/${createdAlert.id}/status`) + .get(`${getUrlPrefix('other')}/api/alerts/alert/${createdAlert.id}/_instance_summary`) .auth(user.username, user.password); expect(response.statusCode).to.eql(404); @@ -172,9 +172,9 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon } }); - it(`should handle getAlertStatus request appropriately when alert doesn't exist`, async () => { + it(`should handle getAlertInstanceSummary request appropriately when alert doesn't exist`, async () => { const response = await supertestWithoutAuth - .get(`${getUrlPrefix(space.id)}/api/alerts/alert/1/status`) + .get(`${getUrlPrefix(space.id)}/api/alerts/alert/1/_instance_summary`) .auth(user.username, user.password); switch (scenario.id) { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts index 45fa075a65978..b03a3c8ccf6af 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/index.ts @@ -16,7 +16,7 @@ export default function alertingTests({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./enable')); loadTestFile(require.resolve('./get')); loadTestFile(require.resolve('./get_alert_state')); - loadTestFile(require.resolve('./get_alert_status')); + loadTestFile(require.resolve('./get_alert_instance_summary')); loadTestFile(require.resolve('./list_alert_types')); loadTestFile(require.resolve('./mute_all')); loadTestFile(require.resolve('./mute_instance')); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get_alert_status.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get_alert_instance_summary.ts similarity index 95% rename from x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get_alert_status.ts rename to x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get_alert_instance_summary.ts index 341313ce55c60..563127e028a62 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get_alert_status.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get_alert_instance_summary.ts @@ -18,20 +18,20 @@ import { import { FtrProviderContext } from '../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export -export default function createGetAlertStatusTests({ getService }: FtrProviderContext) { +export default function createGetAlertInstanceSummaryTests({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); const retry = getService('retry'); const alertUtils = new AlertUtils({ space: Spaces.space1, supertestWithoutAuth }); - describe('getAlertStatus', () => { + describe('getAlertInstanceSummary', () => { const objectRemover = new ObjectRemover(supertest); afterEach(() => objectRemover.removeAll()); it(`handles non-existant alert`, async () => { await supertest - .get(`${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/1/status`) + .get(`${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/1/_instance_summary`) .expect(404, { statusCode: 404, error: 'Not Found', @@ -49,7 +49,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon await waitForEvents(createdAlert.id, ['execute']); const response = await supertest.get( - `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/status` + `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/_instance_summary` ); expect(response.status).to.eql(200); @@ -82,7 +82,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon objectRemover.add(Spaces.space1.id, createdAlert.id, 'alert', 'alerts'); const response = await supertest.get( - `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/status` + `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/_instance_summary` ); expect(response.status).to.eql(200); @@ -119,7 +119,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon const response = await supertest.get( `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${ createdAlert.id - }/status?dateStart=${dateStart}` + }/_instance_summary?dateStart=${dateStart}` ); expect(response.status).to.eql(200); const { statusStartDate, statusEndDate } = response.body; @@ -140,7 +140,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon const response = await supertest.get( `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${ createdAlert.id - }/status?dateStart=${dateStart}` + }/_instance_summary?dateStart=${dateStart}` ); expect(response.status).to.eql(400); expect(response.body).to.eql({ @@ -161,7 +161,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon await alertUtils.muteInstance(createdAlert.id, '1'); await waitForEvents(createdAlert.id, ['execute']); const response = await supertest.get( - `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/status` + `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/_instance_summary` ); expect(response.status).to.eql(200); @@ -184,7 +184,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon await waitForEvents(createdAlert.id, ['execute']); const response = await supertest.get( - `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/status` + `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/_instance_summary` ); const { errorMessages } = response.body; expect(errorMessages.length).to.be.greaterThan(0); @@ -218,7 +218,7 @@ export default function createGetAlertStatusTests({ getService }: FtrProviderCon await alertUtils.muteInstance(createdAlert.id, 'instanceD'); await waitForEvents(createdAlert.id, ['new-instance', 'resolved-instance']); const response = await supertest.get( - `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/status` + `${getUrlPrefix(Spaces.space1.id)}/api/alerts/alert/${createdAlert.id}/_instance_summary` ); const actualInstances = response.body.instances; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts index 78ca2af12ec3f..3a3fed22f0206 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts @@ -16,7 +16,7 @@ export default function alertingTests({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./find')); loadTestFile(require.resolve('./get')); loadTestFile(require.resolve('./get_alert_state')); - loadTestFile(require.resolve('./get_alert_status')); + loadTestFile(require.resolve('./get_alert_instance_summary')); loadTestFile(require.resolve('./list_alert_types')); loadTestFile(require.resolve('./event_log')); loadTestFile(require.resolve('./mute_all')); diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts index 1579d041c9f58..4c97c8556d7df 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts @@ -361,7 +361,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // await first run to complete so we have an initial state await retry.try(async () => { - const { instances: alertInstances } = await alerting.alerts.getAlertStatus(alert.id); + const { instances: alertInstances } = await alerting.alerts.getAlertInstanceSummary( + alert.id + ); expect(Object.keys(alertInstances).length).to.eql(instances.length); }); }); @@ -373,10 +375,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // Verify content await testSubjects.existOrFail('alertInstancesList'); - const status = await alerting.alerts.getAlertStatus(alert.id); + const summary = await alerting.alerts.getAlertInstanceSummary(alert.id); const dateOnAllInstancesFromApiResponse = mapValues( - status.instances, + summary.instances, (instance) => instance.activeStartDate ); @@ -570,7 +572,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // await first run to complete so we have an initial state await retry.try(async () => { - const { instances: alertInstances } = await alerting.alerts.getAlertStatus(alert.id); + const { instances: alertInstances } = await alerting.alerts.getAlertInstanceSummary( + alert.id + ); expect(Object.keys(alertInstances).length).to.eql(instances.length); }); @@ -591,7 +595,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // Verify content await testSubjects.existOrFail('alertInstancesList'); - const { instances: alertInstances } = await alerting.alerts.getAlertStatus(alert.id); + const { instances: alertInstances } = await alerting.alerts.getAlertInstanceSummary( + alert.id + ); const items = await pageObjects.alertDetailsUI.getAlertInstancesList(); expect(items.length).to.eql(PAGE_SIZE); @@ -604,7 +610,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // Verify content await testSubjects.existOrFail('alertInstancesList'); - const { instances: alertInstances } = await alerting.alerts.getAlertStatus(alert.id); + const { instances: alertInstances } = await alerting.alerts.getAlertInstanceSummary( + alert.id + ); await pageObjects.alertDetailsUI.clickPaginationNextPage(); diff --git a/x-pack/test/functional_with_es_ssl/services/alerting/alerts.ts b/x-pack/test/functional_with_es_ssl/services/alerting/alerts.ts index c6fbdecf77f16..942b352b4afd3 100644 --- a/x-pack/test/functional_with_es_ssl/services/alerting/alerts.ts +++ b/x-pack/test/functional_with_es_ssl/services/alerting/alerts.ts @@ -8,7 +8,7 @@ import axios, { AxiosInstance } from 'axios'; import util from 'util'; import { ToolingLog } from '@kbn/dev-utils'; -export interface AlertStatus { +export interface AlertInstanceSummary { status: string; muted: boolean; enabled: boolean; @@ -156,10 +156,10 @@ export class Alerts { this.log.debug(`deleted alert ${alert.id}`); } - public async getAlertStatus(id: string): Promise { + public async getAlertInstanceSummary(id: string): Promise { this.log.debug(`getting alert ${id} state`); - const { data } = await this.axios.get(`/api/alerts/alert/${id}/status`); + const { data } = await this.axios.get(`/api/alerts/alert/${id}/_instance_summary`); return data; } From 11e7d825ade2ee22169eb08d25fd5a6182511812 Mon Sep 17 00:00:00 2001 From: Nathan L Smith Date: Tue, 8 Sep 2020 11:24:12 -0500 Subject: [PATCH 30/58] Hook for breadcrumbs (#76736) Remove `UpdateBreadcrumbs` and `ProvideBreadcrumbs` components and replace with `useBreadcrumbs` hook. The logic and tests stay pretty much the same, but it's much clearer to see what's going on. Also: * Put some of the shared route-related interfaces in /public/application/routes instead of /public/components/app/Main. I plan to move more of the routing-related code here in the future. * Remove the `name` property for routes, since it wasn't being used. * Rename `Breadcrumbroute` to `APMRouteDefinition`. Part of #51963. --- .../plugins/apm/public/application/csmApp.tsx | 34 ++- .../plugins/apm/public/application/index.tsx | 5 +- .../apm/public/application/routes/index.tsx | 16 ++ .../app/Home/__snapshots__/Home.test.tsx.snap | 2 + .../app/Main/ProvideBreadcrumbs.test.tsx | 109 --------- .../app/Main/ProvideBreadcrumbs.tsx | 135 ----------- .../components/app/Main/UpdateBreadcrumbs.tsx | 90 -------- .../app/Main/route_config/index.tsx | 30 +-- .../app/Main/route_config/route_names.tsx | 31 --- .../ApmPluginContext/MockApmPluginContext.tsx | 1 + .../use_breadcrumbs.test.tsx} | 102 ++++----- .../apm/public/hooks/use_breadcrumbs.ts | 214 ++++++++++++++++++ 12 files changed, 303 insertions(+), 466 deletions(-) create mode 100644 x-pack/plugins/apm/public/application/routes/index.tsx delete mode 100644 x-pack/plugins/apm/public/components/app/Main/ProvideBreadcrumbs.test.tsx delete mode 100644 x-pack/plugins/apm/public/components/app/Main/ProvideBreadcrumbs.tsx delete mode 100644 x-pack/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.tsx delete mode 100644 x-pack/plugins/apm/public/components/app/Main/route_config/route_names.tsx rename x-pack/plugins/apm/public/{components/app/Main/UpdateBreadcrumbs.test.tsx => hooks/use_breadcrumbs.test.tsx} (65%) create mode 100644 x-pack/plugins/apm/public/hooks/use_breadcrumbs.ts diff --git a/x-pack/plugins/apm/public/application/csmApp.tsx b/x-pack/plugins/apm/public/application/csmApp.tsx index d76ed5c2100b2..cdfe42bd628cc 100644 --- a/x-pack/plugins/apm/public/application/csmApp.tsx +++ b/x-pack/plugins/apm/public/application/csmApp.tsx @@ -4,52 +4,51 @@ * you may not use this file except in compliance with the Elastic License. */ +import euiDarkVars from '@elastic/eui/dist/eui_theme_dark.json'; +import euiLightVars from '@elastic/eui/dist/eui_theme_light.json'; +import { AppMountParameters, CoreStart } from 'kibana/public'; import React from 'react'; import ReactDOM from 'react-dom'; import { Route, Router } from 'react-router-dom'; -import styled, { ThemeProvider, DefaultTheme } from 'styled-components'; -import euiDarkVars from '@elastic/eui/dist/eui_theme_dark.json'; -import euiLightVars from '@elastic/eui/dist/eui_theme_light.json'; -import { CoreStart, AppMountParameters } from 'kibana/public'; -import { ApmPluginSetupDeps } from '../plugin'; - +import 'react-vis/dist/style.css'; +import styled, { DefaultTheme, ThemeProvider } from 'styled-components'; import { KibanaContextProvider, - useUiSetting$, RedirectAppLinks, + useUiSetting$, } from '../../../../../src/plugins/kibana_react/public'; -import { px, units } from '../style/variables'; -import { UpdateBreadcrumbs } from '../components/app/Main/UpdateBreadcrumbs'; +import { APMRouteDefinition } from '../application/routes'; +import { renderAsRedirectTo } from '../components/app/Main/route_config'; import { ScrollToTopOnPathChange } from '../components/app/Main/ScrollToTopOnPathChange'; -import 'react-vis/dist/style.css'; import { RumHome } from '../components/app/RumDashboard/RumHome'; -import { ConfigSchema } from '../index'; -import { BreadcrumbRoute } from '../components/app/Main/ProvideBreadcrumbs'; -import { RouteName } from '../components/app/Main/route_config/route_names'; -import { renderAsRedirectTo } from '../components/app/Main/route_config'; import { ApmPluginContext } from '../context/ApmPluginContext'; -import { UrlParamsProvider } from '../context/UrlParamsContext'; import { LoadingIndicatorProvider } from '../context/LoadingIndicatorContext'; +import { UrlParamsProvider } from '../context/UrlParamsContext'; +import { useBreadcrumbs } from '../hooks/use_breadcrumbs'; +import { ConfigSchema } from '../index'; +import { ApmPluginSetupDeps } from '../plugin'; import { createCallApmApi } from '../services/rest/createCallApmApi'; +import { px, units } from '../style/variables'; const CsmMainContainer = styled.div` padding: ${px(units.plus)}; height: 100%; `; -export const rumRoutes: BreadcrumbRoute[] = [ +export const rumRoutes: APMRouteDefinition[] = [ { exact: true, path: '/', render: renderAsRedirectTo('/csm'), breadcrumb: 'Client Side Monitoring', - name: RouteName.CSM, }, ]; function CsmApp() { const [darkMode] = useUiSetting$('theme:darkMode'); + useBreadcrumbs(rumRoutes); + return ( ({ @@ -59,7 +58,6 @@ function CsmApp() { })} > - diff --git a/x-pack/plugins/apm/public/application/index.tsx b/x-pack/plugins/apm/public/application/index.tsx index 2b0b3ddd98167..536d70b053f76 100644 --- a/x-pack/plugins/apm/public/application/index.tsx +++ b/x-pack/plugins/apm/public/application/index.tsx @@ -22,12 +22,12 @@ import { import { AlertsContextProvider } from '../../../triggers_actions_ui/public'; import { routes } from '../components/app/Main/route_config'; import { ScrollToTopOnPathChange } from '../components/app/Main/ScrollToTopOnPathChange'; -import { UpdateBreadcrumbs } from '../components/app/Main/UpdateBreadcrumbs'; import { ApmPluginContext } from '../context/ApmPluginContext'; import { LicenseProvider } from '../context/LicenseContext'; import { LoadingIndicatorProvider } from '../context/LoadingIndicatorContext'; import { LocationProvider } from '../context/LocationContext'; import { UrlParamsProvider } from '../context/UrlParamsContext'; +import { useBreadcrumbs } from '../hooks/use_breadcrumbs'; import { ApmPluginSetupDeps } from '../plugin'; import { createCallApmApi } from '../services/rest/createCallApmApi'; import { createStaticIndexPattern } from '../services/rest/index_pattern'; @@ -43,6 +43,8 @@ const MainContainer = styled.div` function App() { const [darkMode] = useUiSetting$('theme:darkMode'); + useBreadcrumbs(routes); + return ( ({ @@ -52,7 +54,6 @@ function App() { })} > - {routes.map((route, i) => ( diff --git a/x-pack/plugins/apm/public/application/routes/index.tsx b/x-pack/plugins/apm/public/application/routes/index.tsx new file mode 100644 index 0000000000000..d1bb8ae8fc8a3 --- /dev/null +++ b/x-pack/plugins/apm/public/application/routes/index.tsx @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { RouteComponentProps, RouteProps } from 'react-router-dom'; + +export type BreadcrumbTitle = + | string + | ((props: RouteComponentProps) => string) + | null; + +export interface APMRouteDefinition extends RouteProps { + breadcrumb: BreadcrumbTitle; +} diff --git a/x-pack/plugins/apm/public/components/app/Home/__snapshots__/Home.test.tsx.snap b/x-pack/plugins/apm/public/components/app/Home/__snapshots__/Home.test.tsx.snap index 24b51e3fba917..9706895b164a6 100644 --- a/x-pack/plugins/apm/public/components/app/Home/__snapshots__/Home.test.tsx.snap +++ b/x-pack/plugins/apm/public/components/app/Home/__snapshots__/Home.test.tsx.snap @@ -18,6 +18,7 @@ exports[`Home component should render services 1`] = ` "currentAppId$": Observable { "_isScalar": false, }, + "navigateToUrl": [Function], }, "chrome": Object { "docTitle": Object { @@ -78,6 +79,7 @@ exports[`Home component should render traces 1`] = ` "currentAppId$": Observable { "_isScalar": false, }, + "navigateToUrl": [Function], }, "chrome": Object { "docTitle": Object { diff --git a/x-pack/plugins/apm/public/components/app/Main/ProvideBreadcrumbs.test.tsx b/x-pack/plugins/apm/public/components/app/Main/ProvideBreadcrumbs.test.tsx deleted file mode 100644 index bf1cd75432ff5..0000000000000 --- a/x-pack/plugins/apm/public/components/app/Main/ProvideBreadcrumbs.test.tsx +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { Location } from 'history'; -import { BreadcrumbRoute, getBreadcrumbs } from './ProvideBreadcrumbs'; -import { RouteName } from './route_config/route_names'; - -describe('getBreadcrumbs', () => { - const getTestRoutes = (): BreadcrumbRoute[] => [ - { path: '/a', exact: true, breadcrumb: 'A', name: RouteName.HOME }, - { - path: '/a/ignored', - exact: true, - breadcrumb: 'Ignored Route', - name: RouteName.METRICS, - }, - { - path: '/a/:letter', - exact: true, - name: RouteName.SERVICE, - breadcrumb: ({ match }) => `Second level: ${match.params.letter}`, - }, - { - path: '/a/:letter/c', - exact: true, - name: RouteName.ERRORS, - breadcrumb: ({ match }) => `Third level: ${match.params.letter}`, - }, - ]; - - const getLocation = () => - ({ - pathname: '/a/b/c/', - } as Location); - - it('should return a set of matching breadcrumbs for a given path', () => { - const breadcrumbs = getBreadcrumbs({ - location: getLocation(), - routes: getTestRoutes(), - }); - - expect(breadcrumbs.map((b) => b.value)).toMatchInlineSnapshot(` -Array [ - "A", - "Second level: b", - "Third level: b", -] -`); - }); - - it('should skip breadcrumbs if breadcrumb is null', () => { - const location = getLocation(); - const routes = getTestRoutes(); - - routes[2].breadcrumb = null; - - const breadcrumbs = getBreadcrumbs({ - location, - routes, - }); - - expect(breadcrumbs.map((b) => b.value)).toMatchInlineSnapshot(` -Array [ - "A", - "Third level: b", -] -`); - }); - - it('should skip breadcrumbs if breadcrumb key is missing', () => { - const location = getLocation(); - const routes = getTestRoutes(); - - // @ts-expect-error - delete routes[2].breadcrumb; - - const breadcrumbs = getBreadcrumbs({ location, routes }); - - expect(breadcrumbs.map((b) => b.value)).toMatchInlineSnapshot(` -Array [ - "A", - "Third level: b", -] -`); - }); - - it('should produce matching breadcrumbs even if the pathname has a query string appended', () => { - const location = getLocation(); - const routes = getTestRoutes(); - - location.pathname += '?some=thing'; - - const breadcrumbs = getBreadcrumbs({ - location, - routes, - }); - - expect(breadcrumbs.map((b) => b.value)).toMatchInlineSnapshot(` -Array [ - "A", - "Second level: b", - "Third level: b", -] -`); - }); -}); diff --git a/x-pack/plugins/apm/public/components/app/Main/ProvideBreadcrumbs.tsx b/x-pack/plugins/apm/public/components/app/Main/ProvideBreadcrumbs.tsx deleted file mode 100644 index f2505b64fb1e3..0000000000000 --- a/x-pack/plugins/apm/public/components/app/Main/ProvideBreadcrumbs.tsx +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { Location } from 'history'; -import React from 'react'; -import { - matchPath, - RouteComponentProps, - RouteProps, - withRouter, -} from 'react-router-dom'; -import { RouteName } from './route_config/route_names'; - -type LocationMatch = Pick< - RouteComponentProps>, - 'location' | 'match' ->; - -type BreadcrumbFunction = (props: LocationMatch) => string; - -export interface BreadcrumbRoute extends RouteProps { - breadcrumb: string | BreadcrumbFunction | null; - name: RouteName; -} - -export interface Breadcrumb extends LocationMatch { - value: string; -} - -interface RenderProps extends RouteComponentProps { - breadcrumbs: Breadcrumb[]; -} - -interface ProvideBreadcrumbsProps extends RouteComponentProps { - routes: BreadcrumbRoute[]; - render: (props: RenderProps) => React.ReactElement | null; -} - -interface ParseOptions extends LocationMatch { - breadcrumb: string | BreadcrumbFunction; -} - -const parse = (options: ParseOptions) => { - const { breadcrumb, match, location } = options; - let value; - - if (typeof breadcrumb === 'function') { - value = breadcrumb({ match, location }); - } else { - value = breadcrumb; - } - - return { value, match, location }; -}; - -export function getBreadcrumb({ - location, - currentPath, - routes, -}: { - location: Location; - currentPath: string; - routes: BreadcrumbRoute[]; -}) { - return routes.reduce((found, { breadcrumb, ...route }) => { - if (found) { - return found; - } - - if (!breadcrumb) { - return null; - } - - const match = matchPath>(currentPath, route); - - if (match) { - return parse({ - breadcrumb, - match, - location, - }); - } - - return null; - }, null); -} - -export function getBreadcrumbs({ - routes, - location, -}: { - routes: BreadcrumbRoute[]; - location: Location; -}) { - const breadcrumbs: Breadcrumb[] = []; - const { pathname } = location; - - pathname - .split('?')[0] - .replace(/\/$/, '') - .split('/') - .reduce((acc, next) => { - // `/1/2/3` results in match checks for `/1`, `/1/2`, `/1/2/3`. - const currentPath = !next ? '/' : `${acc}/${next}`; - const breadcrumb = getBreadcrumb({ - location, - currentPath, - routes, - }); - - if (breadcrumb) { - breadcrumbs.push(breadcrumb); - } - - return currentPath === '/' ? '' : currentPath; - }, ''); - - return breadcrumbs; -} - -function ProvideBreadcrumbsComponent({ - routes = [], - render, - location, - match, - history, -}: ProvideBreadcrumbsProps) { - const breadcrumbs = getBreadcrumbs({ routes, location }); - return render({ breadcrumbs, location, match, history }); -} - -export const ProvideBreadcrumbs = withRouter(ProvideBreadcrumbsComponent); diff --git a/x-pack/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.tsx b/x-pack/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.tsx deleted file mode 100644 index 5bf5cea587f93..0000000000000 --- a/x-pack/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.tsx +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { Location } from 'history'; -import React, { MouseEvent } from 'react'; -import { CoreStart } from 'src/core/public'; -import { useApmPluginContext } from '../../../hooks/useApmPluginContext'; -import { getAPMHref } from '../../shared/Links/apm/APMLink'; -import { - Breadcrumb, - BreadcrumbRoute, - ProvideBreadcrumbs, -} from './ProvideBreadcrumbs'; - -interface Props { - location: Location; - breadcrumbs: Breadcrumb[]; - core: CoreStart; -} - -function getTitleFromBreadCrumbs(breadcrumbs: Breadcrumb[]) { - return breadcrumbs.map(({ value }) => value).reverse(); -} - -class UpdateBreadcrumbsComponent extends React.Component { - public updateHeaderBreadcrumbs() { - const { basePath } = this.props.core.http; - const breadcrumbs = this.props.breadcrumbs.map( - ({ value, match }, index) => { - const { search } = this.props.location; - const isLastBreadcrumbItem = - index === this.props.breadcrumbs.length - 1; - const href = isLastBreadcrumbItem - ? undefined // makes the breadcrumb item not clickable - : getAPMHref({ basePath, path: match.url, search }); - return { - text: value, - href, - onClick: (event: MouseEvent) => { - if (href) { - event.preventDefault(); - this.props.core.application.navigateToUrl(href); - } - }, - }; - } - ); - - this.props.core.chrome.docTitle.change( - getTitleFromBreadCrumbs(this.props.breadcrumbs) - ); - this.props.core.chrome.setBreadcrumbs(breadcrumbs); - } - - public componentDidMount() { - this.updateHeaderBreadcrumbs(); - } - - public componentDidUpdate() { - this.updateHeaderBreadcrumbs(); - } - - public render() { - return null; - } -} - -interface UpdateBreadcrumbsProps { - routes: BreadcrumbRoute[]; -} - -export function UpdateBreadcrumbs({ routes }: UpdateBreadcrumbsProps) { - const { core } = useApmPluginContext(); - - return ( - ( - - )} - /> - ); -} diff --git a/x-pack/plugins/apm/public/components/app/Main/route_config/index.tsx b/x-pack/plugins/apm/public/components/app/Main/route_config/index.tsx index 1fe5f17c39985..0cefcbdc54228 100644 --- a/x-pack/plugins/apm/public/components/app/Main/route_config/index.tsx +++ b/x-pack/plugins/apm/public/components/app/Main/route_config/index.tsx @@ -9,6 +9,7 @@ import React from 'react'; import { Redirect, RouteComponentProps } from 'react-router-dom'; import { UNIDENTIFIED_SERVICE_NODES_LABEL } from '../../../../../common/i18n'; import { SERVICE_NODE_NAME_MISSING } from '../../../../../common/service_nodes'; +import { APMRouteDefinition } from '../../../../application/routes'; import { toQuery } from '../../../shared/Links/url_helpers'; import { ErrorGroupDetails } from '../../ErrorGroupDetails'; import { Home } from '../../Home'; @@ -21,12 +22,10 @@ import { ApmIndices } from '../../Settings/ApmIndices'; import { CustomizeUI } from '../../Settings/CustomizeUI'; import { TraceLink } from '../../TraceLink'; import { TransactionDetails } from '../../TransactionDetails'; -import { BreadcrumbRoute } from '../ProvideBreadcrumbs'; import { CreateAgentConfigurationRouteHandler, EditAgentConfigurationRouteHandler, } from './route_handlers/agent_configuration'; -import { RouteName } from './route_names'; /** * Given a path, redirect to that location, preserving the search and maintaining @@ -150,13 +149,12 @@ function SettingsCustomizeUI() { * The array of route definitions to be used when the application * creates the routes. */ -export const routes: BreadcrumbRoute[] = [ +export const routes: APMRouteDefinition[] = [ { exact: true, path: '/', component: renderAsRedirectTo('/services'), breadcrumb: 'APM', - name: RouteName.HOME, }, { exact: true, @@ -165,7 +163,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.servicesTitle', { defaultMessage: 'Services', }), - name: RouteName.SERVICES, }, { exact: true, @@ -174,7 +171,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.tracesTitle', { defaultMessage: 'Traces', }), - name: RouteName.TRACES, }, { exact: true, @@ -183,7 +179,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.listSettingsTitle', { defaultMessage: 'Settings', }), - name: RouteName.SETTINGS, }, { exact: true, @@ -192,7 +187,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.settings.indicesTitle', { defaultMessage: 'Indices', }), - name: RouteName.INDICES, }, { exact: true, @@ -202,7 +196,6 @@ export const routes: BreadcrumbRoute[] = [ 'xpack.apm.breadcrumb.settings.agentConfigurationTitle', { defaultMessage: 'Agent Configuration' } ), - name: RouteName.AGENT_CONFIGURATION, }, { exact: true, @@ -211,7 +204,6 @@ export const routes: BreadcrumbRoute[] = [ 'xpack.apm.breadcrumb.settings.createAgentConfigurationTitle', { defaultMessage: 'Create Agent Configuration' } ), - name: RouteName.AGENT_CONFIGURATION_CREATE, component: CreateAgentConfigurationRouteHandler, }, { @@ -221,7 +213,6 @@ export const routes: BreadcrumbRoute[] = [ 'xpack.apm.breadcrumb.settings.editAgentConfigurationTitle', { defaultMessage: 'Edit Agent Configuration' } ), - name: RouteName.AGENT_CONFIGURATION_EDIT, component: EditAgentConfigurationRouteHandler, }, { @@ -232,16 +223,14 @@ export const routes: BreadcrumbRoute[] = [ renderAsRedirectTo( `/services/${props.match.params.serviceName}/transactions` )(props), - name: RouteName.SERVICE, - }, + } as APMRouteDefinition<{ serviceName: string }>, // errors { exact: true, path: '/services/:serviceName/errors/:groupId', component: ErrorGroupDetails, breadcrumb: ({ match }) => match.params.groupId, - name: RouteName.ERROR, - }, + } as APMRouteDefinition<{ groupId: string; serviceName: string }>, { exact: true, path: '/services/:serviceName/errors', @@ -249,7 +238,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.errorsTitle', { defaultMessage: 'Errors', }), - name: RouteName.ERRORS, }, // transactions { @@ -259,7 +247,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.transactionsTitle', { defaultMessage: 'Transactions', }), - name: RouteName.TRANSACTIONS, }, // metrics { @@ -269,7 +256,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.metricsTitle', { defaultMessage: 'Metrics', }), - name: RouteName.METRICS, }, // service nodes, only enabled for java agents for now { @@ -279,7 +265,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.nodesTitle', { defaultMessage: 'JVMs', }), - name: RouteName.SERVICE_NODES, }, // node metrics { @@ -295,7 +280,6 @@ export const routes: BreadcrumbRoute[] = [ return serviceNodeName || ''; }, - name: RouteName.SERVICE_NODE_METRICS, }, { exact: true, @@ -305,14 +289,12 @@ export const routes: BreadcrumbRoute[] = [ const query = toQuery(location.search); return query.transactionName as string; }, - name: RouteName.TRANSACTION_NAME, }, { exact: true, path: '/link-to/trace/:traceId', component: TraceLink, breadcrumb: null, - name: RouteName.LINK_TO_TRACE, }, { exact: true, @@ -321,7 +303,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.serviceMapTitle', { defaultMessage: 'Service Map', }), - name: RouteName.SERVICE_MAP, }, { exact: true, @@ -330,7 +311,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.serviceMapTitle', { defaultMessage: 'Service Map', }), - name: RouteName.SINGLE_SERVICE_MAP, }, { exact: true, @@ -339,7 +319,6 @@ export const routes: BreadcrumbRoute[] = [ breadcrumb: i18n.translate('xpack.apm.breadcrumb.settings.customizeUI', { defaultMessage: 'Customize UI', }), - name: RouteName.CUSTOMIZE_UI, }, { exact: true, @@ -351,6 +330,5 @@ export const routes: BreadcrumbRoute[] = [ defaultMessage: 'Anomaly detection', } ), - name: RouteName.ANOMALY_DETECTION, }, ]; diff --git a/x-pack/plugins/apm/public/components/app/Main/route_config/route_names.tsx b/x-pack/plugins/apm/public/components/app/Main/route_config/route_names.tsx deleted file mode 100644 index 1bf798e3b26d7..0000000000000 --- a/x-pack/plugins/apm/public/components/app/Main/route_config/route_names.tsx +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export enum RouteName { - HOME = 'home', - SERVICES = 'services', - SERVICE_MAP = 'service-map', - SINGLE_SERVICE_MAP = 'single-service-map', - TRACES = 'traces', - SERVICE = 'service', - TRANSACTIONS = 'transactions', - ERRORS = 'errors', - ERROR = 'error', - METRICS = 'metrics', - SERVICE_NODE_METRICS = 'node_metrics', - TRANSACTION_TYPE = 'transaction_type', - TRANSACTION_NAME = 'transaction_name', - SETTINGS = 'settings', - AGENT_CONFIGURATION = 'agent_configuration', - AGENT_CONFIGURATION_CREATE = 'agent_configuration_create', - AGENT_CONFIGURATION_EDIT = 'agent_configuration_edit', - INDICES = 'indices', - SERVICE_NODES = 'nodes', - LINK_TO_TRACE = 'link_to_trace', - CUSTOMIZE_UI = 'customize_ui', - ANOMALY_DETECTION = 'anomaly_detection', - CSM = 'csm', -} diff --git a/x-pack/plugins/apm/public/context/ApmPluginContext/MockApmPluginContext.tsx b/x-pack/plugins/apm/public/context/ApmPluginContext/MockApmPluginContext.tsx index 8334efffbd511..48206572932b1 100644 --- a/x-pack/plugins/apm/public/context/ApmPluginContext/MockApmPluginContext.tsx +++ b/x-pack/plugins/apm/public/context/ApmPluginContext/MockApmPluginContext.tsx @@ -39,6 +39,7 @@ const mockCore = { apm: {}, }, currentAppId$: new Observable(), + navigateToUrl: (url: string) => {}, }, chrome: { docTitle: { change: () => {} }, diff --git a/x-pack/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.test.tsx b/x-pack/plugins/apm/public/hooks/use_breadcrumbs.test.tsx similarity index 65% rename from x-pack/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.test.tsx rename to x-pack/plugins/apm/public/hooks/use_breadcrumbs.test.tsx index 102a3d91e4a91..dcd6ed0ba4934 100644 --- a/x-pack/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.test.tsx +++ b/x-pack/plugins/apm/public/hooks/use_breadcrumbs.test.tsx @@ -4,63 +4,56 @@ * you may not use this file except in compliance with the Elastic License. */ -import { mount } from 'enzyme'; -import React from 'react'; +import { renderHook } from '@testing-library/react-hooks'; +import produce from 'immer'; +import React, { ReactNode } from 'react'; import { MemoryRouter } from 'react-router-dom'; -import { ApmPluginContextValue } from '../../../context/ApmPluginContext'; -import { routes } from './route_config'; -import { UpdateBreadcrumbs } from './UpdateBreadcrumbs'; +import { routes } from '../components/app/Main/route_config'; +import { ApmPluginContextValue } from '../context/ApmPluginContext'; import { - MockApmPluginContextWrapper, mockApmPluginContextValue, -} from '../../../context/ApmPluginContext/MockApmPluginContext'; + MockApmPluginContextWrapper, +} from '../context/ApmPluginContext/MockApmPluginContext'; +import { useBreadcrumbs } from './use_breadcrumbs'; -const setBreadcrumbs = jest.fn(); -const changeTitle = jest.fn(); +function createWrapper(path: string) { + return ({ children }: { children?: ReactNode }) => { + const value = (produce(mockApmPluginContextValue, (draft) => { + draft.core.application.navigateToUrl = (url: string) => Promise.resolve(); + draft.core.chrome.docTitle.change = changeTitle; + draft.core.chrome.setBreadcrumbs = setBreadcrumbs; + }) as unknown) as ApmPluginContextValue; -function mountBreadcrumb(route: string, params = '') { - mount( - - - + return ( + + + {children} + - - ); - expect(setBreadcrumbs).toHaveBeenCalledTimes(1); + ); + }; } -describe('UpdateBreadcrumbs', () => { - beforeEach(() => { - setBreadcrumbs.mockReset(); - changeTitle.mockReset(); - }); +function mountBreadcrumb(path: string) { + renderHook(() => useBreadcrumbs(routes), { wrapper: createWrapper(path) }); +} - it('Changes the homepage title', () => { +const changeTitle = jest.fn(); +const setBreadcrumbs = jest.fn(); + +describe('useBreadcrumbs', () => { + it('changes the page title', () => { mountBreadcrumb('/'); + expect(changeTitle).toHaveBeenCalledWith(['APM']); }); - it('/services/:serviceName/errors/:groupId', () => { + test('/services/:serviceName/errors/:groupId', () => { mountBreadcrumb( - '/services/opbeans-node/errors/myGroupId', - 'rangeFrom=now-24h&rangeTo=now&refreshPaused=true&refreshInterval=0' + '/services/opbeans-node/errors/myGroupId?kuery=myKuery&rangeFrom=now-24h&rangeTo=now&refreshPaused=true&refreshInterval=0' ); - const breadcrumbs = setBreadcrumbs.mock.calls[0][0]; - expect(breadcrumbs).toEqual( + + expect(setBreadcrumbs).toHaveBeenCalledWith( expect.arrayContaining([ expect.objectContaining({ text: 'APM', @@ -95,10 +88,10 @@ describe('UpdateBreadcrumbs', () => { ]); }); - it('/services/:serviceName/errors', () => { - mountBreadcrumb('/services/opbeans-node/errors'); - const breadcrumbs = setBreadcrumbs.mock.calls[0][0]; - expect(breadcrumbs).toEqual( + test('/services/:serviceName/errors', () => { + mountBreadcrumb('/services/opbeans-node/errors?kuery=myKuery'); + + expect(setBreadcrumbs).toHaveBeenCalledWith( expect.arrayContaining([ expect.objectContaining({ text: 'APM', @@ -115,6 +108,7 @@ describe('UpdateBreadcrumbs', () => { expect.objectContaining({ text: 'Errors', href: undefined }), ]) ); + expect(changeTitle).toHaveBeenCalledWith([ 'Errors', 'opbeans-node', @@ -123,10 +117,10 @@ describe('UpdateBreadcrumbs', () => { ]); }); - it('/services/:serviceName/transactions', () => { - mountBreadcrumb('/services/opbeans-node/transactions'); - const breadcrumbs = setBreadcrumbs.mock.calls[0][0]; - expect(breadcrumbs).toEqual( + test('/services/:serviceName/transactions', () => { + mountBreadcrumb('/services/opbeans-node/transactions?kuery=myKuery'); + + expect(setBreadcrumbs).toHaveBeenCalledWith( expect.arrayContaining([ expect.objectContaining({ text: 'APM', @@ -152,14 +146,12 @@ describe('UpdateBreadcrumbs', () => { ]); }); - it('/services/:serviceName/transactions/view?transactionName=my-transaction-name', () => { + test('/services/:serviceName/transactions/view?transactionName=my-transaction-name', () => { mountBreadcrumb( - '/services/opbeans-node/transactions/view', - 'transactionName=my-transaction-name' + '/services/opbeans-node/transactions/view?kuery=myKuery&transactionName=my-transaction-name' ); - const breadcrumbs = setBreadcrumbs.mock.calls[0][0]; - expect(breadcrumbs).toEqual( + expect(setBreadcrumbs).toHaveBeenCalledWith( expect.arrayContaining([ expect.objectContaining({ text: 'APM', diff --git a/x-pack/plugins/apm/public/hooks/use_breadcrumbs.ts b/x-pack/plugins/apm/public/hooks/use_breadcrumbs.ts new file mode 100644 index 0000000000000..640170bf3bff2 --- /dev/null +++ b/x-pack/plugins/apm/public/hooks/use_breadcrumbs.ts @@ -0,0 +1,214 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { History, Location } from 'history'; +import { ChromeBreadcrumb } from 'kibana/public'; +import { MouseEvent, ReactNode, useEffect } from 'react'; +import { + matchPath, + RouteComponentProps, + useHistory, + match as Match, + useLocation, +} from 'react-router-dom'; +import { APMRouteDefinition, BreadcrumbTitle } from '../application/routes'; +import { getAPMHref } from '../components/shared/Links/apm/APMLink'; +import { useApmPluginContext } from './useApmPluginContext'; + +interface BreadcrumbWithoutLink extends ChromeBreadcrumb { + match: Match>; +} + +interface BreadcrumbFunctionArgs extends RouteComponentProps { + breadcrumbTitle: BreadcrumbTitle; +} + +/** + * Call the breadcrumb function if there is one, otherwise return it as a string + */ +function getBreadcrumbText({ + breadcrumbTitle, + history, + location, + match, +}: BreadcrumbFunctionArgs) { + return typeof breadcrumbTitle === 'function' + ? breadcrumbTitle({ history, location, match }) + : breadcrumbTitle; +} + +/** + * Get a breadcrumb from the current path and route definitions. + */ +function getBreadcrumb({ + currentPath, + history, + location, + routes, +}: { + currentPath: string; + history: History; + location: Location; + routes: APMRouteDefinition[]; +}) { + return routes.reduce( + (found, { breadcrumb, ...routeDefinition }) => { + if (found) { + return found; + } + + if (!breadcrumb) { + return null; + } + + const match = matchPath>( + currentPath, + routeDefinition + ); + + if (match) { + return { + match, + text: getBreadcrumbText({ + breadcrumbTitle: breadcrumb, + history, + location, + match, + }), + }; + } + + return null; + }, + null + ); +} + +/** + * Once we have the breadcrumbs, we need to iterate through the list again to + * add the href and onClick, since we need to know which one is the final + * breadcrumb + */ +function addLinksToBreadcrumbs({ + breadcrumbs, + navigateToUrl, + wrappedGetAPMHref, +}: { + breadcrumbs: BreadcrumbWithoutLink[]; + navigateToUrl: (url: string) => Promise; + wrappedGetAPMHref: (path: string) => string; +}) { + return breadcrumbs.map((breadcrumb, index) => { + const isLastBreadcrumbItem = index === breadcrumbs.length - 1; + + // Make the link not clickable if it's the last item + const href = isLastBreadcrumbItem + ? undefined + : wrappedGetAPMHref(breadcrumb.match.url); + const onClick = !href + ? undefined + : (event: MouseEvent) => { + event.preventDefault(); + navigateToUrl(href); + }; + + return { + ...breadcrumb, + match: undefined, + href, + onClick, + }; + }); +} + +/** + * Convert a list of route definitions to a list of breadcrumbs + */ +function routeDefinitionsToBreadcrumbs({ + history, + location, + routes, +}: { + history: History; + location: Location; + routes: APMRouteDefinition[]; +}) { + const breadcrumbs: BreadcrumbWithoutLink[] = []; + const { pathname } = location; + + pathname + .split('?')[0] + .replace(/\/$/, '') + .split('/') + .reduce((acc, next) => { + // `/1/2/3` results in match checks for `/1`, `/1/2`, `/1/2/3`. + const currentPath = !next ? '/' : `${acc}/${next}`; + const breadcrumb = getBreadcrumb({ + currentPath, + history, + location, + routes, + }); + + if (breadcrumb) { + breadcrumbs.push(breadcrumb); + } + + return currentPath === '/' ? '' : currentPath; + }, ''); + + return breadcrumbs; +} + +/** + * Get an array for a page title from a list of breadcrumbs + */ +function getTitleFromBreadcrumbs(breadcrumbs: ChromeBreadcrumb[]): string[] { + function removeNonStrings(item: ReactNode): item is string { + return typeof item === 'string'; + } + + return breadcrumbs + .map(({ text }) => text) + .reverse() + .filter(removeNonStrings); +} + +/** + * Determine the breadcrumbs from the routes, set them, and update the page + * title when the route changes. + */ +export function useBreadcrumbs(routes: APMRouteDefinition[]) { + const history = useHistory(); + const location = useLocation(); + const { search } = location; + const { core } = useApmPluginContext(); + const { basePath } = core.http; + const { navigateToUrl } = core.application; + const { docTitle, setBreadcrumbs } = core.chrome; + const changeTitle = docTitle.change; + + function wrappedGetAPMHref(path: string) { + return getAPMHref({ basePath, path, search }); + } + + const breadcrumbsWithoutLinks = routeDefinitionsToBreadcrumbs({ + history, + location, + routes, + }); + const breadcrumbs = addLinksToBreadcrumbs({ + breadcrumbs: breadcrumbsWithoutLinks, + wrappedGetAPMHref, + navigateToUrl, + }); + const title = getTitleFromBreadcrumbs(breadcrumbs); + + useEffect(() => { + changeTitle(title); + setBreadcrumbs(breadcrumbs); + }, [breadcrumbs, changeTitle, location, title, setBreadcrumbs]); +} From d2ad7ce15108933ede9b7ffe7fdefa6199e17bf6 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Tue, 8 Sep 2020 13:10:52 -0400 Subject: [PATCH 31/58] [Monitoring] Read from metricbeat-* for ES node_stats (#76015) * Read from metricbeat-* for node_stats * Fix tests Co-authored-by: Elastic Machine --- .../plugins/monitoring/server/config.test.ts | 3 ++ x-pack/plugins/monitoring/server/config.ts | 3 ++ .../monitoring/server/lib/ccs_utils.js | 21 +++++++++++-- .../monitoring/server/lib/create_query.js | 2 +- .../elasticsearch/nodes/get_node_summary.js | 31 ++++++++++++++----- .../nodes/get_nodes/get_node_ids.js | 1 + .../nodes/get_nodes/get_nodes.js | 1 + .../nodes/get_nodes/map_nodes_info.js | 12 ++++--- 8 files changed, 58 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/monitoring/server/config.test.ts b/x-pack/plugins/monitoring/server/config.test.ts index 32b8691bd6049..2efc325a3edec 100644 --- a/x-pack/plugins/monitoring/server/config.test.ts +++ b/x-pack/plugins/monitoring/server/config.test.ts @@ -86,6 +86,9 @@ describe('config schema', () => { "index": "filebeat-*", }, "max_bucket_size": 10000, + "metricbeat": Object { + "index": "metricbeat-*", + }, "min_interval_seconds": 10, "show_license_expiration": true, }, diff --git a/x-pack/plugins/monitoring/server/config.ts b/x-pack/plugins/monitoring/server/config.ts index 789211c43db31..6ae99e3d16d64 100644 --- a/x-pack/plugins/monitoring/server/config.ts +++ b/x-pack/plugins/monitoring/server/config.ts @@ -29,6 +29,9 @@ export const configSchema = schema.object({ logs: schema.object({ index: schema.string({ defaultValue: 'filebeat-*' }), }), + metricbeat: schema.object({ + index: schema.string({ defaultValue: 'metricbeat-*' }), + }), max_bucket_size: schema.number({ defaultValue: 10000 }), elasticsearch: monitoringElasticsearchConfigSchema, container: schema.object({ diff --git a/x-pack/plugins/monitoring/server/lib/ccs_utils.js b/x-pack/plugins/monitoring/server/lib/ccs_utils.js index dab1e87435c86..bef07124fb430 100644 --- a/x-pack/plugins/monitoring/server/lib/ccs_utils.js +++ b/x-pack/plugins/monitoring/server/lib/ccs_utils.js @@ -5,6 +5,21 @@ */ import { isFunction, get } from 'lodash'; +export function appendMetricbeatIndex(config, indexPattern) { + // Leverage this function to also append the dynamic metricbeat index too + let mbIndex = null; + // TODO: NP + // This function is called with both NP config and LP config + if (isFunction(config.get)) { + mbIndex = config.get('monitoring.ui.metricbeat.index'); + } else { + mbIndex = get(config, 'monitoring.ui.metricbeat.index'); + } + + const newIndexPattern = `${indexPattern},${mbIndex}`; + return newIndexPattern; +} + /** * Prefix all comma separated index patterns within the original {@code indexPattern}. * @@ -27,7 +42,7 @@ export function prefixIndexPattern(config, indexPattern, ccs) { } if (!ccsEnabled || !ccs) { - return indexPattern; + return appendMetricbeatIndex(config, indexPattern); } const patterns = indexPattern.split(','); @@ -35,10 +50,10 @@ export function prefixIndexPattern(config, indexPattern, ccs) { // if a wildcard is used, then we also want to search the local indices if (ccs === '*') { - return `${prefixedPattern},${indexPattern}`; + return appendMetricbeatIndex(config, `${prefixedPattern},${indexPattern}`); } - return prefixedPattern; + return appendMetricbeatIndex(config, prefixedPattern); } /** diff --git a/x-pack/plugins/monitoring/server/lib/create_query.js b/x-pack/plugins/monitoring/server/lib/create_query.js index 04e0d7642ec58..1983dc3dcf9af 100644 --- a/x-pack/plugins/monitoring/server/lib/create_query.js +++ b/x-pack/plugins/monitoring/server/lib/create_query.js @@ -57,7 +57,7 @@ export function createQuery(options) { let typeFilter; if (type) { - typeFilter = { term: { type } }; + typeFilter = { bool: { should: [{ term: { type } }, { term: { 'metricset.name': type } }] } }; } let clusterUuidFilter; diff --git a/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_node_summary.js b/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_node_summary.js index 6abb392e58818..84384021a3593 100644 --- a/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_node_summary.js +++ b/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_node_summary.js @@ -17,15 +17,23 @@ export function handleResponse(clusterState, shardStats, nodeUuid) { return (response) => { let nodeSummary = {}; const nodeStatsHits = get(response, 'hits.hits', []); - const nodes = nodeStatsHits.map((hit) => hit._source.source_node); // using [0] value because query results are sorted desc per timestamp + const nodes = nodeStatsHits.map((hit) => + get(hit, '_source.elasticsearch.node', hit._source.source_node) + ); // using [0] value because query results are sorted desc per timestamp const node = nodes[0] || getDefaultNodeFromId(nodeUuid); - const sourceStats = get(response, 'hits.hits[0]._source.node_stats'); + const sourceStats = + get(response, 'hits.hits[0]._source.elasticsearch.node.stats') || + get(response, 'hits.hits[0]._source.node_stats'); const clusterNode = get(clusterState, ['nodes', nodeUuid]); const stats = { resolver: nodeUuid, - node_ids: nodes.map((node) => node.uuid), + node_ids: nodes.map((node) => node.id || node.uuid), attributes: node.attributes, - transport_address: node.transport_address, + transport_address: get( + response, + 'hits.hits[0]._source.service.address', + node.transport_address + ), name: node.name, type: node.type, }; @@ -45,10 +53,17 @@ export function handleResponse(clusterState, shardStats, nodeUuid) { totalShards: _shardStats.shardCount, indexCount: _shardStats.indexCount, documents: get(sourceStats, 'indices.docs.count'), - dataSize: get(sourceStats, 'indices.store.size_in_bytes'), - freeSpace: get(sourceStats, 'fs.total.available_in_bytes'), - totalSpace: get(sourceStats, 'fs.total.total_in_bytes'), - usedHeap: get(sourceStats, 'jvm.mem.heap_used_percent'), + dataSize: + get(sourceStats, 'indices.store.size_in_bytes') || + get(sourceStats, 'indices.store.size.bytes'), + freeSpace: + get(sourceStats, 'fs.total.available_in_bytes') || + get(sourceStats, 'fs.summary.available.bytes'), + totalSpace: + get(sourceStats, 'fs.total.total_in_bytes') || get(sourceStats, 'fs.summary.total.bytes'), + usedHeap: + get(sourceStats, 'jvm.mem.heap_used_percent') || + get(sourceStats, 'jvm.mem.heap.used.pct'), status: i18n.translate('xpack.monitoring.es.nodes.onlineStatusLabel', { defaultMessage: 'Online', }), diff --git a/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/get_node_ids.js b/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/get_node_ids.js index 573f1792e5f8a..68bca96e2911b 100644 --- a/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/get_node_ids.js +++ b/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/get_node_ids.js @@ -19,6 +19,7 @@ export async function getNodeIds(req, indexPattern, { clusterUuid }, size) { filterPath: ['aggregations.composite_data.buckets'], body: { query: createQuery({ + type: 'node_stats', start, end, metric: ElasticsearchMetric.getMetricFields(), diff --git a/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/get_nodes.js b/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/get_nodes.js index 682da324ee72f..c2794b7e7fa44 100644 --- a/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/get_nodes.js +++ b/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/get_nodes.js @@ -96,6 +96,7 @@ export async function getNodes(req, esIndexPattern, pageOfNodes, clusterStats, n }, filterPath: [ 'hits.hits._source.source_node', + 'hits.hits._source.elasticsearch.node', 'aggregations.nodes.buckets.key', ...LISTING_METRICS_PATHS, ], diff --git a/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/map_nodes_info.js b/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/map_nodes_info.js index 3c719c2ddfbf8..317c1cddf57ae 100644 --- a/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/map_nodes_info.js +++ b/x-pack/plugins/monitoring/server/lib/elasticsearch/nodes/get_nodes/map_nodes_info.js @@ -17,25 +17,29 @@ export function mapNodesInfo(nodeHits, clusterStats, nodesShardCount) { const clusterState = get(clusterStats, 'cluster_state', { nodes: {} }); return nodeHits.reduce((prev, node) => { - const sourceNode = get(node, '_source.source_node'); + const sourceNode = get(node, '_source.source_node') || get(node, '_source.elasticsearch.node'); const calculatedNodeType = calculateNodeType(sourceNode, get(clusterState, 'master_node')); const { nodeType, nodeTypeLabel, nodeTypeClass } = getNodeTypeClassLabel( sourceNode, calculatedNodeType ); - const isOnline = !isUndefined(get(clusterState, ['nodes', sourceNode.uuid])); + const isOnline = !isUndefined(get(clusterState, ['nodes', sourceNode.uuid || sourceNode.id])); return { ...prev, - [sourceNode.uuid]: { + [sourceNode.uuid || sourceNode.id]: { name: sourceNode.name, transport_address: sourceNode.transport_address, type: nodeType, isOnline, nodeTypeLabel: nodeTypeLabel, nodeTypeClass: nodeTypeClass, - shardCount: get(nodesShardCount, `nodes[${sourceNode.uuid}].shardCount`, 0), + shardCount: get( + nodesShardCount, + `nodes[${sourceNode.uuid || sourceNode.id}].shardCount`, + 0 + ), }, }; }, {}); From a9adf1061c533ba9c9c93f671e46b9faa87e2841 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Tue, 8 Sep 2020 19:36:16 +0200 Subject: [PATCH 32/58] Allow add alert Flyout initial values like name, tags (#76906) --- .../sections/alert_form/alert_add.test.tsx | 31 +++++++++++++++++-- .../sections/alert_form/alert_add.tsx | 3 ++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.test.tsx index 3803fcebbb92d..8ac80c4ad2880 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.test.tsx @@ -11,7 +11,7 @@ import { EuiFormLabel } from '@elastic/eui'; import { coreMock } from '../../../../../../../src/core/public/mocks'; import AlertAdd from './alert_add'; import { actionTypeRegistryMock } from '../../action_type_registry.mock'; -import { ValidationResult } from '../../../types'; +import { Alert, ValidationResult } from '../../../types'; import { AlertsContextProvider, useAlertsContext } from '../../context/alerts_context'; import { alertTypeRegistryMock } from '../../alert_type_registry.mock'; import { chartPluginMock } from '../../../../../../../src/plugins/charts/public/mocks'; @@ -46,7 +46,7 @@ describe('alert_add', () => { let deps: any; let wrapper: ReactWrapper; - async function setup() { + async function setup(initialValues?: Partial) { const mocks = coreMock.createSetup(); const { loadAlertTypes } = jest.requireMock('../../lib/alert_api'); const alertTypes = [ @@ -155,6 +155,7 @@ describe('alert_add', () => { consumer={ALERTS_FEATURE_ID} addFlyoutVisible={true} setAddFlyoutVisibility={() => {}} + initialValues={initialValues} /> @@ -180,5 +181,31 @@ describe('alert_add', () => { wrapper.find('[data-test-subj="my-alert-type-SelectOption"]').first().simulate('click'); expect(wrapper.contains('Metadata: some value. Fields: test.')).toBeTruthy(); + + expect(wrapper.find('input#alertName').props().value).toBe(''); + + expect(wrapper.find('[data-test-subj="tagsComboBox"]').first().text()).toBe(''); + + expect(wrapper.find('.euiSelect').first().props().value).toBe('m'); + }); + + it('renders alert add flyout with initial values', async () => { + await setup({ + name: 'Simple status alert', + tags: ['uptime', 'logs'], + schedule: { + interval: '1h', + }, + }); + + await new Promise((resolve) => { + setTimeout(resolve, 1000); + }); + + expect(wrapper.find('input#alertName').props().value).toBe('Simple status alert'); + + expect(wrapper.find('[data-test-subj="tagsComboBox"]').first().text()).toBe('uptimelogs'); + + expect(wrapper.find('.euiSelect').first().props().value).toBe('h'); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx index 20cbd42e34b67..97dcfec5ed3c6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx @@ -34,6 +34,7 @@ interface AlertAddProps { setAddFlyoutVisibility: React.Dispatch>; alertTypeId?: string; canChangeTrigger?: boolean; + initialValues?: Partial; } export const AlertAdd = ({ @@ -42,6 +43,7 @@ export const AlertAdd = ({ setAddFlyoutVisibility, canChangeTrigger, alertTypeId, + initialValues, }: AlertAddProps) => { const initialAlert = ({ params: {}, @@ -52,6 +54,7 @@ export const AlertAdd = ({ }, actions: [], tags: [], + ...(initialValues ? initialValues : {}), } as unknown) as Alert; const [{ alert }, dispatch] = useReducer(alertReducer, { alert: initialAlert }); From b149a6055409f04bf5f71f10987c596053a8c5cf Mon Sep 17 00:00:00 2001 From: Caroline Horn <549577+cchaos@users.noreply.github.com> Date: Tue, 8 Sep 2020 13:50:22 -0400 Subject: [PATCH 33/58] Using new EUI globals files and importing Charts themes via SASS (#76821) --- packages/kbn-ui-shared-deps/webpack.config.js | 20 ++++--------------- .../core_app/styles/_globals_v7dark.scss | 5 +---- .../core_app/styles/_globals_v7light.scss | 5 +---- .../core_app/styles/_globals_v8dark.scss | 10 +--------- .../core_app/styles/_globals_v8light.scss | 10 +--------- src/core/public/styles/_base.scss | 6 ++++++ 6 files changed, 14 insertions(+), 42 deletions(-) diff --git a/packages/kbn-ui-shared-deps/webpack.config.js b/packages/kbn-ui-shared-deps/webpack.config.js index c81da4689052a..fa80dfdeef20f 100644 --- a/packages/kbn-ui-shared-deps/webpack.config.js +++ b/packages/kbn-ui-shared-deps/webpack.config.js @@ -32,22 +32,10 @@ exports.getWebpackConfig = ({ dev = false } = {}) => ({ mode: dev ? 'development' : 'production', entry: { 'kbn-ui-shared-deps': './entry.js', - 'kbn-ui-shared-deps.v7.dark': [ - '@elastic/eui/dist/eui_theme_dark.css', - '@elastic/charts/dist/theme_only_dark.css', - ], - 'kbn-ui-shared-deps.v7.light': [ - '@elastic/eui/dist/eui_theme_light.css', - '@elastic/charts/dist/theme_only_light.css', - ], - 'kbn-ui-shared-deps.v8.dark': [ - '@elastic/eui/dist/eui_theme_amsterdam_dark.css', - '@elastic/charts/dist/theme_only_dark.css', - ], - 'kbn-ui-shared-deps.v8.light': [ - '@elastic/eui/dist/eui_theme_amsterdam_light.css', - '@elastic/charts/dist/theme_only_light.css', - ], + 'kbn-ui-shared-deps.v7.dark': ['@elastic/eui/dist/eui_theme_dark.css'], + 'kbn-ui-shared-deps.v7.light': ['@elastic/eui/dist/eui_theme_light.css'], + 'kbn-ui-shared-deps.v8.dark': ['@elastic/eui/dist/eui_theme_amsterdam_dark.css'], + 'kbn-ui-shared-deps.v8.light': ['@elastic/eui/dist/eui_theme_amsterdam_light.css'], }, context: __dirname, devtool: dev ? '#cheap-source-map' : false, diff --git a/src/core/public/core_app/styles/_globals_v7dark.scss b/src/core/public/core_app/styles/_globals_v7dark.scss index 8ac841aab8469..9a4a965d63a38 100644 --- a/src/core/public/core_app/styles/_globals_v7dark.scss +++ b/src/core/public/core_app/styles/_globals_v7dark.scss @@ -3,9 +3,6 @@ // prepended to all .scss imports (from JS, when v7dark theme selected) @import '@elastic/eui/src/themes/eui/eui_colors_dark'; - -@import '@elastic/eui/src/global_styling/functions/index'; -@import '@elastic/eui/src/global_styling/variables/index'; -@import '@elastic/eui/src/global_styling/mixins/index'; +@import '@elastic/eui/src/themes/eui/eui_globals'; @import './mixins'; diff --git a/src/core/public/core_app/styles/_globals_v7light.scss b/src/core/public/core_app/styles/_globals_v7light.scss index 701bbdfe03662..ddb4b5b31fa1f 100644 --- a/src/core/public/core_app/styles/_globals_v7light.scss +++ b/src/core/public/core_app/styles/_globals_v7light.scss @@ -3,9 +3,6 @@ // prepended to all .scss imports (from JS, when v7light theme selected) @import '@elastic/eui/src/themes/eui/eui_colors_light'; - -@import '@elastic/eui/src/global_styling/functions/index'; -@import '@elastic/eui/src/global_styling/variables/index'; -@import '@elastic/eui/src/global_styling/mixins/index'; +@import '@elastic/eui/src/themes/eui/eui_globals'; @import './mixins'; diff --git a/src/core/public/core_app/styles/_globals_v8dark.scss b/src/core/public/core_app/styles/_globals_v8dark.scss index 972365e9e9d0e..9ad9108f350ff 100644 --- a/src/core/public/core_app/styles/_globals_v8dark.scss +++ b/src/core/public/core_app/styles/_globals_v8dark.scss @@ -3,14 +3,6 @@ // prepended to all .scss imports (from JS, when v8dark theme selected) @import '@elastic/eui/src/themes/eui-amsterdam/eui_amsterdam_colors_dark'; - -@import '@elastic/eui/src/global_styling/functions/index'; -@import '@elastic/eui/src/themes/eui-amsterdam/global_styling/functions/index'; - -@import '@elastic/eui/src/global_styling/variables/index'; -@import '@elastic/eui/src/themes/eui-amsterdam/global_styling/variables/index'; - -@import '@elastic/eui/src/global_styling/mixins/index'; -@import '@elastic/eui/src/themes/eui-amsterdam/global_styling/mixins/index'; +@import '@elastic/eui/src/themes/eui-amsterdam/eui_amsterdam_globals'; @import './mixins'; diff --git a/src/core/public/core_app/styles/_globals_v8light.scss b/src/core/public/core_app/styles/_globals_v8light.scss index dc99f4d45082e..a6b2cb84c2062 100644 --- a/src/core/public/core_app/styles/_globals_v8light.scss +++ b/src/core/public/core_app/styles/_globals_v8light.scss @@ -3,14 +3,6 @@ // prepended to all .scss imports (from JS, when v8light theme selected) @import '@elastic/eui/src/themes/eui-amsterdam/eui_amsterdam_colors_light'; - -@import '@elastic/eui/src/global_styling/functions/index'; -@import '@elastic/eui/src/themes/eui-amsterdam/global_styling/functions/index'; - -@import '@elastic/eui/src/global_styling/variables/index'; -@import '@elastic/eui/src/themes/eui-amsterdam/global_styling/variables/index'; - -@import '@elastic/eui/src/global_styling/mixins/index'; -@import '@elastic/eui/src/themes/eui-amsterdam/global_styling/mixins/index'; +@import '@elastic/eui/src/themes/eui-amsterdam/eui_amsterdam_globals'; @import './mixins'; diff --git a/src/core/public/styles/_base.scss b/src/core/public/styles/_base.scss index 9b06b526fc7dd..427c6b7735435 100644 --- a/src/core/public/styles/_base.scss +++ b/src/core/public/styles/_base.scss @@ -1,4 +1,10 @@ +// Charts themes available app-wide +@import '@elastic/charts/dist/theme'; +@import '@elastic/eui/src/themes/charts/theme'; + +// Grab some nav-specific EUI vars @import '@elastic/eui/src/components/collapsible_nav/variables'; + // Application Layout // chrome-context From 8bc6898c3348d9482aded99d95e95e19359a2487 Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Tue, 8 Sep 2020 13:57:10 -0400 Subject: [PATCH 34/58] [ML] DF Analytics models list: persist pagination through refresh interval (#76695) * ensure wizard error shows up correctly * wip: switch to basic table for model management * add selection and multi job action to models list * update error extraction function * use generic types in hook * simplify filtered items --- x-pack/plugins/ml/common/util/errors.ts | 9 +- .../configuration_step_form.tsx | 1 - .../analytics_list/analytics_list.tsx | 24 +-- .../analytics_list/use_table_settings.ts | 54 +++-- .../analytics_search_bar.tsx | 62 ++++++ .../components/analytics_search_bar/index.ts | 2 +- .../models_management/models_list.tsx | 197 +++++++++--------- 7 files changed, 210 insertions(+), 139 deletions(-) diff --git a/x-pack/plugins/ml/common/util/errors.ts b/x-pack/plugins/ml/common/util/errors.ts index 6c5fa7bd75daf..a5f89db96cfd7 100644 --- a/x-pack/plugins/ml/common/util/errors.ts +++ b/x-pack/plugins/ml/common/util/errors.ts @@ -135,7 +135,14 @@ export const extractErrorProperties = ( typeof error.body.attributes === 'object' && error.body.attributes.body?.status !== undefined ) { - statusCode = error.body.attributes.body?.status; + statusCode = error.body.attributes.body.status; + + if (typeof error.body.attributes.body.error?.reason === 'string') { + return { + message: error.body.attributes.body.error.reason, + statusCode, + }; + } } if (typeof error.body.message === 'string') { diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx index 25baff98556a6..dd9ecc963840a 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx @@ -209,7 +209,6 @@ export const ConfigurationStepForm: FC = ({ let unsupportedFieldsErrorMessage; if ( jobType === ANALYSIS_CONFIG_TYPE.CLASSIFICATION && - errorMessage.includes('status_exception') && (errorMessage.includes('must have at most') || errorMessage.includes('must have at least')) ) { maxDistinctValuesErrorMessage = errorMessage; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx index 6d73340cc396a..0c3bff58c25cd 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx @@ -99,13 +99,7 @@ export const DataFrameAnalyticsList: FC = ({ const [isInitialized, setIsInitialized] = useState(false); const [isSourceIndexModalVisible, setIsSourceIndexModalVisible] = useState(false); const [isLoading, setIsLoading] = useState(false); - const [filteredAnalytics, setFilteredAnalytics] = useState<{ - active: boolean; - items: DataFrameAnalyticsListRow[]; - }>({ - active: false, - items: [], - }); + const [filteredAnalytics, setFilteredAnalytics] = useState([]); const [searchQueryText, setSearchQueryText] = useState(''); const [analytics, setAnalytics] = useState([]); const [analyticsStats, setAnalyticsStats] = useState( @@ -129,12 +123,12 @@ export const DataFrameAnalyticsList: FC = ({ blockRefresh ); - const setQueryClauses = (queryClauses: any) => { + const updateFilteredItems = (queryClauses: any) => { if (queryClauses.length) { const filtered = filterAnalytics(analytics, queryClauses); - setFilteredAnalytics({ active: true, items: filtered }); + setFilteredAnalytics(filtered); } else { - setFilteredAnalytics({ active: false, items: [] }); + setFilteredAnalytics(analytics); } }; @@ -146,9 +140,9 @@ export const DataFrameAnalyticsList: FC = ({ if (query && query.ast !== undefined && query.ast.clauses !== undefined) { clauses = query.ast.clauses; } - setQueryClauses(clauses); + updateFilteredItems(clauses); } else { - setQueryClauses([]); + updateFilteredItems([]); } }; @@ -192,9 +186,9 @@ export const DataFrameAnalyticsList: FC = ({ isMlEnabledInSpace ); - const { onTableChange, pageOfItems, pagination, sorting } = useTableSettings( - filteredAnalytics.active ? filteredAnalytics.items : analytics - ); + const { onTableChange, pageOfItems, pagination, sorting } = useTableSettings< + DataFrameAnalyticsListRow + >(DataFrameAnalyticsListColumn.id, filteredAnalytics); // Before the analytics have been loaded for the first time, display the loading indicator only. // Otherwise a user would see 'No data frame analytics found' during the initial loading. diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts index 57eb9f6857053..052068c30b84c 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts @@ -8,7 +8,6 @@ import { useState } from 'react'; import { Direction, EuiBasicTableProps, EuiTableSortingType } from '@elastic/eui'; import sortBy from 'lodash/sortBy'; import get from 'lodash/get'; -import { DataFrameAnalyticsListColumn, DataFrameAnalyticsListRow } from './common'; const PAGE_SIZE = 10; const PAGE_SIZE_OPTIONS = [10, 25, 50]; @@ -19,37 +18,59 @@ const jobPropertyMap = { Type: 'job_type', }; -interface AnalyticsBasicTableSettings { +// Copying from EUI EuiBasicTable types as type is not correctly picked up for table's onChange +// Can be removed when https://github.com/elastic/eui/issues/4011 is addressed in EUI +export interface Criteria { + page?: { + index: number; + size: number; + }; + sort?: { + field: keyof T; + direction: Direction; + }; +} +export interface CriteriaWithPagination extends Criteria { + page: { + index: number; + size: number; + }; +} + +interface AnalyticsBasicTableSettings { pageIndex: number; pageSize: number; totalItemCount: number; hidePerPageOptions: boolean; - sortField: string; + sortField: keyof T; sortDirection: Direction; } -interface UseTableSettingsReturnValue { - onTableChange: EuiBasicTableProps['onChange']; - pageOfItems: DataFrameAnalyticsListRow[]; - pagination: EuiBasicTableProps['pagination']; +interface UseTableSettingsReturnValue { + onTableChange: EuiBasicTableProps['onChange']; + pageOfItems: T[]; + pagination: EuiBasicTableProps['pagination']; sorting: EuiTableSortingType; } -export function useTableSettings(items: DataFrameAnalyticsListRow[]): UseTableSettingsReturnValue { - const [tableSettings, setTableSettings] = useState({ +export function useTableSettings( + sortByField: keyof TypeOfItem, + items: TypeOfItem[] +): UseTableSettingsReturnValue { + const [tableSettings, setTableSettings] = useState>({ pageIndex: 0, pageSize: PAGE_SIZE, totalItemCount: 0, hidePerPageOptions: false, - sortField: DataFrameAnalyticsListColumn.id, + sortField: sortByField, sortDirection: 'asc', }); const getPageOfItems = ( - list: any[], + list: TypeOfItem[], index: number, size: number, - sortField: string, + sortField: keyof TypeOfItem, sortDirection: Direction ) => { list = sortBy(list, (item) => @@ -72,13 +93,10 @@ export function useTableSettings(items: DataFrameAnalyticsListRow[]): UseTableSe }; }; - const onTableChange = ({ + const onTableChange: EuiBasicTableProps['onChange'] = ({ page = { index: 0, size: PAGE_SIZE }, - sort = { field: DataFrameAnalyticsListColumn.id, direction: 'asc' }, - }: { - page?: { index: number; size: number }; - sort?: { field: string; direction: Direction }; - }) => { + sort = { field: sortByField, direction: 'asc' }, + }: CriteriaWithPagination) => { const { index, size } = page; const { field, direction } = sort; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_search_bar/analytics_search_bar.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_search_bar/analytics_search_bar.tsx index 44a6572a3766c..7a366bb63420c 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_search_bar/analytics_search_bar.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_search_bar/analytics_search_bar.tsx @@ -20,6 +20,68 @@ import { Value, DataFrameAnalyticsListRow, } from '../analytics_list/common'; +import { ModelItem } from '../models_management/models_list'; + +export function filterAnalyticsModels( + items: ModelItem[], + clauses: Array +) { + if (clauses.length === 0) { + return items; + } + + // keep count of the number of matches we make as we're looping over the clauses + // we only want to return items which match all clauses, i.e. each search term is ANDed + const matches: Record = items.reduce((p: Record, c) => { + p[c.model_id] = { + model: c, + count: 0, + }; + return p; + }, {}); + + clauses.forEach((c) => { + // the search term could be negated with a minus, e.g. -bananas + const bool = c.match === 'must'; + let ms = []; + + if (c.type === 'term') { + // filter term based clauses, e.g. bananas + // match on model_id and type + // if the term has been negated, AND the matches + if (bool === true) { + ms = items.filter( + (item) => + stringMatch(item.model_id, c.value) === bool || stringMatch(item.type, c.value) === bool + ); + } else { + ms = items.filter( + (item) => + stringMatch(item.model_id, c.value) === bool && stringMatch(item.type, c.value) === bool + ); + } + } else { + // filter other clauses, i.e. the filters for type + if (Array.isArray(c.value)) { + // type value is an array of string(s) e.g. c.value => ['classification'] + ms = items.filter((item) => { + return item.type !== undefined && (c.value as Value[]).includes(item.type); + }); + } else { + ms = items.filter((item) => item[c.field as keyof typeof item] === c.value); + } + } + + ms.forEach((j) => matches[j.model_id].count++); + }); + + // loop through the matches and return only those items which have match all the clauses + const filtered = Object.values(matches) + .filter((m) => (m && m.count) >= clauses.length) + .map((m) => m.model); + + return filtered; +} export function filterAnalytics( items: DataFrameAnalyticsListRow[], diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_search_bar/index.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_search_bar/index.ts index 3b901f5063eb1..2748764d7f46e 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_search_bar/index.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_search_bar/index.ts @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { AnalyticsSearchBar, filterAnalytics } from './analytics_search_bar'; +export { AnalyticsSearchBar, filterAnalytics, filterAnalyticsModels } from './analytics_search_bar'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/models_management/models_list.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/models_management/models_list.tsx index 3104ec55c3a6d..338b6444671a6 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/models_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/models_management/models_list.tsx @@ -4,20 +4,20 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { FC, useState, useCallback, useMemo } from 'react'; +import React, { FC, useState, useCallback, useEffect, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { - Direction, + EuiBasicTable, EuiFlexGroup, EuiFlexItem, - EuiInMemoryTable, EuiTitle, EuiButton, - EuiSearchBarProps, + EuiSearchBar, EuiSpacer, EuiButtonIcon, EuiBadge, + SearchFilterConfig, } from '@elastic/eui'; // @ts-ignore import { formatDate } from '@elastic/eui/lib/services/format'; @@ -42,6 +42,8 @@ import { refreshAnalyticsList$, useRefreshAnalyticsList, } from '../../../../common'; +import { useTableSettings } from '../analytics_list/use_table_settings'; +import { filterAnalyticsModels, AnalyticsSearchBar } from '../analytics_search_bar'; type Stats = Omit; @@ -66,22 +68,41 @@ export const ModelsList: FC = () => { const { toasts } = useNotifications(); const [searchQueryText, setSearchQueryText] = useState(''); - - const [pageIndex, setPageIndex] = useState(0); - const [pageSize, setPageSize] = useState(10); - const [sortField, setSortField] = useState(ModelsTableToConfigMapping.id); - const [sortDirection, setSortDirection] = useState('asc'); - + const [filteredModels, setFilteredModels] = useState([]); const [isLoading, setIsLoading] = useState(false); const [items, setItems] = useState([]); const [selectedModels, setSelectedModels] = useState([]); - const [modelsToDelete, setModelsToDelete] = useState([]); - const [itemIdToExpandedRowMap, setItemIdToExpandedRowMap] = useState>( {} ); + const updateFilteredItems = (queryClauses: any) => { + if (queryClauses.length) { + const filtered = filterAnalyticsModels(items, queryClauses); + setFilteredModels(filtered); + } else { + setFilteredModels(items); + } + }; + + const filterList = () => { + if (searchQueryText !== '') { + const query = EuiSearchBar.Query.parse(searchQueryText); + let clauses: any = []; + if (query && query.ast !== undefined && query.ast.clauses !== undefined) { + clauses = query.ast.clauses; + } + updateFilteredItems(clauses); + } else { + updateFilteredItems([]); + } + }; + + useEffect(() => { + filterList(); + }, [searchQueryText, items]); + /** * Fetches inference trained models. */ @@ -355,91 +376,51 @@ export const ModelsList: FC = () => { }, ]; - const pagination = { - initialPageIndex: pageIndex, - initialPageSize: pageSize, - totalItemCount: items.length, - pageSizeOptions: [10, 20, 50], - hidePerPageOptions: false, - }; + const filters: SearchFilterConfig[] = + inferenceTypesOptions && inferenceTypesOptions.length > 0 + ? [ + { + type: 'field_value_selection', + field: 'type', + name: i18n.translate('xpack.ml.dataframe.analyticsList.typeFilter', { + defaultMessage: 'Type', + }), + multiSelect: 'or', + options: inferenceTypesOptions, + }, + ] + : []; - const sorting = { - sort: { - field: sortField, - direction: sortDirection, - }, - }; - const search: EuiSearchBarProps = { - query: searchQueryText, - onChange: (searchChange) => { - if (searchChange.error !== null) { - return false; - } - setSearchQueryText(searchChange.queryText); - return true; - }, - box: { - incremental: true, - }, - ...(inferenceTypesOptions && inferenceTypesOptions.length > 0 - ? { - filters: [ - { - type: 'field_value_selection', - field: 'type', - name: i18n.translate('xpack.ml.dataframe.analyticsList.typeFilter', { - defaultMessage: 'Type', - }), - multiSelect: 'or', - options: inferenceTypesOptions, - }, - ], - } - : {}), - ...(selectedModels.length > 0 - ? { - toolsLeft: ( - - - -
- -
-
-
- - - - - -
- ), - } - : {}), - }; + const { onTableChange, pageOfItems, pagination, sorting } = useTableSettings( + ModelsTableToConfigMapping.id, + filteredModels + ); - const onTableChange: EuiInMemoryTable['onTableChange'] = ({ - page = { index: 0, size: 10 }, - sort = { field: ModelsTableToConfigMapping.id, direction: 'asc' }, - }) => { - const { index, size } = page; - setPageIndex(index); - setPageSize(size); - - const { field, direction } = sort; - setSortField(field); - setSortDirection(direction); - }; + const toolsLeft = ( + + + + +
+ +
+
+
+ + + + + +
+
+ ); const isSelectionAllowed = canDeleteDataFrameAnalytics; @@ -473,21 +454,31 @@ export const ModelsList: FC = () => {
- + {selectedModels.length > 0 && toolsLeft} + + + + + + columns={columns} hasActions={true} isExpandable={true} - itemIdToExpandedRowMap={itemIdToExpandedRowMap} isSelectable={false} - items={items} + items={pageOfItems} itemId={ModelsTableToConfigMapping.id} + itemIdToExpandedRowMap={itemIdToExpandedRowMap} loading={isLoading} - onTableChange={onTableChange} - pagination={pagination} - sorting={sorting} - search={search} + onChange={onTableChange} selection={selection} + pagination={pagination!} + sorting={sorting} + data-test-subj={isLoading ? 'mlModelsTable loading' : 'mlModelsTable loaded'} rowProps={(item) => ({ 'data-test-subj': `mlModelsTableRow row-${item.model_id}`, })} From 842bcf45602a8a262a3d86bcec247b735f50571c Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Tue, 8 Sep 2020 12:59:02 -0500 Subject: [PATCH 35/58] Index pattern save => Index pattern service (#76706) * Index pattern save => Index pattern service --- ...-data-public.indexpattern._constructor_.md | 4 +- ...plugin-plugins-data-public.indexpattern.md | 5 +- ...s-data-public.indexpattern.originalbody.md | 13 ++ ...public.indexpattern.removescriptedfield.md | 4 +- ...n-plugins-data-public.indexpattern.save.md | 22 --- ...lugins-data-public.indexpattern.version.md | 11 ++ ...in-plugins-data-public.querystringinput.md | 2 +- .../stubbed_saved_object_index_pattern.ts | 1 + .../__snapshots__/index_pattern.test.ts.snap | 2 +- .../index_patterns/index_pattern.test.ts | 62 +------ .../index_patterns/index_pattern.ts | 157 +++++------------- .../index_patterns/index_patterns.test.ts | 98 +++++++++-- .../index_patterns/index_patterns.ts | 92 ++++++++++ src/plugins/data/public/public.api.md | 14 +- .../create_edit_field/create_edit_field.tsx | 3 +- .../edit_index_pattern/edit_index_pattern.tsx | 8 +- .../scripted_field_table.test.tsx | 46 +++-- .../scripted_fields_table.tsx | 12 +- .../source_filters_table.test.tsx.snap | 33 ---- .../source_filters_table.test.tsx | 50 +++--- .../source_filters_table.tsx | 17 +- .../edit_index_pattern/tabs/tabs.tsx | 7 +- .../field_editor/field_editor.test.tsx | 12 +- .../components/field_editor/field_editor.tsx | 27 ++- .../plugins/index_patterns/server/plugin.ts | 2 +- 25 files changed, 366 insertions(+), 338 deletions(-) create mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.originalbody.md delete mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.save.md create mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.version.md diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md index 2e078e3404fe6..a5bb15c963978 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md @@ -9,7 +9,7 @@ Constructs a new instance of the `IndexPattern` class Signature: ```typescript -constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError, shortDotsEnable, metaFields, }: IndexPatternDeps); +constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, }: IndexPatternDeps); ``` ## Parameters @@ -17,5 +17,5 @@ constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCach | Parameter | Type | Description | | --- | --- | --- | | id | string | undefined | | -| { savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError, shortDotsEnable, metaFields, } | IndexPatternDeps | | +| { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, } | IndexPatternDeps | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md index 4c53af3f8970e..87ce1e258712a 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md @@ -14,7 +14,7 @@ export declare class IndexPattern implements IIndexPattern | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(id, { savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-public.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern class | +| [(constructor)(id, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-public.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern class | ## Properties @@ -29,11 +29,13 @@ export declare class IndexPattern implements IIndexPattern | [id](./kibana-plugin-plugins-data-public.indexpattern.id.md) | | string | | | [intervalName](./kibana-plugin-plugins-data-public.indexpattern.intervalname.md) | | string | undefined | | | [metaFields](./kibana-plugin-plugins-data-public.indexpattern.metafields.md) | | string[] | | +| [originalBody](./kibana-plugin-plugins-data-public.indexpattern.originalbody.md) | | {
[key: string]: any;
} | | | [sourceFilters](./kibana-plugin-plugins-data-public.indexpattern.sourcefilters.md) | | SourceFilter[] | | | [timeFieldName](./kibana-plugin-plugins-data-public.indexpattern.timefieldname.md) | | string | undefined | | | [title](./kibana-plugin-plugins-data-public.indexpattern.title.md) | | string | | | [type](./kibana-plugin-plugins-data-public.indexpattern.type.md) | | string | undefined | | | [typeMeta](./kibana-plugin-plugins-data-public.indexpattern.typemeta.md) | | TypeMeta | | +| [version](./kibana-plugin-plugins-data-public.indexpattern.version.md) | | string | undefined | | ## Methods @@ -60,6 +62,5 @@ export declare class IndexPattern implements IIndexPattern | [prepBody()](./kibana-plugin-plugins-data-public.indexpattern.prepbody.md) | | | | [refreshFields()](./kibana-plugin-plugins-data-public.indexpattern.refreshfields.md) | | | | [removeScriptedField(fieldName)](./kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md) | | | -| [save(saveAttempts)](./kibana-plugin-plugins-data-public.indexpattern.save.md) | | | | [toSpec()](./kibana-plugin-plugins-data-public.indexpattern.tospec.md) | | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.originalbody.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.originalbody.md new file mode 100644 index 0000000000000..4bc3c76afbae9 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.originalbody.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [originalBody](./kibana-plugin-plugins-data-public.indexpattern.originalbody.md) + +## IndexPattern.originalBody property + +Signature: + +```typescript +originalBody: { + [key: string]: any; + }; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md index 42c6dd72b8c4e..e902d9c42b082 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md @@ -7,7 +7,7 @@ Signature: ```typescript -removeScriptedField(fieldName: string): Promise; +removeScriptedField(fieldName: string): void; ``` ## Parameters @@ -18,5 +18,5 @@ removeScriptedField(fieldName: string): Promise; Returns: -`Promise` +`void` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.save.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.save.md deleted file mode 100644 index d0b471cc2bc21..0000000000000 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.save.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [save](./kibana-plugin-plugins-data-public.indexpattern.save.md) - -## IndexPattern.save() method - -Signature: - -```typescript -save(saveAttempts?: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| saveAttempts | number | | - -Returns: - -`Promise` - diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.version.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.version.md new file mode 100644 index 0000000000000..99d3bc4e7a04d --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.version.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [version](./kibana-plugin-plugins-data-public.indexpattern.version.md) + +## IndexPattern.version property + +Signature: + +```typescript +version: string | undefined; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md index 9f3ed8c1263ba..3dbfd9430e913 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md @@ -7,5 +7,5 @@ Signature: ```typescript -QueryStringInput: React.FC> +QueryStringInput: React.FC> ``` diff --git a/src/fixtures/stubbed_saved_object_index_pattern.ts b/src/fixtures/stubbed_saved_object_index_pattern.ts index 02e6cb85e341f..44b391f14cf9c 100644 --- a/src/fixtures/stubbed_saved_object_index_pattern.ts +++ b/src/fixtures/stubbed_saved_object_index_pattern.ts @@ -30,6 +30,7 @@ export function stubbedSavedObjectIndexPattern(id: string | null = null) { timeFieldName: 'timestamp', customFormats: '{}', fields: mockLogstashFields, + title: 'title', }, version: 2, }; diff --git a/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap b/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap index a0c380ec55bf6..1871627da76de 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap +++ b/src/plugins/data/common/index_patterns/index_patterns/__snapshots__/index_pattern.test.ts.snap @@ -631,7 +631,7 @@ Object { "id": "test-pattern", "sourceFilters": undefined, "timeFieldName": "timestamp", - "title": "test-pattern", + "title": "title", "typeMeta": undefined, "version": 2, } diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts index f037a71b508a2..f49897c47d562 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts @@ -17,7 +17,7 @@ * under the License. */ -import { defaults, map, last, get } from 'lodash'; +import { defaults, map, last } from 'lodash'; import { IndexPattern } from './index_pattern'; @@ -29,7 +29,7 @@ import { stubbedSavedObjectIndexPattern } from '../../../../../fixtures/stubbed_ import { IndexPatternField } from '../fields'; import { fieldFormatsMock } from '../../field_formats/mocks'; -import { FieldFormat } from '../..'; +import { FieldFormat, IndexPatternsService } from '../..'; class MockFieldFormatter {} @@ -116,6 +116,7 @@ function create(id: string, payload?: any): Promise { apiClient, patternCache, fieldFormats: fieldFormatsMock, + indexPatternsService: {} as IndexPatternsService, onNotification: () => {}, onError: () => {}, shortDotsEnable: false, @@ -151,7 +152,6 @@ describe('IndexPattern', () => { expect(indexPattern).toHaveProperty('getNonScriptedFields'); expect(indexPattern).toHaveProperty('addScriptedField'); expect(indexPattern).toHaveProperty('removeScriptedField'); - expect(indexPattern).toHaveProperty('save'); // properties expect(indexPattern).toHaveProperty('fields'); @@ -389,60 +389,4 @@ describe('IndexPattern', () => { }); }); }); - - test('should handle version conflicts', async () => { - setDocsourcePayload(null, { - id: 'foo', - version: 'foo', - attributes: { - title: 'something', - }, - }); - // Create a normal index pattern - const pattern = new IndexPattern('foo', { - savedObjectsClient: savedObjectsClient as any, - apiClient, - patternCache, - fieldFormats: fieldFormatsMock, - onNotification: () => {}, - onError: () => {}, - shortDotsEnable: false, - metaFields: [], - }); - await pattern.init(); - - expect(get(pattern, 'version')).toBe('fooa'); - - // Create the same one - we're going to handle concurrency - const samePattern = new IndexPattern('foo', { - savedObjectsClient: savedObjectsClient as any, - apiClient, - patternCache, - fieldFormats: fieldFormatsMock, - onNotification: () => {}, - onError: () => {}, - shortDotsEnable: false, - metaFields: [], - }); - await samePattern.init(); - - expect(get(samePattern, 'version')).toBe('fooaa'); - - // This will conflict because samePattern did a save (from refreshFields) - // but the resave should work fine - pattern.title = 'foo2'; - await pattern.save(); - - // This should not be able to recover - samePattern.title = 'foo3'; - - let result; - try { - await samePattern.save(); - } catch (err) { - result = err; - } - - expect(result.res.status).toBe(409); - }); }); diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts index 0558808573580..76f1a5e59d0ee 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts @@ -41,8 +41,8 @@ import { PatternCache } from './_pattern_cache'; import { expandShorthand, FieldMappingSpec, MappingObject } from '../../field_mapping'; import { IndexPatternSpec, TypeMeta, FieldSpec, SourceFilter } from '../types'; import { SerializedFieldFormat } from '../../../../expressions/common'; +import { IndexPatternsService } from '..'; -const MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS = 3; const savedObjectType = 'index-pattern'; interface IndexPatternDeps { @@ -50,6 +50,7 @@ interface IndexPatternDeps { apiClient: IIndexPatternsApiClient; patternCache: PatternCache; fieldFormats: FieldFormatsStartCommon; + indexPatternsService: IndexPatternsService; onNotification: OnNotification; onError: OnError; shortDotsEnable: boolean; @@ -70,17 +71,18 @@ export class IndexPattern implements IIndexPattern { public flattenHit: any; public metaFields: string[]; - private version: string | undefined; + public version: string | undefined; private savedObjectsClient: SavedObjectsClientCommon; private patternCache: PatternCache; public sourceFilters?: SourceFilter[]; - private originalBody: { [key: string]: any } = {}; + // todo make read only, update via method or factor out + public originalBody: { [key: string]: any } = {}; public fieldsFetcher: any; // probably want to factor out any direct usage and change to private + private indexPatternsService: IndexPatternsService; private shortDotsEnable: boolean = false; private fieldFormats: FieldFormatsStartCommon; private onNotification: OnNotification; private onError: OnError; - private apiClient: IIndexPatternsApiClient; private mapping: MappingObject = expandShorthand({ title: ES_FIELD_TYPES.TEXT, @@ -111,6 +113,7 @@ export class IndexPattern implements IIndexPattern { apiClient, patternCache, fieldFormats, + indexPatternsService, onNotification, onError, shortDotsEnable = false, @@ -121,6 +124,7 @@ export class IndexPattern implements IIndexPattern { this.savedObjectsClient = savedObjectsClient; this.patternCache = patternCache; this.fieldFormats = fieldFormats; + this.indexPatternsService = indexPatternsService; this.onNotification = onNotification; this.onError = onError; @@ -128,7 +132,6 @@ export class IndexPattern implements IIndexPattern { this.metaFields = metaFields; this.fields = fieldList([], this.shortDotsEnable); - this.apiClient = apiClient; this.fieldsFetcher = createFieldsFetcher(this, apiClient, metaFields); this.flattenHit = flattenHitWrapper(this, metaFields); this.formatHit = formatHitProvider( @@ -392,8 +395,6 @@ export class IndexPattern implements IIndexPattern { } else { throw err; } - - await this.save(); } } @@ -402,7 +403,6 @@ export class IndexPattern implements IIndexPattern { if (field) { this.fields.remove(field); } - return this.save(); } async popularizeField(fieldName: string, unit = 1) { @@ -523,92 +523,6 @@ export class IndexPattern implements IIndexPattern { return await _create(potentialDuplicateByTitle.id); } - async save(saveAttempts: number = 0): Promise { - if (!this.id) return; - const body = this.prepBody(); - - const originalChangedKeys: string[] = []; - Object.entries(body).forEach(([key, value]) => { - if (value !== this.originalBody[key]) { - originalChangedKeys.push(key); - } - }); - - return this.savedObjectsClient - .update(savedObjectType, this.id, body, { version: this.version }) - .then((resp) => { - this.id = resp.id; - this.version = resp.version; - }) - .catch((err) => { - if ( - _.get(err, 'res.status') === 409 && - saveAttempts++ < MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS - ) { - const samePattern = new IndexPattern(this.id, { - savedObjectsClient: this.savedObjectsClient, - apiClient: this.apiClient, - patternCache: this.patternCache, - fieldFormats: this.fieldFormats, - onNotification: this.onNotification, - onError: this.onError, - shortDotsEnable: this.shortDotsEnable, - metaFields: this.metaFields, - }); - - return samePattern.init().then(() => { - // What keys changed from now and what the server returned - const updatedBody = samePattern.prepBody(); - - // Build a list of changed keys from the server response - // and ensure we ignore the key if the server response - // is the same as the original response (since that is expected - // if we made a change in that key) - - const serverChangedKeys: string[] = []; - Object.entries(updatedBody).forEach(([key, value]) => { - if (value !== (body as any)[key] && value !== this.originalBody[key]) { - serverChangedKeys.push(key); - } - }); - - let unresolvedCollision = false; - for (const originalKey of originalChangedKeys) { - for (const serverKey of serverChangedKeys) { - if (originalKey === serverKey) { - unresolvedCollision = true; - break; - } - } - } - - if (unresolvedCollision) { - const title = i18n.translate('data.indexPatterns.unableWriteLabel', { - defaultMessage: - 'Unable to write index pattern! Refresh the page to get the most up to date changes for this index pattern.', - }); - - this.onNotification({ title, color: 'danger' }); - throw err; - } - - // Set the updated response on this object - serverChangedKeys.forEach((key) => { - (this as any)[key] = (samePattern as any)[key]; - }); - this.version = samePattern.version; - - // Clear cache - this.patternCache.clear(this.id!); - - // Try the save again - return this.save(saveAttempts); - }); - } - throw err; - }); - } - async _fetchFields() { const fields = await this.fieldsFetcher.fetch(this); const scripted = this.getScriptedFields().map((field) => field.spec); @@ -624,30 +538,37 @@ export class IndexPattern implements IIndexPattern { } refreshFields() { - return this._fetchFields() - .then(() => this.save()) - .catch((err) => { - // https://github.com/elastic/kibana/issues/9224 - // This call will attempt to remap fields from the matching - // ES index which may not actually exist. In that scenario, - // we still want to notify the user that there is a problem - // but we do not want to potentially make any pages unusable - // so do not rethrow the error here - - if (err instanceof IndexPatternMissingIndices) { - this.onNotification({ title: (err as any).message, color: 'danger', iconType: 'alert' }); - return []; - } + return ( + this._fetchFields() + // todo + .then(() => this.indexPatternsService.save(this)) + .catch((err) => { + // https://github.com/elastic/kibana/issues/9224 + // This call will attempt to remap fields from the matching + // ES index which may not actually exist. In that scenario, + // we still want to notify the user that there is a problem + // but we do not want to potentially make any pages unusable + // so do not rethrow the error here + + if (err instanceof IndexPatternMissingIndices) { + this.onNotification({ + title: (err as any).message, + color: 'danger', + iconType: 'alert', + }); + return []; + } - this.onError(err, { - title: i18n.translate('data.indexPatterns.fetchFieldErrorTitle', { - defaultMessage: 'Error fetching fields for index pattern {title} (ID: {id})', - values: { - id: this.id, - title: this.title, - }, - }), - }); - }); + this.onError(err, { + title: i18n.translate('data.indexPatterns.fetchFieldErrorTitle', { + defaultMessage: 'Error fetching fields for index pattern {title} (ID: {id})', + values: { + id: this.id, + title: this.title, + }, + }), + }); + }) + ); } } diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts index 8223b31042124..c79c7900148ea 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts @@ -17,28 +17,26 @@ * under the License. */ -import { IndexPatternsService } from './index_patterns'; +import { defaults } from 'lodash'; +import { IndexPatternsService } from '.'; import { fieldFormatsMock } from '../../field_formats/mocks'; -import { - UiSettingsCommon, - IIndexPatternsApiClient, - SavedObjectsClientCommon, - SavedObject, -} from '../types'; +import { stubbedSavedObjectIndexPattern } from '../../../../../fixtures/stubbed_saved_object_index_pattern'; +import { UiSettingsCommon, SavedObjectsClientCommon, SavedObject } from '../types'; + +const createFieldsFetcher = jest.fn().mockImplementation(() => ({ + getFieldsForWildcard: jest.fn().mockImplementation(() => { + return new Promise((resolve) => resolve([])); + }), + every: jest.fn(), +})); const fieldFormats = fieldFormatsMock; -jest.mock('./index_pattern', () => { - class IndexPattern { - init = async () => { - return this; - }; - } +let object: any = {}; - return { - IndexPattern, - }; -}); +function setDocsourcePayload(id: string | null, providedPayload: any) { + object = defaults(providedPayload || {}, stubbedSavedObjectIndexPattern(id)); +} describe('IndexPatterns', () => { let indexPatterns: IndexPatternsService; @@ -53,6 +51,25 @@ describe('IndexPatterns', () => { > ); savedObjectsClient.delete = jest.fn(() => Promise.resolve({}) as Promise); + savedObjectsClient.get = jest.fn().mockImplementation(() => object); + savedObjectsClient.create = jest.fn(); + savedObjectsClient.update = jest + .fn() + .mockImplementation(async (type, id, body, { version }) => { + if (object.version !== version) { + throw new Object({ + res: { + status: 409, + }, + }); + } + object.attributes.title = body.title; + object.version += 'a'; + return { + id: object.id, + version: object.version, + }; + }); indexPatterns = new IndexPatternsService({ uiSettings: ({ @@ -60,7 +77,7 @@ describe('IndexPatterns', () => { getAll: () => {}, } as any) as UiSettingsCommon, savedObjectsClient: (savedObjectsClient as unknown) as SavedObjectsClientCommon, - apiClient: {} as IIndexPatternsApiClient, + apiClient: createFieldsFetcher(), fieldFormats, onNotification: () => {}, onError: () => {}, @@ -70,6 +87,14 @@ describe('IndexPatterns', () => { test('does cache gets for the same id', async () => { const id = '1'; + setDocsourcePayload(id, { + id: 'foo', + version: 'foo', + attributes: { + title: 'something', + }, + }); + const indexPattern = await indexPatterns.get(id); expect(indexPattern).toBeDefined(); @@ -107,4 +132,41 @@ describe('IndexPatterns', () => { await indexPatterns.delete(id); expect(indexPattern).not.toBe(await indexPatterns.get(id)); }); + + test('should handle version conflicts', async () => { + setDocsourcePayload(null, { + id: 'foo', + version: 'foo', + attributes: { + title: 'something', + }, + }); + + // Create a normal index patterns + const pattern = await indexPatterns.make('foo'); + + expect(pattern.version).toBe('fooa'); + + // Create the same one - we're going to handle concurrency + const samePattern = await indexPatterns.make('foo'); + + expect(samePattern.version).toBe('fooaa'); + + // This will conflict because samePattern did a save (from refreshFields) + // but the resave should work fine + pattern.title = 'foo2'; + await indexPatterns.save(pattern); + + // This should not be able to recover + samePattern.title = 'foo3'; + + let result; + try { + await indexPatterns.save(samePattern); + } catch (err) { + result = err; + } + + expect(result.res.status).toBe(409); + }); }); diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts index fe0d14b2d9c19..88a7e9f6cef4c 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { SavedObjectsClientCommon } from '../..'; import { createIndexPatternCache } from '.'; @@ -37,6 +38,8 @@ import { FieldFormatsStartCommon } from '../../field_formats'; import { UI_SETTINGS, SavedObject } from '../../../common'; const indexPatternCache = createIndexPatternCache(); +const MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS = 3; +const savedObjectType = 'index-pattern'; type IndexPatternCachedFieldType = 'id' | 'title'; @@ -181,6 +184,7 @@ export class IndexPatternsService { apiClient: this.apiClient, patternCache: indexPatternCache, fieldFormats: this.fieldFormats, + indexPatternsService: this, onNotification: this.onNotification, onError: this.onError, shortDotsEnable, @@ -191,6 +195,93 @@ export class IndexPatternsService { return indexPattern; } + async save(indexPattern: IndexPattern, saveAttempts: number = 0): Promise { + if (!indexPattern.id) return; + const shortDotsEnable = await this.config.get(UI_SETTINGS.SHORT_DOTS_ENABLE); + const metaFields = await this.config.get(UI_SETTINGS.META_FIELDS); + + const body = indexPattern.prepBody(); + + const originalChangedKeys: string[] = []; + Object.entries(body).forEach(([key, value]) => { + if (value !== indexPattern.originalBody[key]) { + originalChangedKeys.push(key); + } + }); + + return this.savedObjectsClient + .update(savedObjectType, indexPattern.id, body, { version: indexPattern.version }) + .then((resp) => { + indexPattern.id = resp.id; + indexPattern.version = resp.version; + }) + .catch((err) => { + if (err?.res?.status === 409 && saveAttempts++ < MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS) { + const samePattern = new IndexPattern(indexPattern.id, { + savedObjectsClient: this.savedObjectsClient, + apiClient: this.apiClient, + patternCache: indexPatternCache, + fieldFormats: this.fieldFormats, + indexPatternsService: this, + onNotification: this.onNotification, + onError: this.onError, + shortDotsEnable, + metaFields, + }); + + return samePattern.init().then(() => { + // What keys changed from now and what the server returned + const updatedBody = samePattern.prepBody(); + + // Build a list of changed keys from the server response + // and ensure we ignore the key if the server response + // is the same as the original response (since that is expected + // if we made a change in that key) + + const serverChangedKeys: string[] = []; + Object.entries(updatedBody).forEach(([key, value]) => { + if (value !== (body as any)[key] && value !== indexPattern.originalBody[key]) { + serverChangedKeys.push(key); + } + }); + + let unresolvedCollision = false; + for (const originalKey of originalChangedKeys) { + for (const serverKey of serverChangedKeys) { + if (originalKey === serverKey) { + unresolvedCollision = true; + break; + } + } + } + + if (unresolvedCollision) { + const title = i18n.translate('data.indexPatterns.unableWriteLabel', { + defaultMessage: + 'Unable to write index pattern! Refresh the page to get the most up to date changes for this index pattern.', + }); + + this.onNotification({ title, color: 'danger' }); + throw err; + } + + // Set the updated response on this object + serverChangedKeys.forEach((key) => { + (indexPattern as any)[key] = (samePattern as any)[key]; + }); + indexPattern.version = samePattern.version; + + // Clear cache + indexPatternCache.clear(indexPattern.id!); + + // Try the save again + return this.save(indexPattern, saveAttempts); + }); + } + throw err; + }); + } + async make(id?: string): Promise { const shortDotsEnable = await this.config.get(UI_SETTINGS.SHORT_DOTS_ENABLE); const metaFields = await this.config.get(UI_SETTINGS.META_FIELDS); @@ -200,6 +291,7 @@ export class IndexPatternsService { apiClient: this.apiClient, patternCache: indexPatternCache, fieldFormats: this.fieldFormats, + indexPatternsService: this, onNotification: this.onNotification, onError: this.onError, shortDotsEnable, diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index c2cc2fdc3c134..a3de45189a85d 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -912,7 +912,7 @@ export type IMetricAggType = MetricAggType; // @public (undocumented) export class IndexPattern implements IIndexPattern { // Warning: (ae-forgotten-export) The symbol "IndexPatternDeps" needs to be exported by the entry point index.d.ts - constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCache, fieldFormats, onNotification, onError, shortDotsEnable, metaFields, }: IndexPatternDeps); + constructor(id: string | undefined, { savedObjectsClient, apiClient, patternCache, fieldFormats, indexPatternsService, onNotification, onError, shortDotsEnable, metaFields, }: IndexPatternDeps); // (undocumented) addScriptedField(name: string, script: string, fieldType: string | undefined, lang: string): Promise; // (undocumented) @@ -986,6 +986,10 @@ export class IndexPattern implements IIndexPattern { // (undocumented) metaFields: string[]; // (undocumented) + originalBody: { + [key: string]: any; + }; + // (undocumented) popularizeField(fieldName: string, unit?: number): Promise; // (undocumented) prepBody(): { @@ -1001,9 +1005,7 @@ export class IndexPattern implements IIndexPattern { // (undocumented) refreshFields(): Promise; // (undocumented) - removeScriptedField(fieldName: string): Promise; - // (undocumented) - save(saveAttempts?: number): Promise; + removeScriptedField(fieldName: string): void; // Warning: (ae-forgotten-export) The symbol "SourceFilter" needs to be exported by the entry point index.d.ts // // (undocumented) @@ -1018,7 +1020,9 @@ export class IndexPattern implements IIndexPattern { type: string | undefined; // (undocumented) typeMeta?: IndexPatternTypeMeta; - } + // (undocumented) + version: string | undefined; +} // Warning: (ae-missing-release-tag) "AggregationRestrictions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx index 22bc78ee0538e..13be9ca6c9c25 100644 --- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx +++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx @@ -44,7 +44,7 @@ const newFieldPlaceholder = i18n.translate( export const CreateEditField = withRouter( ({ indexPattern, mode, fieldName, history }: CreateEditFieldProps) => { - const { uiSettings, chrome, notifications } = useKibana< + const { uiSettings, chrome, notifications, data } = useKibana< IndexPatternManagmentContext >().services; const spec = @@ -96,6 +96,7 @@ export const CreateEditField = withRouter( indexPattern={indexPattern} spec={spec} services={{ + saveIndexPattern: data.indexPatterns.save.bind(data.indexPatterns), redirectAway, }} /> diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/edit_index_pattern.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/edit_index_pattern.tsx index a0eecef66ff93..d09836019b0bc 100644 --- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/edit_index_pattern.tsx +++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/edit_index_pattern.tsx @@ -234,7 +234,13 @@ export const EditIndexPattern = withRouter( )} - +
); diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx index ed50317aed6a0..84469a7e1fbd9 100644 --- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx +++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx @@ -21,7 +21,7 @@ import React from 'react'; import { shallow } from 'enzyme'; import { ScriptedFieldsTable } from '../scripted_fields_table'; -import { IIndexPattern } from '../../../../../../plugins/data/common/index_patterns'; +import { IIndexPattern, IndexPattern } from '../../../../../../plugins/data/common/index_patterns'; jest.mock('@elastic/eui', () => ({ EuiTitle: 'eui-title', @@ -54,7 +54,7 @@ const helpers = { const getIndexPatternMock = (mockedFields: any = {}) => ({ ...mockedFields } as IIndexPattern); describe('ScriptedFieldsTable', () => { - let indexPattern: IIndexPattern; + let indexPattern: IndexPattern; beforeEach(() => { indexPattern = getIndexPatternMock({ @@ -62,7 +62,7 @@ describe('ScriptedFieldsTable', () => { { name: 'ScriptedField', lang: 'painless', script: 'x++' }, { name: 'JustATest', lang: 'painless', script: 'z++' }, ], - }); + }) as IndexPattern; }); test('should render normally', async () => { @@ -71,6 +71,7 @@ describe('ScriptedFieldsTable', () => { indexPattern={indexPattern} helpers={helpers} painlessDocLink={'painlessDoc'} + saveIndexPattern={async () => {}} /> ); @@ -88,6 +89,7 @@ describe('ScriptedFieldsTable', () => { indexPattern={indexPattern} helpers={helpers} painlessDocLink={'painlessDoc'} + saveIndexPattern={async () => {}} /> ); @@ -105,15 +107,18 @@ describe('ScriptedFieldsTable', () => { test('should filter based on the lang filter', async () => { const component = shallow( [ - { name: 'ScriptedField', lang: 'painless', script: 'x++' }, - { name: 'JustATest', lang: 'painless', script: 'z++' }, - { name: 'Bad', lang: 'somethingElse', script: 'z++' }, - ], - })} + indexPattern={ + getIndexPatternMock({ + getScriptedFields: () => [ + { name: 'ScriptedField', lang: 'painless', script: 'x++' }, + { name: 'JustATest', lang: 'painless', script: 'z++' }, + { name: 'Bad', lang: 'somethingElse', script: 'z++' }, + ], + }) as IndexPattern + } painlessDocLink={'painlessDoc'} helpers={helpers} + saveIndexPattern={async () => {}} /> ); @@ -131,11 +136,14 @@ describe('ScriptedFieldsTable', () => { test('should hide the table if there are no scripted fields', async () => { const component = shallow( [], - })} + indexPattern={ + getIndexPatternMock({ + getScriptedFields: () => [], + }) as IndexPattern + } painlessDocLink={'painlessDoc'} helpers={helpers} + saveIndexPattern={async () => {}} /> ); @@ -153,6 +161,7 @@ describe('ScriptedFieldsTable', () => { indexPattern={indexPattern} helpers={helpers} painlessDocLink={'painlessDoc'} + saveIndexPattern={async () => {}} /> ); @@ -168,12 +177,15 @@ describe('ScriptedFieldsTable', () => { const removeScriptedField = jest.fn(); const component = shallow( {}} /> ); diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx index 532af2757915b..08cc90faf75fa 100644 --- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx +++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx @@ -27,10 +27,10 @@ import { import { Table, Header, CallOuts, DeleteScritpedFieldConfirmationModal } from './components'; import { ScriptedFieldItem } from './types'; -import { IIndexPattern } from '../../../../../../plugins/data/public'; +import { IndexPattern, DataPublicPluginStart } from '../../../../../../plugins/data/public'; interface ScriptedFieldsTableProps { - indexPattern: IIndexPattern; + indexPattern: IndexPattern; fieldFilter?: string; scriptedFieldLanguageFilter?: string; helpers: { @@ -39,6 +39,7 @@ interface ScriptedFieldsTableProps { }; onRemoveField?: () => void; painlessDocLink: string; + saveIndexPattern: DataPublicPluginStart['indexPatterns']['save']; } interface ScriptedFieldsTableState { @@ -68,7 +69,7 @@ export class ScriptedFieldsTable extends Component< } fetchFields = async () => { - const fields = await this.props.indexPattern.getScriptedFields(); + const fields = await (this.props.indexPattern.getScriptedFields() as ScriptedFieldItem[]); const deprecatedLangsInUse = []; const deprecatedLangs = getDeprecatedScriptingLanguages(); @@ -121,10 +122,11 @@ export class ScriptedFieldsTable extends Component< }; deleteField = () => { - const { indexPattern, onRemoveField } = this.props; + const { indexPattern, onRemoveField, saveIndexPattern } = this.props; const { fieldToDelete } = this.state; - indexPattern.removeScriptedField(fieldToDelete); + indexPattern.removeScriptedField(fieldToDelete!.name); + saveIndexPattern(indexPattern); if (onRemoveField) { onRemoveField(); diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/__snapshots__/source_filters_table.test.tsx.snap b/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/__snapshots__/source_filters_table.test.tsx.snap index a7b73624c4665..6a2b208c47987 100644 --- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/__snapshots__/source_filters_table.test.tsx.snap +++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/__snapshots__/source_filters_table.test.tsx.snap @@ -14,17 +14,6 @@ exports[`SourceFiltersTable should add a filter 1`] = ` fieldWildcardMatcher={[Function]} indexPattern={ Object { - "save": [MockFunction] { - "calls": Array [ - Array [], - ], - "results": Array [ - Object { - "type": "return", - "value": undefined, - }, - ], - }, "sourceFilters": Array [ Object { "value": "tim*", @@ -108,17 +97,6 @@ exports[`SourceFiltersTable should remove a filter 1`] = ` fieldWildcardMatcher={[Function]} indexPattern={ Object { - "save": [MockFunction] { - "calls": Array [ - Array [], - ], - "results": Array [ - Object { - "type": "return", - "value": undefined, - }, - ], - }, "sourceFilters": Array [ Object { "clientId": 2, @@ -279,17 +257,6 @@ exports[`SourceFiltersTable should update a filter 1`] = ` fieldWildcardMatcher={[Function]} indexPattern={ Object { - "save": [MockFunction] { - "calls": Array [ - Array [], - ], - "results": Array [ - Object { - "type": "return", - "value": undefined, - }, - ], - }, "sourceFilters": Array [ Object { "clientId": 1, diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.test.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.test.tsx index fa048af7c7a70..395e1f3744e94 100644 --- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.test.tsx +++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.test.tsx @@ -21,7 +21,7 @@ import React from 'react'; import { shallow } from 'enzyme'; import { SourceFiltersTable } from './source_filters_table'; -import { IIndexPattern } from 'src/plugins/data/public'; +import { IndexPattern } from 'src/plugins/data/public'; jest.mock('@elastic/eui', () => ({ EuiButton: 'eui-button', @@ -52,7 +52,7 @@ const getIndexPatternMock = (mockedFields: any = {}) => ({ sourceFilters: [{ value: 'time*' }, { value: 'nam*' }, { value: 'age*' }], ...mockedFields, - } as IIndexPattern); + } as IndexPattern); describe('SourceFiltersTable', () => { test('should render normally', () => { @@ -61,6 +61,7 @@ describe('SourceFiltersTable', () => { indexPattern={getIndexPatternMock()} fieldWildcardMatcher={() => {}} filterFilter={''} + saveIndexPattern={async () => {}} /> ); @@ -73,6 +74,7 @@ describe('SourceFiltersTable', () => { indexPattern={getIndexPatternMock()} fieldWildcardMatcher={() => {}} filterFilter={''} + saveIndexPattern={async () => {}} /> ); @@ -88,6 +90,7 @@ describe('SourceFiltersTable', () => { })} filterFilter={''} fieldWildcardMatcher={() => {}} + saveIndexPattern={async () => {}} /> ); @@ -98,11 +101,14 @@ describe('SourceFiltersTable', () => { test('should show a delete modal', () => { const component = shallow( {}} + saveIndexPattern={async () => {}} /> ); @@ -112,15 +118,17 @@ describe('SourceFiltersTable', () => { }); test('should remove a filter', async () => { - const save = jest.fn(); + const saveIndexPattern = jest.fn(async () => {}); const component = shallow( {}} + saveIndexPattern={saveIndexPattern} /> ); @@ -129,47 +137,49 @@ describe('SourceFiltersTable', () => { await component.instance().deleteFilter(); component.update(); // We are not calling `.setState` directly so we need to re-render - expect(save).toBeCalled(); + expect(saveIndexPattern).toBeCalled(); expect(component).toMatchSnapshot(); }); test('should add a filter', async () => { - const save = jest.fn(); + const saveIndexPattern = jest.fn(async () => {}); const component = shallow( {}} + saveIndexPattern={saveIndexPattern} /> ); await component.instance().onAddFilter('na*'); component.update(); // We are not calling `.setState` directly so we need to re-render - expect(save).toBeCalled(); + expect(saveIndexPattern).toBeCalled(); expect(component).toMatchSnapshot(); }); test('should update a filter', async () => { - const save = jest.fn(); + const saveIndexPattern = jest.fn(async () => {}); const component = shallow( {}} + saveIndexPattern={saveIndexPattern} /> ); await component.instance().saveFilter({ clientId: 'tim*', value: 'ti*' }); component.update(); // We are not calling `.setState` directly so we need to re-render - expect(save).toBeCalled(); + expect(saveIndexPattern).toBeCalled(); expect(component).toMatchSnapshot(); }); }); diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx index e5c753886ea9f..b00648f124716 100644 --- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx +++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx @@ -22,14 +22,15 @@ import { createSelector } from 'reselect'; import { EuiSpacer } from '@elastic/eui'; import { AddFilter, Table, Header, DeleteFilterConfirmationModal } from './components'; -import { IIndexPattern } from '../../../../../../plugins/data/public'; +import { IndexPattern, DataPublicPluginStart } from '../../../../../../plugins/data/public'; import { SourceFiltersTableFilter } from './types'; export interface SourceFiltersTableProps { - indexPattern: IIndexPattern; + indexPattern: IndexPattern; filterFilter: string; fieldWildcardMatcher: Function; onAddOrRemoveFilter?: Function; + saveIndexPattern: DataPublicPluginStart['indexPatterns']['save']; } export interface SourceFiltersTableState { @@ -104,7 +105,7 @@ export class SourceFiltersTable extends Component< }; deleteFilter = async () => { - const { indexPattern, onAddOrRemoveFilter } = this.props; + const { indexPattern, onAddOrRemoveFilter, saveIndexPattern } = this.props; const { filterToDelete, filters } = this.state; indexPattern.sourceFilters = filters.filter((filter) => { @@ -112,7 +113,7 @@ export class SourceFiltersTable extends Component< }); this.setState({ isSaving: true }); - await indexPattern.save(); + await saveIndexPattern(indexPattern); if (onAddOrRemoveFilter) { onAddOrRemoveFilter(); @@ -124,12 +125,12 @@ export class SourceFiltersTable extends Component< }; onAddFilter = async (value: string) => { - const { indexPattern, onAddOrRemoveFilter } = this.props; + const { indexPattern, onAddOrRemoveFilter, saveIndexPattern } = this.props; indexPattern.sourceFilters = [...(indexPattern.sourceFilters || []), { value }]; this.setState({ isSaving: true }); - await indexPattern.save(); + await saveIndexPattern(indexPattern); if (onAddOrRemoveFilter) { onAddOrRemoveFilter(); @@ -140,7 +141,7 @@ export class SourceFiltersTable extends Component< }; saveFilter = async ({ clientId, value }: SourceFiltersTableFilter) => { - const { indexPattern } = this.props; + const { indexPattern, saveIndexPattern } = this.props; const { filters } = this.state; indexPattern.sourceFilters = filters.map((filter) => { @@ -155,7 +156,7 @@ export class SourceFiltersTable extends Component< }); this.setState({ isSaving: true }); - await indexPattern.save(); + await saveIndexPattern(indexPattern); this.updateFilters(); this.setState({ isSaving: false }); }; diff --git a/src/plugins/index_pattern_management/public/components/edit_index_pattern/tabs/tabs.tsx b/src/plugins/index_pattern_management/public/components/edit_index_pattern/tabs/tabs.tsx index 3bc9cd34f2984..101399ef02b73 100644 --- a/src/plugins/index_pattern_management/public/components/edit_index_pattern/tabs/tabs.tsx +++ b/src/plugins/index_pattern_management/public/components/edit_index_pattern/tabs/tabs.tsx @@ -35,6 +35,7 @@ import { IndexPattern, IndexPatternField, UI_SETTINGS, + DataPublicPluginStart, } from '../../../../../../plugins/data/public'; import { useKibana } from '../../../../../../plugins/kibana_react/public'; import { IndexPatternManagmentContext } from '../../../types'; @@ -48,6 +49,7 @@ import { getTabs, getPath, convertToEuiSelectOption } from './utils'; interface TabsProps extends Pick { indexPattern: IndexPattern; fields: IndexPatternField[]; + saveIndexPattern: DataPublicPluginStart['indexPatterns']['save']; } const searchAriaLabel = i18n.translate( @@ -71,7 +73,7 @@ const filterPlaceholder = i18n.translate( } ); -export function Tabs({ indexPattern, fields, history, location }: TabsProps) { +export function Tabs({ indexPattern, saveIndexPattern, fields, history, location }: TabsProps) { const { uiSettings, indexPatternManagementStart, docLinks } = useKibana< IndexPatternManagmentContext >().services; @@ -191,6 +193,7 @@ export function Tabs({ indexPattern, fields, history, location }: TabsProps) { {}, saveIndexPattern: async () => {} }; + describe('FieldEditor', () => { let indexPattern: IndexPattern; @@ -122,7 +124,7 @@ describe('FieldEditor', () => { { indexPattern, spec: (field as unknown) as IndexPatternField, - services: { redirectAway: () => {} }, + services, }, mockContext ); @@ -151,7 +153,7 @@ describe('FieldEditor', () => { { indexPattern, spec: (testField as unknown) as IndexPatternField, - services: { redirectAway: () => {} }, + services, }, mockContext ); @@ -181,7 +183,7 @@ describe('FieldEditor', () => { { indexPattern, spec: (testField as unknown) as IndexPatternField, - services: { redirectAway: () => {} }, + services, }, mockContext ); @@ -198,7 +200,7 @@ describe('FieldEditor', () => { { indexPattern, spec: (testField as unknown) as IndexPatternField, - services: { redirectAway: () => {} }, + services, }, mockContext ); @@ -223,7 +225,7 @@ describe('FieldEditor', () => { { indexPattern, spec: (testField as unknown) as IndexPatternField, - services: { redirectAway: () => {} }, + services, }, mockContext ); diff --git a/src/plugins/index_pattern_management/public/components/field_editor/field_editor.tsx b/src/plugins/index_pattern_management/public/components/field_editor/field_editor.tsx index 6a3f632a9582e..4857a402cc4b2 100644 --- a/src/plugins/index_pattern_management/public/components/field_editor/field_editor.tsx +++ b/src/plugins/index_pattern_management/public/components/field_editor/field_editor.tsx @@ -133,6 +133,7 @@ export interface FieldEdiorProps { spec: IndexPatternField['spec']; services: { redirectAway: () => void; + saveIndexPattern: DataPublicPluginStart['indexPatterns']['save']; }; } @@ -757,23 +758,18 @@ export class FieldEditor extends PureComponent { - const { redirectAway } = this.props.services; + const { redirectAway, saveIndexPattern } = this.props.services; const { indexPattern } = this.props; const { spec } = this.state; - const remove = indexPattern.removeScriptedField(spec.name); - - if (remove) { - remove.then(() => { - const message = i18n.translate('indexPatternManagement.deleteField.deletedHeader', { - defaultMessage: "Deleted '{fieldName}'", - values: { fieldName: spec.name }, - }); - this.context.services.notifications.toasts.addSuccess(message); - redirectAway(); + indexPattern.removeScriptedField(spec.name); + saveIndexPattern(indexPattern).then(() => { + const message = i18n.translate('indexPatternManagement.deleteField.deletedHeader', { + defaultMessage: "Deleted '{fieldName}'", + values: { fieldName: spec.name }, }); - } else { + this.context.services.notifications.toasts.addSuccess(message); redirectAway(); - } + }); }; saveField = async () => { @@ -803,7 +799,7 @@ export class FieldEditor extends PureComponent { const message = i18n.translate('indexPatternManagement.deleteField.savedHeader', { defaultMessage: "Saved '{fieldName}'", diff --git a/test/plugin_functional/plugins/index_patterns/server/plugin.ts b/test/plugin_functional/plugins/index_patterns/server/plugin.ts index d6a4fdd67b0a1..1c85f226623cb 100644 --- a/test/plugin_functional/plugins/index_patterns/server/plugin.ts +++ b/test/plugin_functional/plugins/index_patterns/server/plugin.ts @@ -78,7 +78,7 @@ export class IndexPatternsTestPlugin const id = (req.params as Record).id; const service = await data.indexPatterns.indexPatternsServiceFactory(req); const ip = await service.get(id); - await ip.save(); + await service.save(ip); return res.ok(); } ); From 851c125fc8cba0ba1cef41da9f013116dda4a947 Mon Sep 17 00:00:00 2001 From: Sandra Gonzales Date: Tue, 8 Sep 2020 14:59:18 -0400 Subject: [PATCH 36/58] [Ingest Manager] install previous version of package if update fails (#76694) * add InstallType and getInstallType helper * rollback to previous version if update fails or unisntall if not an update * fix pipelines from failed update not removing if update fails after installing pipelines and rolling back to previous version * change type from enum to union, improve getInstallType, add ts-config comment * throw error if no install type, update logging errors --- .../ingest_manager/common/types/models/epm.ts | 2 + .../server/routes/epm/handlers.ts | 23 ++++-- .../services/epm/packages/install.test.ts | 77 +++++++++++++++++++ .../server/services/epm/packages/install.ts | 49 ++++++++++-- .../ingest_manager/server/types/index.tsx | 1 + 5 files changed, 139 insertions(+), 13 deletions(-) create mode 100644 x-pack/plugins/ingest_manager/server/services/epm/packages/install.test.ts diff --git a/x-pack/plugins/ingest_manager/common/types/models/epm.ts b/x-pack/plugins/ingest_manager/common/types/models/epm.ts index 140a76ac85e61..96810a2b78461 100644 --- a/x-pack/plugins/ingest_manager/common/types/models/epm.ts +++ b/x-pack/plugins/ingest_manager/common/types/models/epm.ts @@ -19,6 +19,8 @@ export enum InstallStatus { uninstalling = 'uninstalling', } +export type InstallType = 'reinstall' | 'reupdate' | 'rollback' | 'update' | 'install'; + export type EpmPackageInstallStatus = 'installed' | 'installing'; export type DetailViewPanelName = 'overview' | 'usages' | 'settings'; diff --git a/x-pack/plugins/ingest_manager/server/routes/epm/handlers.ts b/x-pack/plugins/ingest_manager/server/routes/epm/handlers.ts index 6d7252ffec41a..b19960cc90228 100644 --- a/x-pack/plugins/ingest_manager/server/routes/epm/handlers.ts +++ b/x-pack/plugins/ingest_manager/server/routes/epm/handlers.ts @@ -34,6 +34,7 @@ import { } from '../../services/epm/packages'; import { IngestManagerError, defaultIngestErrorHandler } from '../../errors'; import { splitPkgKey } from '../../services/epm/registry'; +import { getInstallType } from '../../services/epm/packages/install'; export const getCategoriesHandler: RequestHandler< undefined, @@ -138,6 +139,8 @@ export const installPackageHandler: RequestHandler< const callCluster = context.core.elasticsearch.legacy.client.callAsCurrentUser; const { pkgkey } = request.params; const { pkgName, pkgVersion } = splitPkgKey(pkgkey); + const installedPkg = await getInstallationObject({ savedObjectsClient, pkgName }); + const installType = getInstallType({ pkgVersion, installedPkg }); try { const res = await installPackage({ savedObjectsClient, @@ -156,15 +159,25 @@ export const installPackageHandler: RequestHandler< if (e instanceof IngestManagerError) { return defaultResult; } - // if there is an unknown server error, uninstall any package assets + + // if there is an unknown server error, uninstall any package assets or reinstall the previous version if update try { - const installedPkg = await getInstallationObject({ savedObjectsClient, pkgName }); - const isUpdate = installedPkg && installedPkg.attributes.version < pkgVersion ? true : false; - if (!isUpdate) { + if (installType === 'install' || installType === 'reinstall') { + logger.error(`uninstalling ${pkgkey} after error installing`); await removeInstallation({ savedObjectsClient, pkgkey, callCluster }); } + if (installType === 'update') { + // @ts-ignore installType conditions already check for existence of installedPkg + const prevVersion = `${pkgName}-${installedPkg.attributes.version}`; + logger.error(`rolling back to ${prevVersion} after error installing ${pkgkey}`); + await installPackage({ + savedObjectsClient, + pkgkey: prevVersion, + callCluster, + }); + } } catch (error) { - logger.error(`could not remove failed installation ${error}`); + logger.error(`failed to uninstall or rollback package after installation error ${error}`); } return defaultResult; } diff --git a/x-pack/plugins/ingest_manager/server/services/epm/packages/install.test.ts b/x-pack/plugins/ingest_manager/server/services/epm/packages/install.test.ts new file mode 100644 index 0000000000000..cc26e631a6215 --- /dev/null +++ b/x-pack/plugins/ingest_manager/server/services/epm/packages/install.test.ts @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { ElasticsearchAssetType, Installation, KibanaAssetType } from '../../../types'; +import { SavedObject } from 'src/core/server'; +import { getInstallType } from './install'; + +const mockInstallation: SavedObject = { + id: 'test-pkg', + references: [], + type: 'epm-packages', + attributes: { + id: 'test-pkg', + installed_kibana: [{ type: KibanaAssetType.dashboard, id: 'dashboard-1' }], + installed_es: [{ type: ElasticsearchAssetType.ingestPipeline, id: 'pipeline' }], + es_index_patterns: { pattern: 'pattern-name' }, + name: 'test packagek', + version: '1.0.0', + install_status: 'installed', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + }, +}; +const mockInstallationUpdateFail: SavedObject = { + id: 'test-pkg', + references: [], + type: 'epm-packages', + attributes: { + id: 'test-pkg', + installed_kibana: [{ type: KibanaAssetType.dashboard, id: 'dashboard-1' }], + installed_es: [{ type: ElasticsearchAssetType.ingestPipeline, id: 'pipeline' }], + es_index_patterns: { pattern: 'pattern-name' }, + name: 'test packagek', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.1', + install_started_at: new Date().toISOString(), + }, +}; +describe('install', () => { + describe('getInstallType', () => { + it('should return correct type when installing and no other version is currently installed', () => {}); + const installTypeInstall = getInstallType({ pkgVersion: '1.0.0', installedPkg: undefined }); + expect(installTypeInstall).toBe('install'); + + it('should return correct type when installing the same version', () => {}); + const installTypeReinstall = getInstallType({ + pkgVersion: '1.0.0', + installedPkg: mockInstallation, + }); + expect(installTypeReinstall).toBe('reinstall'); + + it('should return correct type when moving from one version to another', () => {}); + const installTypeUpdate = getInstallType({ + pkgVersion: '1.0.1', + installedPkg: mockInstallation, + }); + expect(installTypeUpdate).toBe('update'); + + it('should return correct type when update fails and trys again', () => {}); + const installTypeReupdate = getInstallType({ + pkgVersion: '1.0.1', + installedPkg: mockInstallationUpdateFail, + }); + expect(installTypeReupdate).toBe('reupdate'); + + it('should return correct type when attempting to rollback from a failed update', () => {}); + const installTypeRollback = getInstallType({ + pkgVersion: '1.0.0', + installedPkg: mockInstallationUpdateFail, + }); + expect(installTypeRollback).toBe('rollback'); + }); +}); diff --git a/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts b/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts index e49dbe8f0b5d4..d1d2352f138b8 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { SavedObjectsClientContract } from 'src/core/server'; +import { SavedObject, SavedObjectsClientContract } from 'src/core/server'; import semver from 'semver'; import { PACKAGES_SAVED_OBJECT_TYPE, MAX_TIME_COMPLETE_INSTALL } from '../../../constants'; import { @@ -16,6 +16,7 @@ import { KibanaAssetReference, EsAssetReference, ElasticsearchAssetType, + InstallType, } from '../../../types'; import { installIndexPatterns } from '../kibana/index_pattern/install'; import * as Registry from '../registry'; @@ -110,11 +111,13 @@ export async function installPackage({ const latestPackage = await Registry.fetchFindLatestPackage(pkgName); // get the currently installed package const installedPkg = await getInstallationObject({ savedObjectsClient, pkgName }); - const reinstall = pkgVersion === installedPkg?.attributes.version; - const reupdate = pkgVersion === installedPkg?.attributes.install_version; - // let the user install if using the force flag or this is a reinstall or reupdate due to intallation interruption - if (semver.lt(pkgVersion, latestPackage.version) && !force && !reinstall && !reupdate) { + const installType = getInstallType({ pkgVersion, installedPkg }); + + // let the user install if using the force flag or needing to reinstall or install a previous version due to failed update + const installOutOfDateVersionOk = + installType === 'reinstall' || installType === 'reupdate' || installType === 'rollback'; + if (semver.lt(pkgVersion, latestPackage.version) && !force && !installOutOfDateVersionOk) { throw new PackageOutdatedError(`${pkgkey} is out-of-date and cannot be installed or updated`); } const paths = await Registry.getArchiveInfo(pkgName, pkgVersion); @@ -188,16 +191,26 @@ export async function installPackage({ // update current backing indices of each data stream await updateCurrentWriteIndices(callCluster, installedTemplates); - // if this is an update, delete the previous version's pipelines - if (installedPkg && !reinstall) { + // if this is an update or retrying an update, delete the previous version's pipelines + if (installType === 'update' || installType === 'reupdate') { await deletePreviousPipelines( callCluster, savedObjectsClient, pkgName, + // @ts-ignore installType conditions already check for existence of installedPkg installedPkg.attributes.version ); } - + // pipelines from a different version may have installed during a failed update + if (installType === 'rollback') { + await deletePreviousPipelines( + callCluster, + savedObjectsClient, + pkgName, + // @ts-ignore installType conditions already check for existence of installedPkg + installedPkg.attributes.install_version + ); + } const installedTemplateRefs = installedTemplates.map((template) => ({ id: template.templateName, type: ElasticsearchAssetType.indexTemplate, @@ -326,3 +339,23 @@ export async function ensurePackagesCompletedInstall( await Promise.all(installingPromises); return installingPackages; } + +export function getInstallType({ + pkgVersion, + installedPkg, +}: { + pkgVersion: string; + installedPkg: SavedObject | undefined; +}): InstallType { + const isInstalledPkg = !!installedPkg; + const currentPkgVersion = installedPkg?.attributes.version; + const lastStartedInstallVersion = installedPkg?.attributes.install_version; + if (!isInstalledPkg) return 'install'; + if (pkgVersion === currentPkgVersion && pkgVersion !== lastStartedInstallVersion) + return 'rollback'; + if (pkgVersion === currentPkgVersion) return 'reinstall'; + if (pkgVersion === lastStartedInstallVersion && pkgVersion !== currentPkgVersion) + return 'reupdate'; + if (pkgVersion !== lastStartedInstallVersion && pkgVersion !== currentPkgVersion) return 'update'; + throw new Error('unknown install type'); +} diff --git a/x-pack/plugins/ingest_manager/server/types/index.tsx b/x-pack/plugins/ingest_manager/server/types/index.tsx index e01568cfbb3c9..2746dfcd00ce3 100644 --- a/x-pack/plugins/ingest_manager/server/types/index.tsx +++ b/x-pack/plugins/ingest_manager/server/types/index.tsx @@ -63,6 +63,7 @@ export { IndexTemplateMappings, Settings, SettingsSOAttributes, + InstallType, // Agent Request types PostAgentEnrollRequest, PostAgentCheckinRequest, From bb2aa42e39697960394122c21355f87553ee91c6 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Tue, 8 Sep 2020 15:48:01 -0400 Subject: [PATCH 37/58] [SECURITY_SOLUTION][ENDPOINT] Fix `created_by` for Trusted Apps Create api to reflect current logged in user (#76557) * Fix: use exceptionLists client from route handler context * Adjust test to use `listMock` * Remove exceptionListClient service from `EndpointAppContextService` * Added UT for Trusted Apps to validate that ExceptionListClient from context is used Co-authored-by: Elastic Machine --- .../endpoint/endpoint_app_context_services.ts | 11 ----- .../server/endpoint/mocks.ts | 2 - .../endpoint/routes/trusted_apps/handlers.ts | 22 +++++++--- .../routes/trusted_apps/trusted_apps.test.ts | 41 ++++++++++++++++--- .../security_solution/server/plugin.ts | 1 - 5 files changed, 52 insertions(+), 25 deletions(-) diff --git a/x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts b/x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts index 6a8d56ff41a04..0ec0db9f32776 100644 --- a/x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts +++ b/x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts @@ -12,12 +12,10 @@ import { import { AgentService, IngestManagerStartContract } from '../../../ingest_manager/server'; import { getPackagePolicyCreateCallback } from './ingest_integration'; import { ManifestManager } from './services/artifacts'; -import { ExceptionListClient } from '../../../lists/server'; export type EndpointAppContextServiceStartContract = Partial< Pick > & { - exceptionsListService: ExceptionListClient; logger: Logger; manifestManager?: ManifestManager; registerIngestCallback?: IngestManagerStartContract['registerExternalCallback']; @@ -32,11 +30,9 @@ export class EndpointAppContextService { private agentService: AgentService | undefined; private manifestManager: ManifestManager | undefined; private savedObjectsStart: SavedObjectsServiceStart | undefined; - private exceptionsListService: ExceptionListClient | undefined; public start(dependencies: EndpointAppContextServiceStartContract) { this.agentService = dependencies.agentService; - this.exceptionsListService = dependencies.exceptionsListService; this.manifestManager = dependencies.manifestManager; this.savedObjectsStart = dependencies.savedObjectsStart; @@ -54,13 +50,6 @@ export class EndpointAppContextService { return this.agentService; } - public getExceptionsList() { - if (!this.exceptionsListService) { - throw new Error('exceptionsListService not set'); - } - return this.exceptionsListService; - } - public getManifestManager(): ManifestManager | undefined { return this.manifestManager; } diff --git a/x-pack/plugins/security_solution/server/endpoint/mocks.ts b/x-pack/plugins/security_solution/server/endpoint/mocks.ts index 03754c7be7a5d..b5f35a198fa9e 100644 --- a/x-pack/plugins/security_solution/server/endpoint/mocks.ts +++ b/x-pack/plugins/security_solution/server/endpoint/mocks.ts @@ -21,7 +21,6 @@ import { import { ManifestManager } from './services/artifacts/manifest_manager/manifest_manager'; import { getManifestManagerMock } from './services/artifacts/manifest_manager/manifest_manager.mock'; import { EndpointAppContext } from './types'; -import { listMock } from '../../../lists/server/mocks'; /** * Creates a mocked EndpointAppContext. @@ -59,7 +58,6 @@ export const createMockEndpointAppContextServiceStartContract = (): jest.Mocked< > => { return { agentService: createMockAgentService(), - exceptionsListService: listMock.getExceptionListClient(), logger: loggingSystemMock.create().get('mock_endpoint_app_context'), savedObjectsStart: savedObjectsServiceMock.createStartContract(), manifestManager: getManifestManagerMock(), diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/trusted_apps/handlers.ts b/x-pack/plugins/security_solution/server/endpoint/routes/trusted_apps/handlers.ts index a3e6f54f3eee8..ec4d1efb81b11 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/trusted_apps/handlers.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/trusted_apps/handlers.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { RequestHandler } from 'kibana/server'; +import { RequestHandler, RequestHandlerContext } from 'kibana/server'; import { GetTrustedAppsListRequest, GetTrustedListAppsResponse, @@ -14,6 +14,17 @@ import { EndpointAppContext } from '../../types'; import { exceptionItemToTrustedAppItem, newTrustedAppItemToExceptionItem } from './utils'; import { ENDPOINT_TRUSTED_APPS_LIST_ID } from '../../../../../lists/common/constants'; import { DeleteTrustedAppsRequestParams } from './types'; +import { ExceptionListClient } from '../../../../../lists/server'; + +const exceptionListClientFromContext = (context: RequestHandlerContext): ExceptionListClient => { + const exceptionLists = context.lists?.getExceptionListClient(); + + if (!exceptionLists) { + throw new Error('Exception List client not found'); + } + + return exceptionLists; +}; export const getTrustedAppsDeleteRouteHandler = ( endpointAppContext: EndpointAppContext @@ -21,9 +32,8 @@ export const getTrustedAppsDeleteRouteHandler = ( const logger = endpointAppContext.logFactory.get('trusted_apps'); return async (context, req, res) => { - const exceptionsListService = endpointAppContext.service.getExceptionsList(); - try { + const exceptionsListService = exceptionListClientFromContext(context); const { id } = req.params; const response = await exceptionsListService.deleteExceptionListItem({ id, @@ -49,10 +59,10 @@ export const getTrustedAppsListRouteHandler = ( const logger = endpointAppContext.logFactory.get('trusted_apps'); return async (context, req, res) => { - const exceptionsListService = endpointAppContext.service.getExceptionsList(); const { page, per_page: perPage } = req.query; try { + const exceptionsListService = exceptionListClientFromContext(context); // Ensure list is created if it does not exist await exceptionsListService.createTrustedAppsList(); const results = await exceptionsListService.findExceptionListItem({ @@ -83,11 +93,11 @@ export const getTrustedAppsCreateRouteHandler = ( ): RequestHandler => { const logger = endpointAppContext.logFactory.get('trusted_apps'); - return async (constext, req, res) => { - const exceptionsListService = endpointAppContext.service.getExceptionsList(); + return async (context, req, res) => { const newTrustedApp = req.body; try { + const exceptionsListService = exceptionListClientFromContext(context); // Ensure list is created if it does not exist await exceptionsListService.createTrustedAppsList(); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/trusted_apps/trusted_apps.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/trusted_apps/trusted_apps.test.ts index 2325036ef40ae..eeee2d99bf26d 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/trusted_apps/trusted_apps.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/trusted_apps/trusted_apps.test.ts @@ -24,15 +24,23 @@ import { import { xpackMocks } from '../../../../../../mocks'; import { ENDPOINT_TRUSTED_APPS_LIST_ID } from '../../../../../lists/common/constants'; import { EndpointAppContext } from '../../types'; -import { ExceptionListClient } from '../../../../../lists/server'; -import { getExceptionListItemSchemaMock } from '../../../../../lists/common/schemas/response/exception_list_item_schema.mock'; +import { ExceptionListClient, ListClient } from '../../../../../lists/server'; +import { listMock } from '../../../../../lists/server/mocks'; import { ExceptionListItemSchema } from '../../../../../lists/common/schemas/response'; import { DeleteTrustedAppsRequestParams } from './types'; +import { getExceptionListItemSchemaMock } from '../../../../../lists/common/schemas/response/exception_list_item_schema.mock'; + +type RequestHandlerContextWithLists = ReturnType & { + lists?: { + getListClient: () => jest.Mocked; + getExceptionListClient: () => jest.Mocked; + }; +}; describe('when invoking endpoint trusted apps route handlers', () => { let routerMock: jest.Mocked; let endpointAppContextService: EndpointAppContextService; - let context: ReturnType; + let context: RequestHandlerContextWithLists; let response: ReturnType; let exceptionsListClient: jest.Mocked; let endpointAppContext: EndpointAppContext; @@ -41,7 +49,7 @@ describe('when invoking endpoint trusted apps route handlers', () => { routerMock = httpServiceMock.createRouter(); endpointAppContextService = new EndpointAppContextService(); const startContract = createMockEndpointAppContextServiceStartContract(); - exceptionsListClient = startContract.exceptionsListService as jest.Mocked; + exceptionsListClient = listMock.getExceptionListClient() as jest.Mocked; endpointAppContextService.start(startContract); endpointAppContext = { ...createMockEndpointAppContext(), @@ -50,7 +58,13 @@ describe('when invoking endpoint trusted apps route handlers', () => { registerTrustedAppsRoutes(routerMock, endpointAppContext); // For use in individual API calls - context = xpackMocks.createRequestHandlerContext(); + context = { + ...xpackMocks.createRequestHandlerContext(), + lists: { + getListClient: jest.fn(), + getExceptionListClient: jest.fn().mockReturnValue(exceptionsListClient), + }, + }; response = httpServerMock.createResponseFactory(); }); @@ -74,6 +88,12 @@ describe('when invoking endpoint trusted apps route handlers', () => { )!; }); + it('should use ExceptionListClient from route handler context', async () => { + const request = createListRequest(); + await routeHandler(context, request, response); + expect(context.lists?.getExceptionListClient).toHaveBeenCalled(); + }); + it('should create the Trusted Apps List first', async () => { const request = createListRequest(); await routeHandler(context, request, response); @@ -155,6 +175,12 @@ describe('when invoking endpoint trusted apps route handlers', () => { }); }); + it('should use ExceptionListClient from route handler context', async () => { + const request = createPostRequest(); + await routeHandler(context, request, response); + expect(context.lists?.getExceptionListClient).toHaveBeenCalled(); + }); + it('should create trusted app list first', async () => { const request = createPostRequest(); await routeHandler(context, request, response); @@ -238,6 +264,11 @@ describe('when invoking endpoint trusted apps route handlers', () => { }); }); + it('should use ExceptionListClient from route handler context', async () => { + await routeHandler(context, request, response); + expect(context.lists?.getExceptionListClient).toHaveBeenCalled(); + }); + it('should return 200 on successful delete', async () => { await routeHandler(context, request, response); expect(exceptionsListClient.deleteExceptionListItem).toHaveBeenCalledWith({ diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts index 24cf1f8746d89..1f4790a8981c9 100644 --- a/x-pack/plugins/security_solution/server/plugin.ts +++ b/x-pack/plugins/security_solution/server/plugin.ts @@ -315,7 +315,6 @@ export class Plugin implements IPlugin Date: Tue, 8 Sep 2020 23:01:31 +0300 Subject: [PATCH 38/58] Remove legacy SavedObjects (#76852) * remove legacy SO integration * cleanup integration in the legacy platorm * remove so schema * update docs * remove leftovers, update docs * update docs after merge master --- ...in-core-server.savedobjectsservicesetup.md | 2 - ...r.savedobjectsservicesetup.registertype.md | 4 - kibana.d.ts | 2 - src/core/server/index.ts | 2 - src/core/server/legacy/legacy_service.mock.ts | 8 +- src/core/server/legacy/legacy_service.ts | 2 - src/core/server/legacy/types.ts | 5 +- .../__snapshots__/utils.test.ts.snap | 184 -------- src/core/server/saved_objects/index.ts | 2 - .../migrations/core/document_migrator.test.ts | 25 - .../migrations/core/document_migrator.ts | 13 +- .../migrations/kibana/kibana_migrator.test.ts | 1 - .../migrations/kibana/kibana_migrator.ts | 4 - .../saved_objects_service.mock.ts | 9 +- .../saved_objects_service.test.ts | 5 +- .../saved_objects/saved_objects_service.ts | 37 +- src/core/server/saved_objects/schema/index.ts | 20 - .../saved_objects/schema/schema.test.ts | 106 ----- .../server/saved_objects/schema/schema.ts | 116 ----- .../server/saved_objects/service/index.ts | 31 -- .../service/lib/repository.test.js | 1 - .../saved_objects/service/lib/repository.ts | 8 +- src/core/server/saved_objects/types.ts | 95 +--- src/core/server/saved_objects/utils.test.ts | 445 ------------------ src/core/server/saved_objects/utils.ts | 117 ----- .../server/saved_objects/validation/index.ts | 67 --- .../server/saved_objects/validation/readme.md | 63 --- .../validation/validation.test.ts | 54 --- src/core/server/server.api.md | 74 +-- src/core/server/server.ts | 1 - .../create_or_upgrade.test.ts | 6 +- .../integration_tests/lib/servers.ts | 3 +- src/core/test_helpers/kbn_server.ts | 5 +- .../plugin_spec/plugin_spec_options.d.ts | 4 - src/legacy/plugin_discovery/types.ts | 7 - src/legacy/server/kbn_server.d.ts | 27 +- src/legacy/server/kbn_server.js | 4 - .../saved_objects/saved_objects_mixin.js | 104 ---- .../saved_objects/saved_objects_mixin.test.js | 267 ----------- .../__tests__/collect_ui_exports.js | 117 ----- src/legacy/ui/ui_render/ui_render_mixin.js | 10 +- .../apis/saved_objects/migrations.ts | 3 - .../settings/apm_indices/get_apm_indices.ts | 6 +- x-pack/plugins/apm/server/routes/typings.ts | 7 - 44 files changed, 47 insertions(+), 2026 deletions(-) delete mode 100644 src/core/server/saved_objects/__snapshots__/utils.test.ts.snap delete mode 100644 src/core/server/saved_objects/schema/index.ts delete mode 100644 src/core/server/saved_objects/schema/schema.test.ts delete mode 100644 src/core/server/saved_objects/schema/schema.ts delete mode 100644 src/core/server/saved_objects/utils.test.ts delete mode 100644 src/core/server/saved_objects/utils.ts delete mode 100644 src/core/server/saved_objects/validation/index.ts delete mode 100644 src/core/server/saved_objects/validation/readme.md delete mode 100644 src/core/server/saved_objects/validation/validation.test.ts delete mode 100644 src/legacy/server/saved_objects/saved_objects_mixin.js delete mode 100644 src/legacy/server/saved_objects/saved_objects_mixin.test.js delete mode 100644 src/legacy/ui/ui_exports/__tests__/collect_ui_exports.js diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.md index 6ef7b991bb159..650459bfdb435 100644 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.md +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.md @@ -16,8 +16,6 @@ export interface SavedObjectsServiceSetup When plugins access the Saved Objects client, a new client is created using the factory provided to `setClientFactory` and wrapped by all wrappers registered through `addClientWrapper`. -All the setup APIs will throw if called after the service has started, and therefor cannot be used from legacy plugin code. Legacy plugins should use the legacy savedObject service until migrated. - ## Example 1 diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md index 57c9e04966c1b..54e01d3110a2d 100644 --- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md @@ -14,10 +14,6 @@ See the [mappings format](./kibana-plugin-core-server.savedobjectstypemappingdef registerType: (type: SavedObjectsType) => void; ``` -## Remarks - -The type definition is an aggregation of the legacy savedObjects `schema`, `mappings` and `migration` concepts. This API is the single entry point to register saved object types in the new platform. - ## Example diff --git a/kibana.d.ts b/kibana.d.ts index d64752abd8b60..517bda374af9d 100644 --- a/kibana.d.ts +++ b/kibana.d.ts @@ -39,8 +39,6 @@ export namespace Legacy { export type KibanaConfig = LegacyKibanaServer.KibanaConfig; export type Request = LegacyKibanaServer.Request; export type ResponseToolkit = LegacyKibanaServer.ResponseToolkit; - export type SavedObjectsClient = LegacyKibanaServer.SavedObjectsClient; - export type SavedObjectsService = LegacyKibanaServer.SavedObjectsLegacyService; export type Server = LegacyKibanaServer.Server; export type InitPluginFunction = LegacyKibanaPluginSpec.InitPluginFunction; diff --git a/src/core/server/index.ts b/src/core/server/index.ts index c17d3d7546779..97aca74bfd48f 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -266,9 +266,7 @@ export { SavedObjectUnsanitizedDoc, SavedObjectsRepositoryFactory, SavedObjectsResolveImportErrorsOptions, - SavedObjectsSchema, SavedObjectsSerializer, - SavedObjectsLegacyService, SavedObjectsUpdateOptions, SavedObjectsUpdateResponse, SavedObjectsAddToNamespacesOptions, diff --git a/src/core/server/legacy/legacy_service.mock.ts b/src/core/server/legacy/legacy_service.mock.ts index 26ec52185a5d8..c27f5be04d965 100644 --- a/src/core/server/legacy/legacy_service.mock.ts +++ b/src/core/server/legacy/legacy_service.mock.ts @@ -24,13 +24,7 @@ type LegacyServiceMock = jest.Mocked & { legacyId const createDiscoverPluginsMock = (): LegacyServiceDiscoverPlugins => ({ pluginSpecs: [], - uiExports: { - savedObjectSchemas: {}, - savedObjectMappings: [], - savedObjectMigrations: {}, - savedObjectValidations: {}, - savedObjectsManagement: {}, - }, + uiExports: {}, navLinks: [], pluginExtendedConfig: { get: jest.fn(), diff --git a/src/core/server/legacy/legacy_service.ts b/src/core/server/legacy/legacy_service.ts index 880011d2e1923..b95644590b4e9 100644 --- a/src/core/server/legacy/legacy_service.ts +++ b/src/core/server/legacy/legacy_service.ts @@ -341,11 +341,9 @@ export class LegacyService implements CoreService { registerStaticDir: setupDeps.core.http.registerStaticDir, }, hapiServer: setupDeps.core.http.server, - kibanaMigrator: startDeps.core.savedObjects.migrator, uiPlugins: setupDeps.uiPlugins, elasticsearch: setupDeps.core.elasticsearch, rendering: setupDeps.core.rendering, - savedObjectsClientProvider: startDeps.core.savedObjects.clientProvider, legacy: this.legacyInternals, }, logger: this.coreContext.logger, diff --git a/src/core/server/legacy/types.ts b/src/core/server/legacy/types.ts index cf08689a6d0d4..1105308fd44cf 100644 --- a/src/core/server/legacy/types.ts +++ b/src/core/server/legacy/types.ts @@ -24,7 +24,6 @@ import { KibanaRequest, LegacyRequest } from '../http'; import { InternalCoreSetup, InternalCoreStart } from '../internal_types'; import { PluginsServiceSetup, PluginsServiceStart, UiPlugins } from '../plugins'; import { InternalRenderingServiceSetup } from '../rendering'; -import { SavedObjectsLegacyUiExports } from '../types'; /** * @internal @@ -128,13 +127,13 @@ export type LegacyNavLink = Omit; unknown?: [{ pluginSpec: LegacyPluginSpec; type: unknown }]; -}; +} /** * @public diff --git a/src/core/server/saved_objects/__snapshots__/utils.test.ts.snap b/src/core/server/saved_objects/__snapshots__/utils.test.ts.snap deleted file mode 100644 index 7cd0297e57857..0000000000000 --- a/src/core/server/saved_objects/__snapshots__/utils.test.ts.snap +++ /dev/null @@ -1,184 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`convertLegacyTypes converts the legacy mappings using default values if no schemas are specified 1`] = ` -Array [ - Object { - "convertToAliasScript": undefined, - "hidden": false, - "indexPattern": undefined, - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldA": Object { - "type": "text", - }, - }, - }, - "migrations": Object {}, - "name": "typeA", - "namespaceType": "single", - }, - Object { - "convertToAliasScript": undefined, - "hidden": false, - "indexPattern": undefined, - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldB": Object { - "type": "text", - }, - }, - }, - "migrations": Object {}, - "name": "typeB", - "namespaceType": "single", - }, - Object { - "convertToAliasScript": undefined, - "hidden": false, - "indexPattern": undefined, - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldC": Object { - "type": "text", - }, - }, - }, - "migrations": Object {}, - "name": "typeC", - "namespaceType": "single", - }, -] -`; - -exports[`convertLegacyTypes merges everything when all are present 1`] = ` -Array [ - Object { - "convertToAliasScript": undefined, - "hidden": true, - "indexPattern": "myIndex", - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldA": Object { - "type": "text", - }, - }, - }, - "migrations": Object { - "1.0.0": [Function], - "2.0.4": [Function], - }, - "name": "typeA", - "namespaceType": "agnostic", - }, - Object { - "convertToAliasScript": "some alias script", - "hidden": false, - "indexPattern": undefined, - "management": undefined, - "mappings": Object { - "properties": Object { - "anotherFieldB": Object { - "type": "boolean", - }, - "fieldB": Object { - "type": "text", - }, - }, - }, - "migrations": Object {}, - "name": "typeB", - "namespaceType": "single", - }, - Object { - "convertToAliasScript": undefined, - "hidden": false, - "indexPattern": undefined, - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldC": Object { - "type": "text", - }, - }, - }, - "migrations": Object { - "1.5.3": [Function], - }, - "name": "typeC", - "namespaceType": "single", - }, -] -`; - -exports[`convertLegacyTypes merges the mappings and the schema to create the type when schema exists for the type 1`] = ` -Array [ - Object { - "convertToAliasScript": undefined, - "hidden": true, - "indexPattern": "fooBar", - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldA": Object { - "type": "text", - }, - }, - }, - "migrations": Object {}, - "name": "typeA", - "namespaceType": "agnostic", - }, - Object { - "convertToAliasScript": undefined, - "hidden": false, - "indexPattern": "barBaz", - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldB": Object { - "type": "text", - }, - }, - }, - "migrations": Object {}, - "name": "typeB", - "namespaceType": "multiple", - }, - Object { - "convertToAliasScript": undefined, - "hidden": false, - "indexPattern": undefined, - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldC": Object { - "type": "text", - }, - }, - }, - "migrations": Object {}, - "name": "typeC", - "namespaceType": "single", - }, - Object { - "convertToAliasScript": undefined, - "hidden": false, - "indexPattern": "bazQux", - "management": undefined, - "mappings": Object { - "properties": Object { - "fieldD": Object { - "type": "text", - }, - }, - }, - "migrations": Object {}, - "name": "typeD", - "namespaceType": "agnostic", - }, -] -`; diff --git a/src/core/server/saved_objects/index.ts b/src/core/server/saved_objects/index.ts index a294b28753f7b..f2bae29c4743b 100644 --- a/src/core/server/saved_objects/index.ts +++ b/src/core/server/saved_objects/index.ts @@ -19,8 +19,6 @@ export * from './service'; -export { SavedObjectsSchema } from './schema'; - export * from './import'; export { diff --git a/src/core/server/saved_objects/migrations/core/document_migrator.test.ts b/src/core/server/saved_objects/migrations/core/document_migrator.test.ts index 4fc94d1992869..4cc4f696d307c 100644 --- a/src/core/server/saved_objects/migrations/core/document_migrator.test.ts +++ b/src/core/server/saved_objects/migrations/core/document_migrator.test.ts @@ -48,7 +48,6 @@ describe('DocumentMigrator', () => { return { kibanaVersion: '25.2.3', typeRegistry: createRegistry(), - validateDoc: _.noop, log: mockLogger, }; } @@ -60,7 +59,6 @@ describe('DocumentMigrator', () => { name: 'foo', migrations: _.noop as any, }), - validateDoc: _.noop, log: mockLogger, }; expect(() => new DocumentMigrator(invalidDefinition)).toThrow( @@ -77,7 +75,6 @@ describe('DocumentMigrator', () => { bar: (doc) => doc, }, }), - validateDoc: _.noop, log: mockLogger, }; expect(() => new DocumentMigrator(invalidDefinition)).toThrow( @@ -94,7 +91,6 @@ describe('DocumentMigrator', () => { '1.2.3': 23 as any, }, }), - validateDoc: _.noop, log: mockLogger, }; expect(() => new DocumentMigrator(invalidDefinition)).toThrow( @@ -633,27 +629,6 @@ describe('DocumentMigrator', () => { bbb: '3.2.3', }); }); - - test('fails if the validate doc throws', () => { - const migrator = new DocumentMigrator({ - ...testOpts(), - typeRegistry: createRegistry({ - name: 'aaa', - migrations: { - '2.3.4': (d) => set(d, 'attributes.counter', 42), - }, - }), - validateDoc: (d) => { - if ((d.attributes as any).counter === 42) { - throw new Error('Meaningful!'); - } - }, - }); - - const doc = { id: '1', type: 'foo', attributes: {}, migrationVersion: {}, aaa: {} }; - - expect(() => migrator.migrate(doc)).toThrow(/Meaningful/); - }); }); function renameAttr(path: string, newPath: string) { diff --git a/src/core/server/saved_objects/migrations/core/document_migrator.ts b/src/core/server/saved_objects/migrations/core/document_migrator.ts index c50f755fda994..345704fbfd783 100644 --- a/src/core/server/saved_objects/migrations/core/document_migrator.ts +++ b/src/core/server/saved_objects/migrations/core/document_migrator.ts @@ -73,12 +73,9 @@ import { SavedObjectMigrationFn } from '../types'; export type TransformFn = (doc: SavedObjectUnsanitizedDoc) => SavedObjectUnsanitizedDoc; -type ValidateDoc = (doc: SavedObjectUnsanitizedDoc) => void; - interface DocumentMigratorOptions { kibanaVersion: string; typeRegistry: ISavedObjectTypeRegistry; - validateDoc: ValidateDoc; log: Logger; } @@ -113,19 +110,16 @@ export class DocumentMigrator implements VersionedTransformer { * @param {DocumentMigratorOptions} opts * @prop {string} kibanaVersion - The current version of Kibana * @prop {SavedObjectTypeRegistry} typeRegistry - The type registry to get type migrations from - * @prop {ValidateDoc} validateDoc - A function which, given a document throws an error if it is - * not up to date. This is used to ensure we don't let unmigrated documents slip through. * @prop {Logger} log - The migration logger * @memberof DocumentMigrator */ - constructor({ typeRegistry, kibanaVersion, log, validateDoc }: DocumentMigratorOptions) { + constructor({ typeRegistry, kibanaVersion, log }: DocumentMigratorOptions) { validateMigrationDefinition(typeRegistry); this.migrations = buildActiveMigrations(typeRegistry, log); this.transformDoc = buildDocumentTransform({ kibanaVersion, migrations: this.migrations, - validateDoc, }); } @@ -231,21 +225,16 @@ function buildActiveMigrations( * Creates a function which migrates and validates any document that is passed to it. */ function buildDocumentTransform({ - kibanaVersion, migrations, - validateDoc, }: { kibanaVersion: string; migrations: ActiveMigrations; - validateDoc: ValidateDoc; }): TransformFn { return function transformAndValidate(doc: SavedObjectUnsanitizedDoc) { const result = doc.migrationVersion ? applyMigrations(doc, migrations) : markAsUpToDate(doc, migrations); - validateDoc(result); - // In order to keep tests a bit more stable, we won't // tack on an empy migrationVersion to docs that have // no migrations defined. diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts index cc443093e30a3..7eb2cfefe4620 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts @@ -134,7 +134,6 @@ const mockOptions = () => { const options: MockedOptions = { logger: loggingSystemMock.create().get(), kibanaVersion: '8.2.3', - savedObjectValidations: {}, typeRegistry: createRegistry([ { name: 'testtype', diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts index 85b9099308807..b9f24a75c01d2 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts @@ -28,7 +28,6 @@ import { BehaviorSubject } from 'rxjs'; import { Logger } from '../../../logging'; import { IndexMapping, SavedObjectsTypeMappingDefinitions } from '../../mappings'; import { SavedObjectUnsanitizedDoc, SavedObjectsSerializer } from '../../serialization'; -import { docValidator, PropertyValidators } from '../../validation'; import { buildActiveMappings, IndexMigrator, MigrationResult, MigrationStatus } from '../core'; import { DocumentMigrator, VersionedTransformer } from '../core/document_migrator'; import { MigrationEsClient } from '../core/'; @@ -44,7 +43,6 @@ export interface KibanaMigratorOptions { kibanaConfig: KibanaConfigType; kibanaVersion: string; logger: Logger; - savedObjectValidations: PropertyValidators; } export type IKibanaMigrator = Pick; @@ -80,7 +78,6 @@ export class KibanaMigrator { typeRegistry, kibanaConfig, savedObjectsConfig, - savedObjectValidations, kibanaVersion, logger, }: KibanaMigratorOptions) { @@ -94,7 +91,6 @@ export class KibanaMigrator { this.documentMigrator = new DocumentMigrator({ kibanaVersion, typeRegistry, - validateDoc: docValidator(savedObjectValidations || {}), log: this.log, }); // Building the active mappings (and associated md5sums) is an expensive diff --git a/src/core/server/saved_objects/saved_objects_service.mock.ts b/src/core/server/saved_objects/saved_objects_service.mock.ts index 6f5ecb1eb464b..e3d44c20dd190 100644 --- a/src/core/server/saved_objects/saved_objects_service.mock.ts +++ b/src/core/server/saved_objects/saved_objects_service.mock.ts @@ -26,8 +26,7 @@ import { SavedObjectsServiceSetup, SavedObjectsServiceStart, } from './saved_objects_service'; -import { mockKibanaMigrator } from './migrations/kibana/kibana_migrator.mock'; -import { savedObjectsClientProviderMock } from './service/lib/scoped_client_provider.mock'; + import { savedObjectsRepositoryMock } from './service/lib/repository.mock'; import { savedObjectsClientMock } from './service/saved_objects_client.mock'; import { typeRegistryMock } from './saved_objects_type_registry.mock'; @@ -54,11 +53,7 @@ const createStartContractMock = () => { }; const createInternalStartContractMock = () => { - const internalStartContract: jest.Mocked = { - ...createStartContractMock(), - clientProvider: savedObjectsClientProviderMock.create(), - migrator: mockKibanaMigrator.create(), - }; + const internalStartContract: jest.Mocked = createStartContractMock(); return internalStartContract; }; diff --git a/src/core/server/saved_objects/saved_objects_service.test.ts b/src/core/server/saved_objects/saved_objects_service.test.ts index 8df6a07318c45..d6b30889eba5f 100644 --- a/src/core/server/saved_objects/saved_objects_service.test.ts +++ b/src/core/server/saved_objects/saved_objects_service.test.ts @@ -33,7 +33,6 @@ import { Env } from '../config'; import { configServiceMock } from '../mocks'; import { elasticsearchServiceMock } from '../elasticsearch/elasticsearch_service.mock'; import { elasticsearchClientMock } from '../elasticsearch/client/mocks'; -import { legacyServiceMock } from '../legacy/legacy_service.mock'; import { httpServiceMock } from '../http/http_service.mock'; import { httpServerMock } from '../http/http_server.mocks'; import { SavedObjectsClientFactoryProvider } from './service/lib'; @@ -65,7 +64,6 @@ describe('SavedObjectsService', () => { return { http: httpServiceMock.createInternalSetupContract(), elasticsearch: elasticsearchMock, - legacyPlugins: legacyServiceMock.createDiscoverPlugins(), }; }; @@ -239,8 +237,7 @@ describe('SavedObjectsService', () => { await soService.setup(createSetupDeps()); expect(migratorInstanceMock.runMigrations).toHaveBeenCalledTimes(0); - const startContract = await soService.start(createStartDeps()); - expect(startContract.migrator).toBe(migratorInstanceMock); + await soService.start(createStartDeps()); expect(migratorInstanceMock.runMigrations).toHaveBeenCalledTimes(1); }); diff --git a/src/core/server/saved_objects/saved_objects_service.ts b/src/core/server/saved_objects/saved_objects_service.ts index f05e912b12ad8..5cc59d55a254e 100644 --- a/src/core/server/saved_objects/saved_objects_service.ts +++ b/src/core/server/saved_objects/saved_objects_service.ts @@ -23,12 +23,10 @@ import { CoreService } from '../../types'; import { SavedObjectsClient, SavedObjectsClientProvider, - ISavedObjectsClientProvider, SavedObjectsClientProviderOptions, } from './'; import { KibanaMigrator, IKibanaMigrator } from './migrations'; import { CoreContext } from '../core_context'; -import { LegacyServiceDiscoverPlugins } from '../legacy'; import { ElasticsearchClient, IClusterClient, @@ -49,9 +47,7 @@ import { SavedObjectsClientWrapperFactory, } from './service/lib/scoped_client_provider'; import { Logger } from '../logging'; -import { convertLegacyTypes } from './utils'; import { SavedObjectTypeRegistry, ISavedObjectTypeRegistry } from './saved_objects_type_registry'; -import { PropertyValidators } from './validation'; import { SavedObjectsSerializer } from './serialization'; import { registerRoutes } from './routes'; import { ServiceStatus } from '../status'; @@ -67,9 +63,6 @@ import { createMigrationEsClient } from './migrations/core/'; * the factory provided to `setClientFactory` and wrapped by all wrappers * registered through `addClientWrapper`. * - * All the setup APIs will throw if called after the service has started, and therefor cannot be used - * from legacy plugin code. Legacy plugins should use the legacy savedObject service until migrated. - * * @example * ```ts * import { SavedObjectsClient, CoreSetup } from 'src/core/server'; @@ -155,9 +148,6 @@ export interface SavedObjectsServiceSetup { * } * } * ``` - * - * @remarks The type definition is an aggregation of the legacy savedObjects `schema`, `mappings` and `migration` concepts. - * This API is the single entry point to register saved object types in the new platform. */ registerType: (type: SavedObjectsType) => void; @@ -230,16 +220,7 @@ export interface SavedObjectsServiceStart { getTypeRegistry: () => ISavedObjectTypeRegistry; } -export interface InternalSavedObjectsServiceStart extends SavedObjectsServiceStart { - /** - * @deprecated Exposed only for injecting into Legacy - */ - migrator: IKibanaMigrator; - /** - * @deprecated Exposed only for injecting into Legacy - */ - clientProvider: ISavedObjectsClientProvider; -} +export type InternalSavedObjectsServiceStart = SavedObjectsServiceStart; /** * Factory provided when invoking a {@link SavedObjectsClientFactoryProvider | client factory provider} @@ -271,7 +252,6 @@ export interface SavedObjectsRepositoryFactory { /** @internal */ export interface SavedObjectsSetupDeps { http: InternalHttpServiceSetup; - legacyPlugins: LegacyServiceDiscoverPlugins; elasticsearch: InternalElasticsearchServiceSetup; } @@ -296,9 +276,8 @@ export class SavedObjectsService private clientFactoryProvider?: SavedObjectsClientFactoryProvider; private clientFactoryWrappers: WrappedClientFactoryWrapper[] = []; - private migrator$ = new Subject(); + private migrator$ = new Subject(); private typeRegistry = new SavedObjectTypeRegistry(); - private validations: PropertyValidators = {}; private started = false; constructor(private readonly coreContext: CoreContext) { @@ -310,13 +289,6 @@ export class SavedObjectsService this.setupDeps = setupDeps; - const legacyTypes = convertLegacyTypes( - setupDeps.legacyPlugins.uiExports, - setupDeps.legacyPlugins.pluginExtendedConfig - ); - legacyTypes.forEach((type) => this.typeRegistry.registerType(type)); - this.validations = setupDeps.legacyPlugins.uiExports.savedObjectValidations || {}; - const savedObjectsConfig = await this.coreContext.configService .atPath('savedObjects') .pipe(first()) @@ -471,8 +443,6 @@ export class SavedObjectsService this.started = true; return { - migrator, - clientProvider, getScopedClient: clientProvider.getClient.bind(clientProvider), createScopedRepository: repositoryFactory.createScopedRepository, createInternalRepository: repositoryFactory.createInternalRepository, @@ -488,13 +458,12 @@ export class SavedObjectsService savedObjectsConfig: SavedObjectsMigrationConfigType, client: IClusterClient, migrationsRetryDelay?: number - ): KibanaMigrator { + ): IKibanaMigrator { return new KibanaMigrator({ typeRegistry: this.typeRegistry, logger: this.logger, kibanaVersion: this.coreContext.env.packageInfo.version, savedObjectsConfig, - savedObjectValidations: this.validations, kibanaConfig, client: createMigrationEsClient(client.asInternalUser, this.logger, migrationsRetryDelay), }); diff --git a/src/core/server/saved_objects/schema/index.ts b/src/core/server/saved_objects/schema/index.ts deleted file mode 100644 index d30bbb8d34cd3..0000000000000 --- a/src/core/server/saved_objects/schema/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export { SavedObjectsSchema, SavedObjectsSchemaDefinition } from './schema'; diff --git a/src/core/server/saved_objects/schema/schema.test.ts b/src/core/server/saved_objects/schema/schema.test.ts deleted file mode 100644 index f2daa13e43fce..0000000000000 --- a/src/core/server/saved_objects/schema/schema.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { SavedObjectsSchema, SavedObjectsSchemaDefinition } from './schema'; - -describe('#isNamespaceAgnostic', () => { - const expectResult = (expected: boolean, schemaDefinition?: SavedObjectsSchemaDefinition) => { - const schema = new SavedObjectsSchema(schemaDefinition); - const result = schema.isNamespaceAgnostic('foo'); - expect(result).toBe(expected); - }; - - it(`returns false when no schema is defined`, () => { - expectResult(false); - }); - - it(`returns false for unknown types`, () => { - expectResult(false, { bar: {} }); - }); - - it(`returns false for non-namespace-agnostic type`, () => { - expectResult(false, { foo: { isNamespaceAgnostic: false } }); - expectResult(false, { foo: { isNamespaceAgnostic: undefined } }); - }); - - it(`returns true for explicitly namespace-agnostic type`, () => { - expectResult(true, { foo: { isNamespaceAgnostic: true } }); - }); -}); - -describe('#isSingleNamespace', () => { - const expectResult = (expected: boolean, schemaDefinition?: SavedObjectsSchemaDefinition) => { - const schema = new SavedObjectsSchema(schemaDefinition); - const result = schema.isSingleNamespace('foo'); - expect(result).toBe(expected); - }; - - it(`returns true when no schema is defined`, () => { - expectResult(true); - }); - - it(`returns true for unknown types`, () => { - expectResult(true, { bar: {} }); - }); - - it(`returns false for explicitly namespace-agnostic type`, () => { - expectResult(false, { foo: { isNamespaceAgnostic: true } }); - }); - - it(`returns false for explicitly multi-namespace type`, () => { - expectResult(false, { foo: { multiNamespace: true } }); - }); - - it(`returns true for non-namespace-agnostic and non-multi-namespace type`, () => { - expectResult(true, { foo: { isNamespaceAgnostic: false, multiNamespace: false } }); - expectResult(true, { foo: { isNamespaceAgnostic: false, multiNamespace: undefined } }); - expectResult(true, { foo: { isNamespaceAgnostic: undefined, multiNamespace: false } }); - expectResult(true, { foo: { isNamespaceAgnostic: undefined, multiNamespace: undefined } }); - }); -}); - -describe('#isMultiNamespace', () => { - const expectResult = (expected: boolean, schemaDefinition?: SavedObjectsSchemaDefinition) => { - const schema = new SavedObjectsSchema(schemaDefinition); - const result = schema.isMultiNamespace('foo'); - expect(result).toBe(expected); - }; - - it(`returns false when no schema is defined`, () => { - expectResult(false); - }); - - it(`returns false for unknown types`, () => { - expectResult(false, { bar: {} }); - }); - - it(`returns false for explicitly namespace-agnostic type`, () => { - expectResult(false, { foo: { isNamespaceAgnostic: true } }); - }); - - it(`returns false for non-multi-namespace type`, () => { - expectResult(false, { foo: { multiNamespace: false } }); - expectResult(false, { foo: { multiNamespace: undefined } }); - }); - - it(`returns true for non-namespace-agnostic and explicitly multi-namespace type`, () => { - expectResult(true, { foo: { isNamespaceAgnostic: false, multiNamespace: true } }); - expectResult(true, { foo: { isNamespaceAgnostic: undefined, multiNamespace: true } }); - }); -}); diff --git a/src/core/server/saved_objects/schema/schema.ts b/src/core/server/saved_objects/schema/schema.ts deleted file mode 100644 index ba1905158e822..0000000000000 --- a/src/core/server/saved_objects/schema/schema.ts +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { LegacyConfig } from '../../legacy'; - -/** - * @deprecated - * @internal - **/ -interface SavedObjectsSchemaTypeDefinition { - isNamespaceAgnostic?: boolean; - multiNamespace?: boolean; - hidden?: boolean; - indexPattern?: ((config: LegacyConfig) => string) | string; - convertToAliasScript?: string; -} - -/** - * @deprecated - * @internal - **/ -export interface SavedObjectsSchemaDefinition { - [type: string]: SavedObjectsSchemaTypeDefinition; -} - -/** - * @deprecated This is only used by the {@link SavedObjectsLegacyService | legacy savedObjects service} - * @internal - **/ -export class SavedObjectsSchema { - private readonly definition?: SavedObjectsSchemaDefinition; - constructor(schemaDefinition?: SavedObjectsSchemaDefinition) { - this.definition = schemaDefinition; - } - - public isHiddenType(type: string) { - if (this.definition && this.definition.hasOwnProperty(type)) { - return Boolean(this.definition[type].hidden); - } - - return false; - } - - public getIndexForType(config: LegacyConfig, type: string): string | undefined { - if (this.definition != null && this.definition.hasOwnProperty(type)) { - const { indexPattern } = this.definition[type]; - return typeof indexPattern === 'function' ? indexPattern(config) : indexPattern; - } else { - return undefined; - } - } - - public getConvertToAliasScript(type: string): string | undefined { - if (this.definition != null && this.definition.hasOwnProperty(type)) { - return this.definition[type].convertToAliasScript; - } - } - - public isNamespaceAgnostic(type: string) { - // if no plugins have registered a Saved Objects Schema, - // this.schema will be undefined, and no types are namespace agnostic - if (!this.definition) { - return false; - } - - const typeSchema = this.definition[type]; - if (!typeSchema) { - return false; - } - return Boolean(typeSchema.isNamespaceAgnostic); - } - - public isSingleNamespace(type: string) { - // if no plugins have registered a Saved Objects Schema, - // this.schema will be undefined, and all types are namespace isolated - if (!this.definition) { - return true; - } - - const typeSchema = this.definition[type]; - if (!typeSchema) { - return true; - } - return !Boolean(typeSchema.isNamespaceAgnostic) && !Boolean(typeSchema.multiNamespace); - } - - public isMultiNamespace(type: string) { - // if no plugins have registered a Saved Objects Schema, - // this.schema will be undefined, and no types are multi-namespace - if (!this.definition) { - return false; - } - - const typeSchema = this.definition[type]; - if (!typeSchema) { - return false; - } - return !Boolean(typeSchema.isNamespaceAgnostic) && Boolean(typeSchema.multiNamespace); - } -} diff --git a/src/core/server/saved_objects/service/index.ts b/src/core/server/saved_objects/service/index.ts index 9f625b4732e26..271d4dd67d43e 100644 --- a/src/core/server/saved_objects/service/index.ts +++ b/src/core/server/saved_objects/service/index.ts @@ -17,37 +17,6 @@ * under the License. */ -import { Readable } from 'stream'; -import { SavedObjectsClientProvider } from './lib'; -import { SavedObjectsClient } from './saved_objects_client'; -import { SavedObjectsExportOptions } from '../export'; -import { SavedObjectsImportOptions, SavedObjectsImportResponse } from '../import'; -import { SavedObjectsSchema } from '../schema'; -import { SavedObjectsResolveImportErrorsOptions } from '../import/types'; - -/** - * @internal - * @deprecated - */ -export interface SavedObjectsLegacyService { - // ATTENTION: these types are incomplete - addScopedSavedObjectsClientWrapperFactory: SavedObjectsClientProvider['addClientWrapperFactory']; - setScopedSavedObjectsClientFactory: SavedObjectsClientProvider['setClientFactory']; - getScopedSavedObjectsClient: SavedObjectsClientProvider['getClient']; - SavedObjectsClient: typeof SavedObjectsClient; - types: string[]; - schema: SavedObjectsSchema; - getSavedObjectsRepository(...rest: any[]): any; - importExport: { - objectLimit: number; - importSavedObjects(options: SavedObjectsImportOptions): Promise; - resolveImportErrors( - options: SavedObjectsResolveImportErrorsOptions - ): Promise; - getSortedObjectsForExport(options: SavedObjectsExportOptions): Promise; - }; -} - export { SavedObjectsRepository, SavedObjectsClientProvider, diff --git a/src/core/server/saved_objects/service/lib/repository.test.js b/src/core/server/saved_objects/service/lib/repository.test.js index b1d6028465713..f2e3b3e633cd6 100644 --- a/src/core/server/saved_objects/service/lib/repository.test.js +++ b/src/core/server/saved_objects/service/lib/repository.test.js @@ -153,7 +153,6 @@ describe('SavedObjectsRepository', () => { typeRegistry: registry, kibanaVersion: '2.0.0', log: {}, - validateDoc: jest.fn(), }); const getMockGetResponse = ({ type, id, references, namespace, originId }) => ({ diff --git a/src/core/server/saved_objects/service/lib/repository.ts b/src/core/server/saved_objects/service/lib/repository.ts index dd25989725f3e..e3fb7d2306469 100644 --- a/src/core/server/saved_objects/service/lib/repository.ts +++ b/src/core/server/saved_objects/service/lib/repository.ts @@ -31,7 +31,7 @@ import { getSearchDsl } from './search_dsl'; import { includedFields } from './included_fields'; import { SavedObjectsErrorHelpers, DecoratedError } from './errors'; import { decodeRequestVersion, encodeVersion, encodeHitVersion } from '../../version'; -import { KibanaMigrator } from '../../migrations'; +import { IKibanaMigrator } from '../../migrations'; import { SavedObjectsSerializer, SavedObjectSanitizedDoc, @@ -85,7 +85,7 @@ export interface SavedObjectsRepositoryOptions { client: ElasticsearchClient; typeRegistry: SavedObjectTypeRegistry; serializer: SavedObjectsSerializer; - migrator: KibanaMigrator; + migrator: IKibanaMigrator; allowedTypes: string[]; } @@ -120,7 +120,7 @@ export type ISavedObjectsRepository = Pick) => { path: string; uiCapabilitiesPath: string }; } - -/** - * @internal - * @deprecated - */ -export interface SavedObjectsLegacyUiExports { - savedObjectMappings: SavedObjectsLegacyMapping[]; - savedObjectMigrations: SavedObjectsLegacyMigrationDefinitions; - savedObjectSchemas: SavedObjectsLegacySchemaDefinitions; - savedObjectValidations: PropertyValidators; - savedObjectsManagement: SavedObjectsLegacyManagementDefinition; -} - -/** - * @internal - * @deprecated - */ -export interface SavedObjectsLegacyMapping { - pluginId: string; - properties: SavedObjectsTypeMappingDefinitions; -} - -/** - * @internal - * @deprecated Use {@link SavedObjectsTypeManagementDefinition | management definition} when registering - * from new platform plugins - */ -export interface SavedObjectsLegacyManagementDefinition { - [key: string]: SavedObjectsLegacyManagementTypeDefinition; -} - -/** - * @internal - * @deprecated - */ -export interface SavedObjectsLegacyManagementTypeDefinition { - isImportableAndExportable?: boolean; - defaultSearchField?: string; - icon?: string; - getTitle?: (savedObject: SavedObject) => string; - getEditUrl?: (savedObject: SavedObject) => string; - getInAppUrl?: (savedObject: SavedObject) => { path: string; uiCapabilitiesPath: string }; -} - -/** - * @internal - * @deprecated - */ -export interface SavedObjectsLegacyMigrationDefinitions { - [type: string]: SavedObjectLegacyMigrationMap; -} - -/** - * @internal - * @deprecated - */ -export interface SavedObjectLegacyMigrationMap { - [version: string]: SavedObjectLegacyMigrationFn; -} - -/** - * @internal - * @deprecated - */ -export type SavedObjectLegacyMigrationFn = ( - doc: SavedObjectUnsanitizedDoc, - log: SavedObjectsMigrationLogger -) => SavedObjectUnsanitizedDoc; - -/** - * @internal - * @deprecated - */ -interface SavedObjectsLegacyTypeSchema { - isNamespaceAgnostic?: boolean; - /** Cannot be used in conjunction with `isNamespaceAgnostic` */ - multiNamespace?: boolean; - hidden?: boolean; - indexPattern?: ((config: LegacyConfig) => string) | string; - convertToAliasScript?: string; -} - -/** - * @internal - * @deprecated - */ -export interface SavedObjectsLegacySchemaDefinitions { - [type: string]: SavedObjectsLegacyTypeSchema; -} diff --git a/src/core/server/saved_objects/utils.test.ts b/src/core/server/saved_objects/utils.test.ts deleted file mode 100644 index 21229bee489c2..0000000000000 --- a/src/core/server/saved_objects/utils.test.ts +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { legacyServiceMock } from '../legacy/legacy_service.mock'; -import { convertLegacyTypes, convertTypesToLegacySchema } from './utils'; -import { SavedObjectsLegacyUiExports, SavedObjectsType } from './types'; -import { LegacyConfig, SavedObjectMigrationContext } from 'kibana/server'; -import { SavedObjectUnsanitizedDoc } from './serialization'; - -describe('convertLegacyTypes', () => { - let legacyConfig: ReturnType; - - beforeEach(() => { - legacyConfig = legacyServiceMock.createLegacyConfig(); - }); - - it('converts the legacy mappings using default values if no schemas are specified', () => { - const uiExports: SavedObjectsLegacyUiExports = { - savedObjectMappings: [ - { - pluginId: 'pluginA', - properties: { - typeA: { - properties: { - fieldA: { type: 'text' }, - }, - }, - typeB: { - properties: { - fieldB: { type: 'text' }, - }, - }, - }, - }, - { - pluginId: 'pluginB', - properties: { - typeC: { - properties: { - fieldC: { type: 'text' }, - }, - }, - }, - }, - ], - savedObjectMigrations: {}, - savedObjectSchemas: {}, - savedObjectValidations: {}, - savedObjectsManagement: {}, - }; - - const converted = convertLegacyTypes(uiExports, legacyConfig); - expect(converted).toMatchSnapshot(); - }); - - it('merges the mappings and the schema to create the type when schema exists for the type', () => { - const uiExports: SavedObjectsLegacyUiExports = { - savedObjectMappings: [ - { - pluginId: 'pluginA', - properties: { - typeA: { - properties: { - fieldA: { type: 'text' }, - }, - }, - }, - }, - { - pluginId: 'pluginB', - properties: { - typeB: { - properties: { - fieldB: { type: 'text' }, - }, - }, - }, - }, - { - pluginId: 'pluginC', - properties: { - typeC: { - properties: { - fieldC: { type: 'text' }, - }, - }, - }, - }, - { - pluginId: 'pluginD', - properties: { - typeD: { - properties: { - fieldD: { type: 'text' }, - }, - }, - }, - }, - ], - savedObjectMigrations: {}, - savedObjectSchemas: { - typeA: { - indexPattern: 'fooBar', - hidden: true, - isNamespaceAgnostic: true, - }, - typeB: { - indexPattern: 'barBaz', - hidden: false, - multiNamespace: true, - }, - typeD: { - indexPattern: 'bazQux', - hidden: false, - // if both isNamespaceAgnostic and multiNamespace are true, the resulting namespaceType is 'agnostic' - isNamespaceAgnostic: true, - multiNamespace: true, - }, - }, - savedObjectValidations: {}, - savedObjectsManagement: {}, - }; - - const converted = convertLegacyTypes(uiExports, legacyConfig); - expect(converted).toMatchSnapshot(); - }); - - it('invokes indexPattern to retrieve the index when it is a function', () => { - const indexPatternAccessor: (config: LegacyConfig) => string = jest.fn((config) => { - config.get('foo.bar'); - return 'myIndex'; - }); - - const uiExports: SavedObjectsLegacyUiExports = { - savedObjectMappings: [ - { - pluginId: 'pluginA', - properties: { - typeA: { - properties: { - fieldA: { type: 'text' }, - }, - }, - }, - }, - ], - savedObjectMigrations: {}, - savedObjectSchemas: { - typeA: { - indexPattern: indexPatternAccessor, - hidden: true, - isNamespaceAgnostic: true, - }, - }, - savedObjectValidations: {}, - savedObjectsManagement: {}, - }; - - const converted = convertLegacyTypes(uiExports, legacyConfig); - - expect(indexPatternAccessor).toHaveBeenCalledWith(legacyConfig); - expect(legacyConfig.get).toHaveBeenCalledWith('foo.bar'); - expect(converted.length).toEqual(1); - expect(converted[0].indexPattern).toEqual('myIndex'); - }); - - it('import migrations from the uiExports', () => { - const migrationsA = { - '1.0.0': jest.fn(), - '2.0.4': jest.fn(), - }; - const migrationsB = { - '1.5.3': jest.fn(), - }; - - const uiExports: SavedObjectsLegacyUiExports = { - savedObjectMappings: [ - { - pluginId: 'pluginA', - properties: { - typeA: { - properties: { - fieldA: { type: 'text' }, - }, - }, - }, - }, - { - pluginId: 'pluginB', - properties: { - typeB: { - properties: { - fieldC: { type: 'text' }, - }, - }, - }, - }, - ], - savedObjectMigrations: { - typeA: migrationsA, - typeB: migrationsB, - }, - savedObjectSchemas: {}, - savedObjectValidations: {}, - savedObjectsManagement: {}, - }; - - const converted = convertLegacyTypes(uiExports, legacyConfig); - expect(converted.length).toEqual(2); - expect(Object.keys(converted[0]!.migrations!)).toEqual(Object.keys(migrationsA)); - expect(Object.keys(converted[1]!.migrations!)).toEqual(Object.keys(migrationsB)); - }); - - it('converts the migration to the new format', () => { - const legacyMigration = jest.fn(); - const migrationsA = { - '1.0.0': legacyMigration, - }; - - const uiExports: SavedObjectsLegacyUiExports = { - savedObjectMappings: [ - { - pluginId: 'pluginA', - properties: { - typeA: { - properties: { - fieldA: { type: 'text' }, - }, - }, - }, - }, - ], - savedObjectMigrations: { - typeA: migrationsA, - }, - savedObjectSchemas: {}, - savedObjectValidations: {}, - savedObjectsManagement: {}, - }; - - const converted = convertLegacyTypes(uiExports, legacyConfig); - expect(Object.keys(converted[0]!.migrations!)).toEqual(['1.0.0']); - - const migration = converted[0]!.migrations!['1.0.0']!; - - const doc = {} as SavedObjectUnsanitizedDoc; - const context = { log: {} } as SavedObjectMigrationContext; - migration(doc, context); - - expect(legacyMigration).toHaveBeenCalledTimes(1); - expect(legacyMigration).toHaveBeenCalledWith(doc, context.log); - }); - - it('imports type management information', () => { - const uiExports: SavedObjectsLegacyUiExports = { - savedObjectMappings: [ - { - pluginId: 'pluginA', - properties: { - typeA: { - properties: { - fieldA: { type: 'text' }, - }, - }, - }, - }, - { - pluginId: 'pluginB', - properties: { - typeB: { - properties: { - fieldB: { type: 'text' }, - }, - }, - typeC: { - properties: { - fieldC: { type: 'text' }, - }, - }, - }, - }, - ], - savedObjectsManagement: { - typeA: { - isImportableAndExportable: true, - icon: 'iconA', - defaultSearchField: 'searchFieldA', - getTitle: (savedObject) => savedObject.id, - }, - typeB: { - isImportableAndExportable: false, - icon: 'iconB', - getEditUrl: (savedObject) => `/some-url/${savedObject.id}`, - getInAppUrl: (savedObject) => ({ path: 'path', uiCapabilitiesPath: 'ui-path' }), - }, - }, - savedObjectMigrations: {}, - savedObjectSchemas: {}, - savedObjectValidations: {}, - }; - - const converted = convertLegacyTypes(uiExports, legacyConfig); - expect(converted.length).toEqual(3); - const [typeA, typeB, typeC] = converted; - - expect(typeA.management).toEqual({ - importableAndExportable: true, - icon: 'iconA', - defaultSearchField: 'searchFieldA', - getTitle: uiExports.savedObjectsManagement.typeA.getTitle, - }); - - expect(typeB.management).toEqual({ - importableAndExportable: false, - icon: 'iconB', - getEditUrl: uiExports.savedObjectsManagement.typeB.getEditUrl, - getInAppUrl: uiExports.savedObjectsManagement.typeB.getInAppUrl, - }); - - expect(typeC.management).toBeUndefined(); - }); - - it('merges everything when all are present', () => { - const uiExports: SavedObjectsLegacyUiExports = { - savedObjectMappings: [ - { - pluginId: 'pluginA', - properties: { - typeA: { - properties: { - fieldA: { type: 'text' }, - }, - }, - typeB: { - properties: { - fieldB: { type: 'text' }, - anotherFieldB: { type: 'boolean' }, - }, - }, - }, - }, - { - pluginId: 'pluginB', - properties: { - typeC: { - properties: { - fieldC: { type: 'text' }, - }, - }, - }, - }, - ], - savedObjectMigrations: { - typeA: { - '1.0.0': jest.fn(), - '2.0.4': jest.fn(), - }, - typeC: { - '1.5.3': jest.fn(), - }, - }, - savedObjectSchemas: { - typeA: { - indexPattern: jest.fn((config) => { - config.get('foo.bar'); - return 'myIndex'; - }), - hidden: true, - isNamespaceAgnostic: true, - }, - typeB: { - convertToAliasScript: 'some alias script', - hidden: false, - }, - }, - savedObjectValidations: {}, - savedObjectsManagement: {}, - }; - - const converted = convertLegacyTypes(uiExports, legacyConfig); - expect(converted).toMatchSnapshot(); - }); -}); - -describe('convertTypesToLegacySchema', () => { - it('converts types to the legacy schema format', () => { - const types: SavedObjectsType[] = [ - { - name: 'typeA', - hidden: false, - namespaceType: 'agnostic', - mappings: { properties: {} }, - convertToAliasScript: 'some script', - }, - { - name: 'typeB', - hidden: true, - namespaceType: 'single', - indexPattern: 'myIndex', - mappings: { properties: {} }, - }, - { - name: 'typeC', - hidden: false, - namespaceType: 'multiple', - mappings: { properties: {} }, - }, - ]; - expect(convertTypesToLegacySchema(types)).toEqual({ - typeA: { - hidden: false, - isNamespaceAgnostic: true, - multiNamespace: false, - convertToAliasScript: 'some script', - }, - typeB: { - hidden: true, - isNamespaceAgnostic: false, - multiNamespace: false, - indexPattern: 'myIndex', - }, - typeC: { - hidden: false, - isNamespaceAgnostic: false, - multiNamespace: true, - }, - }); - }); -}); diff --git a/src/core/server/saved_objects/utils.ts b/src/core/server/saved_objects/utils.ts deleted file mode 100644 index af7c08d1fbfcc..0000000000000 --- a/src/core/server/saved_objects/utils.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { LegacyConfig } from '../legacy'; -import { SavedObjectMigrationMap } from './migrations'; -import { - SavedObjectsNamespaceType, - SavedObjectsType, - SavedObjectsLegacyUiExports, - SavedObjectLegacyMigrationMap, - SavedObjectsLegacyManagementTypeDefinition, - SavedObjectsTypeManagementDefinition, -} from './types'; -import { SavedObjectsSchemaDefinition } from './schema'; - -/** - * Converts the legacy savedObjects mappings, schema, and migrations - * to actual {@link SavedObjectsType | saved object types} - */ -export const convertLegacyTypes = ( - { - savedObjectMappings = [], - savedObjectMigrations = {}, - savedObjectSchemas = {}, - savedObjectsManagement = {}, - }: SavedObjectsLegacyUiExports, - legacyConfig: LegacyConfig -): SavedObjectsType[] => { - return savedObjectMappings.reduce((types, { properties }) => { - return [ - ...types, - ...Object.entries(properties).map(([type, mappings]) => { - const schema = savedObjectSchemas[type]; - const migrations = savedObjectMigrations[type]; - const management = savedObjectsManagement[type]; - const namespaceType = (schema?.isNamespaceAgnostic - ? 'agnostic' - : schema?.multiNamespace - ? 'multiple' - : 'single') as SavedObjectsNamespaceType; - return { - name: type, - hidden: schema?.hidden ?? false, - namespaceType, - mappings, - indexPattern: - typeof schema?.indexPattern === 'function' - ? schema.indexPattern(legacyConfig) - : schema?.indexPattern, - convertToAliasScript: schema?.convertToAliasScript, - migrations: convertLegacyMigrations(migrations ?? {}), - management: management ? convertLegacyTypeManagement(management) : undefined, - }; - }), - ]; - }, [] as SavedObjectsType[]); -}; - -/** - * Convert {@link SavedObjectsType | saved object types} to the legacy {@link SavedObjectsSchemaDefinition | schema} format - */ -export const convertTypesToLegacySchema = ( - types: SavedObjectsType[] -): SavedObjectsSchemaDefinition => { - return types.reduce((schema, type) => { - return { - ...schema, - [type.name]: { - isNamespaceAgnostic: type.namespaceType === 'agnostic', - multiNamespace: type.namespaceType === 'multiple', - hidden: type.hidden, - indexPattern: type.indexPattern, - convertToAliasScript: type.convertToAliasScript, - }, - }; - }, {} as SavedObjectsSchemaDefinition); -}; - -const convertLegacyMigrations = ( - legacyMigrations: SavedObjectLegacyMigrationMap -): SavedObjectMigrationMap => { - return Object.entries(legacyMigrations).reduce((migrated, [version, migrationFn]) => { - return { - ...migrated, - [version]: (doc, context) => migrationFn(doc, context.log), - }; - }, {} as SavedObjectMigrationMap); -}; - -const convertLegacyTypeManagement = ( - legacyTypeManagement: SavedObjectsLegacyManagementTypeDefinition -): SavedObjectsTypeManagementDefinition => { - return { - importableAndExportable: legacyTypeManagement.isImportableAndExportable, - defaultSearchField: legacyTypeManagement.defaultSearchField, - icon: legacyTypeManagement.icon, - getTitle: legacyTypeManagement.getTitle, - getEditUrl: legacyTypeManagement.getEditUrl, - getInAppUrl: legacyTypeManagement.getInAppUrl, - }; -}; diff --git a/src/core/server/saved_objects/validation/index.ts b/src/core/server/saved_objects/validation/index.ts deleted file mode 100644 index b1b33f91d3fd4..0000000000000 --- a/src/core/server/saved_objects/validation/index.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * This is the core logic for validating saved object properties. The saved object client - * and migrations consume this in order to validate saved object documents prior to - * persisting them. - */ - -interface SavedObjectDoc { - type: string; - [prop: string]: any; -} - -/** - * A dictionary of property name -> validation function. The property name - * is generally the document's type (e.g. "dashboard"), but will also - * match other properties. - * - * For example, the "acl" and "dashboard" validators both apply to the - * following saved object: { type: "dashboard", attributes: {}, acl: "sdlaj3w" } - * - * @export - * @interface Validators - */ -export interface PropertyValidators { - [prop: string]: ValidateDoc; -} - -export type ValidateDoc = (doc: SavedObjectDoc) => void; - -/** - * Creates a function which uses a dictionary of property validators to validate - * individual saved object documents. - * - * @export - * @param {Validators} validators - * @param {SavedObjectDoc} doc - */ -export function docValidator(validators: PropertyValidators = {}): ValidateDoc { - return function validateDoc(doc: SavedObjectDoc) { - Object.keys(doc) - .concat(doc.type) - .forEach((prop) => { - const validator = validators[prop]; - if (validator) { - validator(doc); - } - }); - }; -} diff --git a/src/core/server/saved_objects/validation/readme.md b/src/core/server/saved_objects/validation/readme.md deleted file mode 100644 index 3b9f17c37fd0b..0000000000000 --- a/src/core/server/saved_objects/validation/readme.md +++ /dev/null @@ -1,63 +0,0 @@ -# Saved Object Validations - -The saved object client supports validation of documents during create / bulkCreate operations. - -This allows us tighter control over what documents get written to the saved object index, and helps us keep the index in a healthy state. - -## Creating validations - -Plugin authors can write their own validations by adding a `validations` property to their uiExports. A validation is nothing more than a dictionary of `{[prop: string]: validationFunction}` where: - -* `prop` - a root-property on a saved object document -* `validationFunction` - a function that takes a document and throws an error if it does not meet expectations. - -## Example - -```js -// In myFanciPlugin... -uiExports: { - validations: { - myProperty(doc) { - if (doc.attributes.someField === undefined) { - throw new Error(`Document ${doc.id} did not define "someField"`); - } - }, - - someOtherProp(doc) { - if (doc.attributes.counter < 0) { - throw new Error(`Document ${doc.id} cannot have a negative counter.`); - } - }, - }, -}, -``` - -In this example, `myFanciPlugin` defines validations for two properties: `myProperty` and `someOtherProp`. - -This means that no other plugin can define validations for myProperty or someOtherProp. - -The `myProperty` validation would run for any doc that has a `type="myProperty"` or for any doc that has a root-level property of `myProperty`. e.g. it would apply to all documents in the following array: - -```js -[ - { - type: 'foo', - attributes: { stuff: 'here' }, - myProperty: 'shazm!', - }, - { - type: 'myProperty', - attributes: { shazm: true }, - }, -]; -``` - -Validating properties other than just 'type' allows us to support potential future saved object scenarios in which plugins might want to annotate other plugin documents, such as a security plugin adding an acl to another document: - -```js -{ - type: 'dashboard', - attributes: { stuff: 'here' }, - acl: '342343', -} -``` diff --git a/src/core/server/saved_objects/validation/validation.test.ts b/src/core/server/saved_objects/validation/validation.test.ts deleted file mode 100644 index 71e220280ba5f..0000000000000 --- a/src/core/server/saved_objects/validation/validation.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { docValidator } from './index'; - -describe('docValidator', () => { - test('does not run validators that have no application to the doc', () => { - const validators = { - foo: () => { - throw new Error('Boom!'); - }, - }; - expect(() => docValidator(validators)({ type: 'shoo', bar: 'hi' })).not.toThrow(); - }); - - test('validates the doc type', () => { - const validators = { - foo: () => { - throw new Error('Boom!'); - }, - }; - expect(() => docValidator(validators)({ type: 'foo' })).toThrow(/Boom!/); - }); - - test('validates various props', () => { - const validators = { - a: jest.fn(), - b: jest.fn(), - c: jest.fn(), - }; - docValidator(validators)({ type: 'a', b: 'foo' }); - - expect(validators.c).not.toHaveBeenCalled(); - - expect(validators.a.mock.calls).toEqual([[{ type: 'a', b: 'foo' }]]); - expect(validators.b.mock.calls).toEqual([[{ type: 'a', b: 'foo' }]]); - }); -}); diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index 081554cd17f25..37023a0a8ef67 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -1411,19 +1411,30 @@ export interface LegacyServiceStartDeps { plugins: Record; } -// Warning: (ae-forgotten-export) The symbol "SavedObjectsLegacyUiExports" needs to be exported by the entry point index.d.ts -// // @internal @deprecated (undocumented) -export type LegacyUiExports = SavedObjectsLegacyUiExports & { +export interface LegacyUiExports { + // Warning: (ae-forgotten-export) The symbol "VarsProvider" needs to be exported by the entry point index.d.ts + // + // (undocumented) defaultInjectedVarProviders?: VarsProvider[]; + // Warning: (ae-forgotten-export) The symbol "VarsReplacer" needs to be exported by the entry point index.d.ts + // + // (undocumented) injectedVarsReplacers?: VarsReplacer[]; + // Warning: (ae-forgotten-export) The symbol "LegacyNavLinkSpec" needs to be exported by the entry point index.d.ts + // + // (undocumented) navLinkSpecs?: LegacyNavLinkSpec[] | null; + // Warning: (ae-forgotten-export) The symbol "LegacyAppSpec" needs to be exported by the entry point index.d.ts + // + // (undocumented) uiAppSpecs?: Array; + // (undocumented) unknown?: [{ pluginSpec: LegacyPluginSpec; type: unknown; }]; -}; +} // Warning: (ae-forgotten-export) The symbol "lifecycleResponseFactory" needs to be exported by the entry point index.d.ts // @@ -2437,33 +2448,6 @@ export interface SavedObjectsIncrementCounterOptions extends SavedObjectsBaseOpt refresh?: MutatingOperationRefreshSetting; } -// @internal @deprecated (undocumented) -export interface SavedObjectsLegacyService { - // Warning: (ae-forgotten-export) The symbol "SavedObjectsClientProvider" needs to be exported by the entry point index.d.ts - // - // (undocumented) - addScopedSavedObjectsClientWrapperFactory: SavedObjectsClientProvider['addClientWrapperFactory']; - // (undocumented) - getSavedObjectsRepository(...rest: any[]): any; - // (undocumented) - getScopedSavedObjectsClient: SavedObjectsClientProvider['getClient']; - // (undocumented) - importExport: { - objectLimit: number; - importSavedObjects(options: SavedObjectsImportOptions): Promise; - resolveImportErrors(options: SavedObjectsResolveImportErrorsOptions): Promise; - getSortedObjectsForExport(options: SavedObjectsExportOptions): Promise; - }; - // (undocumented) - SavedObjectsClient: typeof SavedObjectsClient; - // (undocumented) - schema: SavedObjectsSchema; - // (undocumented) - setScopedSavedObjectsClientFactory: SavedObjectsClientProvider['setClientFactory']; - // (undocumented) - types: string[]; -} - // @public export interface SavedObjectsMappingProperties { // (undocumented) @@ -2517,10 +2501,10 @@ export class SavedObjectsRepository { bulkUpdate(objects: Array>, options?: SavedObjectsBulkUpdateOptions): Promise>; checkConflicts(objects?: SavedObjectsCheckConflictsObject[], options?: SavedObjectsBaseOptions): Promise; create(type: string, attributes: T, options?: SavedObjectsCreateOptions): Promise>; - // Warning: (ae-forgotten-export) The symbol "KibanaMigrator" needs to be exported by the entry point index.d.ts + // Warning: (ae-forgotten-export) The symbol "IKibanaMigrator" needs to be exported by the entry point index.d.ts // // @internal - static createRepository(migrator: KibanaMigrator, typeRegistry: SavedObjectTypeRegistry, indexName: string, client: ElasticsearchClient, includedHiddenTypes?: string[], injectedConstructor?: any): ISavedObjectsRepository; + static createRepository(migrator: IKibanaMigrator, typeRegistry: SavedObjectTypeRegistry, indexName: string, client: ElasticsearchClient, includedHiddenTypes?: string[], injectedConstructor?: any): ISavedObjectsRepository; delete(type: string, id: string, options?: SavedObjectsDeleteOptions): Promise<{}>; deleteByNamespace(namespace: string, options?: SavedObjectsDeleteByNamespaceOptions): Promise; deleteFromNamespaces(type: string, id: string, namespaces: string[], options?: SavedObjectsDeleteFromNamespacesOptions): Promise; @@ -2548,24 +2532,6 @@ export interface SavedObjectsResolveImportErrorsOptions { typeRegistry: ISavedObjectTypeRegistry; } -// @internal @deprecated (undocumented) -export class SavedObjectsSchema { - // Warning: (ae-forgotten-export) The symbol "SavedObjectsSchemaDefinition" needs to be exported by the entry point index.d.ts - constructor(schemaDefinition?: SavedObjectsSchemaDefinition); - // (undocumented) - getConvertToAliasScript(type: string): string | undefined; - // (undocumented) - getIndexForType(config: LegacyConfig, type: string): string | undefined; - // (undocumented) - isHiddenType(type: string): boolean; - // (undocumented) - isMultiNamespace(type: string): boolean; - // (undocumented) - isNamespaceAgnostic(type: string): boolean; - // (undocumented) - isSingleNamespace(type: string): boolean; -} - // @public export class SavedObjectsSerializer { // @internal @@ -2888,11 +2854,7 @@ export const validBodyOutput: readonly ["data", "stream"]; // Warnings were encountered during analysis: // // src/core/server/http/router/response.ts:316:3 - (ae-forgotten-export) The symbol "KibanaResponse" needs to be exported by the entry point index.d.ts -// src/core/server/legacy/types.ts:132:3 - (ae-forgotten-export) The symbol "VarsProvider" needs to be exported by the entry point index.d.ts -// src/core/server/legacy/types.ts:133:3 - (ae-forgotten-export) The symbol "VarsReplacer" needs to be exported by the entry point index.d.ts -// src/core/server/legacy/types.ts:134:3 - (ae-forgotten-export) The symbol "LegacyNavLinkSpec" needs to be exported by the entry point index.d.ts -// src/core/server/legacy/types.ts:135:3 - (ae-forgotten-export) The symbol "LegacyAppSpec" needs to be exported by the entry point index.d.ts -// src/core/server/legacy/types.ts:136:16 - (ae-forgotten-export) The symbol "LegacyPluginSpec" needs to be exported by the entry point index.d.ts +// src/core/server/legacy/types.ts:135:16 - (ae-forgotten-export) The symbol "LegacyPluginSpec" needs to be exported by the entry point index.d.ts // src/core/server/plugins/types.ts:266:3 - (ae-forgotten-export) The symbol "KibanaConfigType" needs to be exported by the entry point index.d.ts // src/core/server/plugins/types.ts:266:3 - (ae-forgotten-export) The symbol "SharedGlobalConfigKeys" needs to be exported by the entry point index.d.ts // src/core/server/plugins/types.ts:268:3 - (ae-forgotten-export) The symbol "PathConfigType" needs to be exported by the entry point index.d.ts diff --git a/src/core/server/server.ts b/src/core/server/server.ts index cc6d8171e7a03..278dd72d72bb1 100644 --- a/src/core/server/server.ts +++ b/src/core/server/server.ts @@ -142,7 +142,6 @@ export class Server { const savedObjectsSetup = await this.savedObjects.setup({ http: httpSetup, elasticsearch: elasticsearchServiceSetup, - legacyPlugins, }); const uiSettingsSetup = await this.uiSettings.setup({ diff --git a/src/core/server/ui_settings/create_or_upgrade_saved_config/integration_tests/create_or_upgrade.test.ts b/src/core/server/ui_settings/create_or_upgrade_saved_config/integration_tests/create_or_upgrade.test.ts index 61b71f8c5de07..c7d5413ecca56 100644 --- a/src/core/server/ui_settings/create_or_upgrade_saved_config/integration_tests/create_or_upgrade.test.ts +++ b/src/core/server/ui_settings/create_or_upgrade_saved_config/integration_tests/create_or_upgrade.test.ts @@ -36,8 +36,6 @@ describe('createOrUpgradeSavedConfig()', () => { let esServer: TestElasticsearchUtils; let kbn: TestKibanaUtils; - let kbnServer: TestKibanaUtils['kbnServer']; - beforeAll(async function () { servers = createTestServers({ adjustTimeout: (t) => { @@ -46,10 +44,8 @@ describe('createOrUpgradeSavedConfig()', () => { }); esServer = await servers.startES(); kbn = await servers.startKibana(); - kbnServer = kbn.kbnServer; - const savedObjects = kbnServer.server.savedObjects; - savedObjectsClient = savedObjects.getScopedSavedObjectsClient( + savedObjectsClient = kbn.coreStart.savedObjects.getScopedClient( httpServerMock.createKibanaRequest() ); diff --git a/src/core/server/ui_settings/integration_tests/lib/servers.ts b/src/core/server/ui_settings/integration_tests/lib/servers.ts index 297deb0233c57..0bdc821f42581 100644 --- a/src/core/server/ui_settings/integration_tests/lib/servers.ts +++ b/src/core/server/ui_settings/integration_tests/lib/servers.ts @@ -68,8 +68,7 @@ export function getServices() { const callCluster = esServer.es.getCallCluster(); - const savedObjects = kbnServer.server.savedObjects; - const savedObjectsClient = savedObjects.getScopedSavedObjectsClient( + const savedObjectsClient = kbn.coreStart.savedObjects.getScopedClient( httpServerMock.createKibanaRequest() ); diff --git a/src/core/test_helpers/kbn_server.ts b/src/core/test_helpers/kbn_server.ts index a494c6aa31d6f..488c4b919d3e4 100644 --- a/src/core/test_helpers/kbn_server.ts +++ b/src/core/test_helpers/kbn_server.ts @@ -32,6 +32,7 @@ import { resolve } from 'path'; import { BehaviorSubject } from 'rxjs'; import supertest from 'supertest'; +import { CoreStart } from 'src/core/server'; import { LegacyAPICaller } from '../server/elasticsearch'; import { CliArgs, Env } from '../server/config'; import { Root } from '../server/root'; @@ -170,6 +171,7 @@ export interface TestElasticsearchUtils { export interface TestKibanaUtils { root: Root; + coreStart: CoreStart; kbnServer: KbnServer; stop: () => Promise; } @@ -289,13 +291,14 @@ export function createTestServers({ const root = createRootWithCorePlugins(kbnSettings); await root.setup(); - await root.start(); + const coreStart = await root.start(); const kbnServer = getKbnServer(root); return { root, kbnServer, + coreStart, stop: async () => await root.shutdown(), }; }, diff --git a/src/legacy/plugin_discovery/plugin_spec/plugin_spec_options.d.ts b/src/legacy/plugin_discovery/plugin_spec/plugin_spec_options.d.ts index e51a355cbc8d2..e1ed2f57375a4 100644 --- a/src/legacy/plugin_discovery/plugin_spec/plugin_spec_options.d.ts +++ b/src/legacy/plugin_discovery/plugin_spec/plugin_spec_options.d.ts @@ -18,14 +18,10 @@ */ import { Server } from '../../server/kbn_server'; import { Capabilities } from '../../../core/server'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SavedObjectsLegacyManagementDefinition } from '../../../core/server/saved_objects/types'; export type InitPluginFunction = (server: Server) => void; export interface UiExports { injectDefaultVars?: (server: Server) => { [key: string]: any }; - savedObjectsManagement?: SavedObjectsLegacyManagementDefinition; - mappings?: unknown; } export interface PluginSpecOptions { diff --git a/src/legacy/plugin_discovery/types.ts b/src/legacy/plugin_discovery/types.ts index 283806f69599a..700ca6fa68c95 100644 --- a/src/legacy/plugin_discovery/types.ts +++ b/src/legacy/plugin_discovery/types.ts @@ -19,11 +19,6 @@ import { Server } from '../server/kbn_server'; import { Capabilities } from '../../core/server'; -// Disable lint errors for imports from src/core/* until SavedObjects migration is complete -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SavedObjectsSchemaDefinition } from '../../core/server/saved_objects/schema'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SavedObjectsLegacyManagementDefinition } from '../../core/server/saved_objects/types'; import { AppCategory } from '../../core/types'; /** @@ -70,8 +65,6 @@ export interface LegacyPluginOptions { home: string[]; mappings: any; migrations: any; - savedObjectSchemas: SavedObjectsSchemaDefinition; - savedObjectsManagement: SavedObjectsLegacyManagementDefinition; visTypes: string[]; embeddableActions?: string[]; embeddableFactories?: string[]; diff --git a/src/legacy/server/kbn_server.d.ts b/src/legacy/server/kbn_server.d.ts index 69fb63fbbd87f..663542618375a 100644 --- a/src/legacy/server/kbn_server.d.ts +++ b/src/legacy/server/kbn_server.d.ts @@ -17,33 +17,24 @@ * under the License. */ -import { ResponseObject, Server } from 'hapi'; -import { UnwrapPromise } from '@kbn/utility-types'; +import { Server } from 'hapi'; import { TelemetryCollectionManagerPluginSetup } from 'src/plugins/telemetry_collection_manager/server'; import { - ConfigService, CoreSetup, CoreStart, - ElasticsearchServiceSetup, EnvironmentMode, LoggerFactory, - SavedObjectsClientContract, - SavedObjectsLegacyService, - SavedObjectsClientProviderOptions, - IUiSettingsClient, PackageInfo, - LegacyRequest, LegacyServiceSetupDeps, - LegacyServiceStartDeps, LegacyServiceDiscoverPlugins, } from '../../core/server'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LegacyConfig, ILegacyService, ILegacyInternals } from '../../core/server/legacy'; +import { LegacyConfig, ILegacyInternals } from '../../core/server/legacy'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { UiPlugins } from '../../core/server/plugins'; -import { CallClusterWithRequest, ElasticsearchPlugin } from '../core_plugins/elasticsearch'; +import { ElasticsearchPlugin } from '../core_plugins/elasticsearch'; import { UsageCollectionSetup } from '../../plugins/usage_collection/server'; import { HomeServerPluginSetup } from '../../plugins/home/server'; @@ -61,16 +52,9 @@ declare module 'hapi' { interface Server { config: () => KibanaConfig; - savedObjects: SavedObjectsLegacyService; logWithMetadata: (tags: string[], message: string, meta: Record) => void; newPlatform: KbnServer['newPlatform']; } - - interface Request { - getSavedObjectsClient(options?: SavedObjectsClientProviderOptions): SavedObjectsClientContract; - getBasePath(): string; - getUiSettingsService(): IUiSettingsClient; - } } type KbnMixinFunc = (kbnServer: KbnServer, server: Server, config: any) => Promise | void; @@ -86,11 +70,9 @@ export interface KibanaCore { __internals: { elasticsearch: LegacyServiceSetupDeps['core']['elasticsearch']; hapiServer: LegacyServiceSetupDeps['core']['http']['server']; - kibanaMigrator: LegacyServiceStartDeps['core']['savedObjects']['migrator']; legacy: ILegacyInternals; rendering: LegacyServiceSetupDeps['core']['rendering']; uiPlugins: UiPlugins; - savedObjectsClientProvider: LegacyServiceStartDeps['core']['savedObjects']['clientProvider']; }; env: { mode: Readonly; @@ -149,6 +131,3 @@ export default class KbnServer { // Re-export commonly used hapi types. export { Server, Request, ResponseToolkit } from 'hapi'; - -// Re-export commonly accessed api types. -export { SavedObjectsLegacyService, SavedObjectsClient } from 'src/core/server'; diff --git a/src/legacy/server/kbn_server.js b/src/legacy/server/kbn_server.js index 4692262d99bb5..a5eefd140c8fa 100644 --- a/src/legacy/server/kbn_server.js +++ b/src/legacy/server/kbn_server.js @@ -33,7 +33,6 @@ import pidMixin from './pid'; import configCompleteMixin from './config/complete'; import { optimizeMixin } from '../../optimize'; import * as Plugins from './plugins'; -import { savedObjectsMixin } from './saved_objects/saved_objects_mixin'; import { uiMixin } from '../ui'; import { i18nMixin } from './i18n'; @@ -108,9 +107,6 @@ export default class KbnServer { uiMixin, - // setup saved object routes - savedObjectsMixin, - // setup routes that serve the @kbn/optimizer output optimizeMixin, diff --git a/src/legacy/server/saved_objects/saved_objects_mixin.js b/src/legacy/server/saved_objects/saved_objects_mixin.js deleted file mode 100644 index 96cf2058839cf..0000000000000 --- a/src/legacy/server/saved_objects/saved_objects_mixin.js +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -// Disable lint errors for imports from src/core/server/saved_objects until SavedObjects migration is complete -/* eslint-disable @kbn/eslint/no-restricted-paths */ -import { SavedObjectsSchema } from '../../../core/server/saved_objects/schema'; -import { - SavedObjectsClient, - SavedObjectsRepository, - exportSavedObjectsToStream, - importSavedObjectsFromStream, - resolveSavedObjectsImportErrors, -} from '../../../core/server/saved_objects'; -import { convertTypesToLegacySchema } from '../../../core/server/saved_objects/utils'; - -export function savedObjectsMixin(kbnServer, server) { - const migrator = kbnServer.newPlatform.__internals.kibanaMigrator; - const typeRegistry = kbnServer.newPlatform.start.core.savedObjects.getTypeRegistry(); - const mappings = migrator.getActiveMappings(); - const allTypes = typeRegistry.getAllTypes().map((t) => t.name); - const visibleTypes = typeRegistry.getVisibleTypes().map((t) => t.name); - const schema = new SavedObjectsSchema(convertTypesToLegacySchema(typeRegistry.getAllTypes())); - - server.decorate('server', 'kibanaMigrator', migrator); - - const serializer = kbnServer.newPlatform.start.core.savedObjects.createSerializer(); - - const createRepository = (callCluster, includedHiddenTypes = []) => { - if (typeof callCluster !== 'function') { - throw new TypeError('Repository requires a "callCluster" function to be provided.'); - } - // throw an exception if an extraType is not defined. - includedHiddenTypes.forEach((type) => { - if (!allTypes.includes(type)) { - throw new Error(`Missing mappings for saved objects type '${type}'`); - } - }); - const combinedTypes = visibleTypes.concat(includedHiddenTypes); - const allowedTypes = [...new Set(combinedTypes)]; - - const config = server.config(); - - return new SavedObjectsRepository({ - index: config.get('kibana.index'), - migrator, - mappings, - typeRegistry, - serializer, - allowedTypes, - callCluster, - }); - }; - - const provider = kbnServer.newPlatform.__internals.savedObjectsClientProvider; - - const service = { - types: visibleTypes, - SavedObjectsClient, - SavedObjectsRepository, - getSavedObjectsRepository: createRepository, - getScopedSavedObjectsClient: (...args) => provider.getClient(...args), - setScopedSavedObjectsClientFactory: (...args) => provider.setClientFactory(...args), - addScopedSavedObjectsClientWrapperFactory: (...args) => - provider.addClientWrapperFactory(...args), - importExport: { - objectLimit: server.config().get('savedObjects.maxImportExportSize'), - importSavedObjects: importSavedObjectsFromStream, - resolveImportErrors: resolveSavedObjectsImportErrors, - getSortedObjectsForExport: exportSavedObjectsToStream, - }, - schema, - }; - server.decorate('server', 'savedObjects', service); - - const savedObjectsClientCache = new WeakMap(); - server.decorate('request', 'getSavedObjectsClient', function (options) { - const request = this; - - if (savedObjectsClientCache.has(request)) { - return savedObjectsClientCache.get(request); - } - - const savedObjectsClient = server.savedObjects.getScopedSavedObjectsClient(request, options); - - savedObjectsClientCache.set(request, savedObjectsClient); - return savedObjectsClient; - }); -} diff --git a/src/legacy/server/saved_objects/saved_objects_mixin.test.js b/src/legacy/server/saved_objects/saved_objects_mixin.test.js deleted file mode 100644 index d1d6c052ad589..0000000000000 --- a/src/legacy/server/saved_objects/saved_objects_mixin.test.js +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { savedObjectsMixin } from './saved_objects_mixin'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { mockKibanaMigrator } from '../../../core/server/saved_objects/migrations/kibana/kibana_migrator.mock'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { savedObjectsClientProviderMock } from '../../../core/server/saved_objects/service/lib/scoped_client_provider.mock'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { convertLegacyTypes } from '../../../core/server/saved_objects/utils'; -import { SavedObjectTypeRegistry } from '../../../core/server'; -import { coreMock } from '../../../core/server/mocks'; - -const mockConfig = { - get: jest.fn().mockReturnValue('anything'), -}; - -const savedObjectMappings = [ - { - pluginId: 'testtype', - properties: { - testtype: { - properties: { - name: { type: 'keyword' }, - }, - }, - }, - }, - { - pluginId: 'testtype2', - properties: { - doc1: { - properties: { - name: { type: 'keyword' }, - }, - }, - doc2: { - properties: { - name: { type: 'keyword' }, - }, - }, - }, - }, - { - pluginId: 'secretPlugin', - properties: { - hiddentype: { - properties: { - secret: { type: 'keyword' }, - }, - }, - }, - }, -]; - -const savedObjectSchemas = { - hiddentype: { - hidden: true, - }, - doc1: { - indexPattern: 'other-index', - }, -}; - -const savedObjectTypes = convertLegacyTypes( - { - savedObjectMappings, - savedObjectSchemas, - savedObjectMigrations: {}, - }, - mockConfig -); - -const typeRegistry = new SavedObjectTypeRegistry(); -savedObjectTypes.forEach((type) => typeRegistry.registerType(type)); - -const migrator = mockKibanaMigrator.create({ - types: savedObjectTypes, -}); - -describe('Saved Objects Mixin', () => { - let mockKbnServer; - let mockServer; - const mockCallCluster = jest.fn(); - const stubCallCluster = jest.fn(); - const config = { - 'kibana.index': 'kibana.index', - 'savedObjects.maxImportExportSize': 10000, - }; - const stubConfig = jest.fn((key) => { - return config[key]; - }); - - beforeEach(() => { - const clientProvider = savedObjectsClientProviderMock.create(); - mockServer = { - log: jest.fn(), - route: jest.fn(), - decorate: jest.fn(), - config: () => { - return { - get: stubConfig, - }; - }, - plugins: { - elasticsearch: { - getCluster: () => { - return { - callWithRequest: mockCallCluster, - callWithInternalUser: stubCallCluster, - }; - }, - waitUntilReady: jest.fn(), - }, - }, - }; - - const coreStart = coreMock.createStart(); - coreStart.savedObjects.getTypeRegistry.mockReturnValue(typeRegistry); - - mockKbnServer = { - newPlatform: { - __internals: { - kibanaMigrator: migrator, - savedObjectsClientProvider: clientProvider, - }, - setup: { - core: coreMock.createSetup(), - }, - start: { - core: coreStart, - }, - }, - server: mockServer, - ready: () => {}, - pluginSpecs: { - some: () => { - return true; - }, - }, - uiExports: { - savedObjectMappings, - savedObjectSchemas, - }, - }; - }); - - describe('Saved object service', () => { - let service; - - beforeEach(async () => { - await savedObjectsMixin(mockKbnServer, mockServer); - const call = mockServer.decorate.mock.calls.filter( - ([objName, methodName]) => objName === 'server' && methodName === 'savedObjects' - ); - service = call[0][2]; - }); - - it('should return all but hidden types', async () => { - expect(service).toBeDefined(); - expect(service.types).toEqual(['testtype', 'doc1', 'doc2']); - }); - - const mockCallEs = jest.fn(); - describe('repository creation', () => { - it('should not allow a repository with an undefined type', () => { - expect(() => { - service.getSavedObjectsRepository(mockCallEs, ['extraType']); - }).toThrow(new Error("Missing mappings for saved objects type 'extraType'")); - }); - - it('should create a repository without hidden types', () => { - const repository = service.getSavedObjectsRepository(mockCallEs); - expect(repository).toBeDefined(); - expect(repository._allowedTypes).toEqual(['testtype', 'doc1', 'doc2']); - }); - - it('should create a repository with a unique list of allowed types', () => { - const repository = service.getSavedObjectsRepository(mockCallEs, ['doc1', 'doc1', 'doc1']); - expect(repository._allowedTypes).toEqual(['testtype', 'doc1', 'doc2']); - }); - - it('should create a repository with extraTypes minus duplicate', () => { - const repository = service.getSavedObjectsRepository(mockCallEs, [ - 'hiddentype', - 'hiddentype', - ]); - expect(repository._allowedTypes).toEqual(['testtype', 'doc1', 'doc2', 'hiddentype']); - }); - - it('should not allow a repository without a callCluster function', () => { - expect(() => { - service.getSavedObjectsRepository({}); - }).toThrow(new Error('Repository requires a "callCluster" function to be provided.')); - }); - }); - - describe('get client', () => { - it('should have a method to get the client', () => { - expect(service).toHaveProperty('getScopedSavedObjectsClient'); - }); - - it('should have a method to set the client factory', () => { - expect(service).toHaveProperty('setScopedSavedObjectsClientFactory'); - }); - - it('should have a method to add a client wrapper factory', () => { - expect(service).toHaveProperty('addScopedSavedObjectsClientWrapperFactory'); - }); - - it('should allow you to set a scoped saved objects client factory', () => { - expect(() => { - service.setScopedSavedObjectsClientFactory({}); - }).not.toThrowError(); - }); - - it('should allow you to add a scoped saved objects client wrapper factory', () => { - expect(() => { - service.addScopedSavedObjectsClientWrapperFactory({}); - }).not.toThrowError(); - }); - }); - - describe('#getSavedObjectsClient', () => { - let getSavedObjectsClient; - - beforeEach(() => { - savedObjectsMixin(mockKbnServer, mockServer); - const call = mockServer.decorate.mock.calls.filter( - ([objName, methodName]) => objName === 'request' && methodName === 'getSavedObjectsClient' - ); - getSavedObjectsClient = call[0][2]; - }); - - it('should be callable', () => { - mockServer.savedObjects = service; - getSavedObjectsClient = getSavedObjectsClient.bind({}); - expect(() => { - getSavedObjectsClient(); - }).not.toThrowError(); - }); - - it('should use cached request object', () => { - mockServer.savedObjects = service; - getSavedObjectsClient = getSavedObjectsClient.bind({ _test: 'me' }); - const savedObjectsClient = getSavedObjectsClient(); - expect(getSavedObjectsClient()).toEqual(savedObjectsClient); - }); - }); - }); -}); diff --git a/src/legacy/ui/ui_exports/__tests__/collect_ui_exports.js b/src/legacy/ui/ui_exports/__tests__/collect_ui_exports.js deleted file mode 100644 index 5b2af9f82333c..0000000000000 --- a/src/legacy/ui/ui_exports/__tests__/collect_ui_exports.js +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import expect from '@kbn/expect'; - -import { PluginPack } from '../../../plugin_discovery'; - -import { collectUiExports } from '../collect_ui_exports'; - -const specs = new PluginPack({ - path: '/dev/null', - pkg: { - name: 'test', - version: 'kibana', - }, - provider({ Plugin }) { - return [ - new Plugin({ - id: 'test', - uiExports: { - savedObjectSchemas: { - foo: { - isNamespaceAgnostic: true, - }, - }, - }, - }), - new Plugin({ - id: 'test2', - uiExports: { - savedObjectSchemas: { - bar: { - isNamespaceAgnostic: true, - }, - }, - }, - }), - ]; - }, -}).getPluginSpecs(); - -describe('plugin discovery', () => { - describe('collectUiExports()', () => { - it('merges uiExports from all provided plugin specs', () => { - const uiExports = collectUiExports(specs); - - expect(uiExports.savedObjectSchemas).to.eql({ - foo: { - isNamespaceAgnostic: true, - }, - bar: { - isNamespaceAgnostic: true, - }, - }); - }); - - it(`throws an error when migrations and mappings aren't defined in the same plugin`, () => { - const invalidSpecs = new PluginPack({ - path: '/dev/null', - pkg: { - name: 'test', - version: 'kibana', - }, - provider({ Plugin }) { - return [ - new Plugin({ - id: 'test', - uiExports: { - mappings: { - 'test-type': { - properties: {}, - }, - }, - }, - }), - new Plugin({ - id: 'test2', - uiExports: { - migrations: { - 'test-type': { - '1.2.3': (doc) => { - return doc; - }, - }, - }, - }, - }), - ]; - }, - }).getPluginSpecs(); - expect(() => collectUiExports(invalidSpecs)).to.throwError((err) => { - expect(err).to.be.a(Error); - expect(err).to.have.property( - 'message', - 'Migrations and mappings must be defined together in the uiExports of a single plugin. ' + - 'test2 defines migrations for types test-type but does not define their mappings.' - ); - }); - }); - }); -}); diff --git a/src/legacy/ui/ui_render/ui_render_mixin.js b/src/legacy/ui/ui_render/ui_render_mixin.js index cd8dcf5aff71d..e3b7c1e0c3ff9 100644 --- a/src/legacy/ui/ui_render/ui_render_mixin.js +++ b/src/legacy/ui/ui_render/ui_render_mixin.js @@ -193,13 +193,11 @@ export function uiRenderMixin(kbnServer, server, config) { async function renderApp(h) { const app = { getId: () => 'core' }; const { http } = kbnServer.newPlatform.setup.core; - const { - rendering, - legacy, - savedObjectsClientProvider: savedObjects, - } = kbnServer.newPlatform.__internals; + const { savedObjects } = kbnServer.newPlatform.start.core; + const { rendering, legacy } = kbnServer.newPlatform.__internals; + const req = KibanaRequest.from(h.request); const uiSettings = kbnServer.newPlatform.start.core.uiSettings.asScopedToClient( - savedObjects.getClient(h.request) + savedObjects.getScopedClient(req) ); const vars = await legacy.getVars(app.getId(), h.request, { apmConfig: getApmConfig(h.request.path), diff --git a/test/api_integration/apis/saved_objects/migrations.ts b/test/api_integration/apis/saved_objects/migrations.ts index 9997d9710e212..99a58620b17f5 100644 --- a/test/api_integration/apis/saved_objects/migrations.ts +++ b/test/api_integration/apis/saved_objects/migrations.ts @@ -379,14 +379,12 @@ async function migrateIndex({ index, migrations, mappingProperties, - validateDoc, obsoleteIndexTemplatePattern, }: { esClient: ElasticsearchClient; index: string; migrations: Record; mappingProperties: SavedObjectsTypeMappingDefinitions; - validateDoc?: (doc: any) => void; obsoleteIndexTemplatePattern?: string; }) { const typeRegistry = new SavedObjectTypeRegistry(); @@ -396,7 +394,6 @@ async function migrateIndex({ const documentMigrator = new DocumentMigrator({ kibanaVersion: '99.9.9', typeRegistry, - validateDoc: validateDoc || _.noop, log: getLogMock(), }); diff --git a/x-pack/plugins/apm/server/lib/settings/apm_indices/get_apm_indices.ts b/x-pack/plugins/apm/server/lib/settings/apm_indices/get_apm_indices.ts index 2f3b2a602048c..926b2025f4253 100644 --- a/x-pack/plugins/apm/server/lib/settings/apm_indices/get_apm_indices.ts +++ b/x-pack/plugins/apm/server/lib/settings/apm_indices/get_apm_indices.ts @@ -5,7 +5,7 @@ */ import { merge } from 'lodash'; -import { Server } from 'hapi'; + import { SavedObjectsClient } from 'src/core/server'; import { PromiseReturnType } from '../../../../../observability/typings/common'; import { @@ -32,10 +32,6 @@ export interface ApmIndicesConfig { export type ApmIndicesName = keyof ApmIndicesConfig; -export type ScopedSavedObjectsClient = ReturnType< - Server['savedObjects']['getScopedSavedObjectsClient'] ->; - async function getApmIndicesSavedObject( savedObjectsClient: ISavedObjectsClient ) { diff --git a/x-pack/plugins/apm/server/routes/typings.ts b/x-pack/plugins/apm/server/routes/typings.ts index 97013273c9bcf..78c820fbf4ecd 100644 --- a/x-pack/plugins/apm/server/routes/typings.ts +++ b/x-pack/plugins/apm/server/routes/typings.ts @@ -13,7 +13,6 @@ import { } from 'src/core/server'; import { PickByValue, Optional } from 'utility-types'; import { Observable } from 'rxjs'; -import { Server } from 'hapi'; import { ObservabilityPluginSetup } from '../../../observability/server'; import { SecurityPluginSetup } from '../../../security/server'; import { MlPluginSetup } from '../../../ml/server'; @@ -57,12 +56,6 @@ export interface Route< }) => Promise; } -export type APMLegacyServer = Pick & { - plugins: { - elasticsearch: Server['plugins']['elasticsearch']; - }; -}; - export type APMRequestHandlerContext< TDecodedParams extends { [key in keyof Params]: any } = {} > = RequestHandlerContext & { From 02233e740e1c5deced25c98ddea0ecca66f80cab Mon Sep 17 00:00:00 2001 From: Wylie Conlon Date: Tue, 8 Sep 2020 16:53:24 -0400 Subject: [PATCH 39/58] [Field formatters] Time suffix for duration formatter (#76729) * [Field formatters] Time suffix for duration formatter * Fix missing arg * Fix test Co-authored-by: Elastic Machine --- .../field_formats/converters/duration.test.ts | 30 +++++++++- .../field_formats/converters/duration.ts | 6 +- .../__snapshots__/duration.test.tsx.snap | 20 +++++++ .../editors/duration/duration.tsx | 59 ++++++++++++------- 4 files changed, 93 insertions(+), 22 deletions(-) diff --git a/src/plugins/data/common/field_formats/converters/duration.test.ts b/src/plugins/data/common/field_formats/converters/duration.test.ts index d6205d54bd702..69163842f3498 100644 --- a/src/plugins/data/common/field_formats/converters/duration.test.ts +++ b/src/plugins/data/common/field_formats/converters/duration.test.ts @@ -24,11 +24,16 @@ describe('Duration Format', () => { inputFormat: 'seconds', outputFormat: 'humanize', outputPrecision: undefined, + showSuffix: undefined, fixtures: [ { input: -60, output: 'minus a minute', }, + { + input: 1, + output: 'a few seconds', + }, { input: 60, output: 'a minute', @@ -44,6 +49,7 @@ describe('Duration Format', () => { inputFormat: 'minutes', outputFormat: 'humanize', outputPrecision: undefined, + showSuffix: undefined, fixtures: [ { input: -60, @@ -64,6 +70,7 @@ describe('Duration Format', () => { inputFormat: 'minutes', outputFormat: 'asHours', outputPrecision: undefined, + showSuffix: undefined, fixtures: [ { input: -60, @@ -84,6 +91,7 @@ describe('Duration Format', () => { inputFormat: 'seconds', outputFormat: 'asSeconds', outputPrecision: 0, + showSuffix: undefined, fixtures: [ { input: -60, @@ -104,6 +112,7 @@ describe('Duration Format', () => { inputFormat: 'seconds', outputFormat: 'asSeconds', outputPrecision: 2, + showSuffix: undefined, fixtures: [ { input: -60, @@ -124,15 +133,34 @@ describe('Duration Format', () => { ], }); + testCase({ + inputFormat: 'seconds', + outputFormat: 'asSeconds', + outputPrecision: 0, + showSuffix: true, + fixtures: [ + { + input: -60, + output: '-60 Seconds', + }, + { + input: -32.333, + output: '-32 Seconds', + }, + ], + }); + function testCase({ inputFormat, outputFormat, outputPrecision, + showSuffix, fixtures, }: { inputFormat: string; outputFormat: string; outputPrecision: number | undefined; + showSuffix: boolean | undefined; fixtures: any[]; }) { fixtures.forEach((fixture: Record) => { @@ -143,7 +171,7 @@ describe('Duration Format', () => { outputPrecision ? `, ${outputPrecision} decimals` : '' }`, () => { const duration = new DurationFormat( - { inputFormat, outputFormat, outputPrecision }, + { inputFormat, outputFormat, outputPrecision, showSuffix }, jest.fn() ); expect(duration.convert(input)).toBe(output); diff --git a/src/plugins/data/common/field_formats/converters/duration.ts b/src/plugins/data/common/field_formats/converters/duration.ts index 53c2aba98120e..a3ce3d4dfd795 100644 --- a/src/plugins/data/common/field_formats/converters/duration.ts +++ b/src/plugins/data/common/field_formats/converters/duration.ts @@ -190,6 +190,7 @@ export class DurationFormat extends FieldFormat { const inputFormat = this.param('inputFormat'); const outputFormat = this.param('outputFormat') as keyof Duration; const outputPrecision = this.param('outputPrecision'); + const showSuffix = Boolean(this.param('showSuffix')); const human = this.isHuman(); const prefix = val < 0 && human @@ -200,6 +201,9 @@ export class DurationFormat extends FieldFormat { const duration = parseInputAsDuration(val, inputFormat) as Record; const formatted = duration[outputFormat](); const precise = human ? formatted : formatted.toFixed(outputPrecision); - return prefix + precise; + const type = outputFormats.find(({ method }) => method === outputFormat); + const suffix = showSuffix && type ? ` ${type.text}` : ''; + + return prefix + precise + suffix; }; } diff --git a/src/plugins/index_pattern_management/public/components/field_editor/components/field_format_editor/editors/duration/__snapshots__/duration.test.tsx.snap b/src/plugins/index_pattern_management/public/components/field_editor/components/field_format_editor/editors/duration/__snapshots__/duration.test.tsx.snap index b606e60949af5..c617c3b43039b 100644 --- a/src/plugins/index_pattern_management/public/components/field_editor/components/field_format_editor/editors/duration/__snapshots__/duration.test.tsx.snap +++ b/src/plugins/index_pattern_management/public/components/field_editor/components/field_format_editor/editors/duration/__snapshots__/duration.test.tsx.snap @@ -203,6 +203,26 @@ exports[`DurationFormatEditor should render non-human readable output normally 1 value={2} /> + + + } + onChange={[Function]} + /> + {!(format as DurationFormat).isHuman() ? ( - - } - isInvalid={!!error} - error={hasDecimalError ? error : null} - > - { - this.onChange({ outputPrecision: e.target.value ? Number(e.target.value) : null }); - }} + <> + + } isInvalid={!!error} - /> - + error={hasDecimalError ? error : null} + > + { + this.onChange({ + outputPrecision: e.target.value ? Number(e.target.value) : null, + }); + }} + isInvalid={!!error} + /> + + + + } + checked={Boolean(formatParams.showSuffix)} + onChange={(e) => { + this.onChange({ showSuffix: !formatParams.showSuffix }); + }} + /> + + ) : null} From cb5979ad51abdd160ab2fa8829764bcc98ee8e0d Mon Sep 17 00:00:00 2001 From: Wylie Conlon Date: Tue, 8 Sep 2020 17:29:26 -0400 Subject: [PATCH 40/58] [Lens] Show field stats for IP fields and scripted fields (#76457) Co-authored-by: Elastic Machine --- .../indexpattern_datasource/field_item.tsx | 9 +- .../indexpattern_datasource/loader.test.ts | 13 +- .../public/indexpattern_datasource/loader.ts | 30 ++-- .../public/indexpattern_datasource/mocks.ts | 12 ++ .../public/indexpattern_datasource/types.ts | 11 +- .../plugins/lens/server/routes/field_stats.ts | 50 ++++--- .../api_integration/apis/lens/field_stats.ts | 133 ++++++++++++++++++ 7 files changed, 215 insertions(+), 43 deletions(-) diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx index a0cc5ec352130..cf15c29844053 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx @@ -117,14 +117,7 @@ export const InnerFieldItem = function InnerFieldItem(props: FieldItemProps) { ); function fetchData() { - if ( - state.isLoading || - (field.type !== 'number' && - field.type !== 'string' && - field.type !== 'date' && - field.type !== 'boolean' && - field.type !== 'ip') - ) { + if (state.isLoading) { return; } diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts index 660be9514a92f..19213d4afc9bc 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts @@ -93,6 +93,16 @@ const indexPattern1 = ({ searchable: true, esTypes: ['keyword'], }, + { + name: 'scripted', + displayName: 'Scripted', + type: 'string', + searchable: true, + aggregatable: true, + scripted: true, + lang: 'painless', + script: '1234', + }, documentField, ], } as unknown) as IndexPattern; @@ -156,12 +166,13 @@ const indexPattern2 = ({ aggregatable: true, searchable: true, scripted: true, + lang: 'painless', + script: '1234', aggregationRestrictions: { terms: { agg: 'terms', }, }, - esTypes: ['keyword'], }, documentField, ], diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts b/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts index 585a1281cbf51..0ab658b961336 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts @@ -55,15 +55,27 @@ export async function loadIndexPatterns({ !indexPatternsUtils.isNestedField(field) && (!!field.aggregatable || !!field.scripted) ) .map( - (field): IndexPatternField => ({ - name: field.name, - displayName: field.displayName, - type: field.type, - aggregatable: field.aggregatable, - searchable: field.searchable, - scripted: field.scripted, - esTypes: field.esTypes, - }) + (field): IndexPatternField => { + // Convert the getters on the index pattern service into plain JSON + const base = { + name: field.name, + displayName: field.displayName, + type: field.type, + aggregatable: field.aggregatable, + searchable: field.searchable, + esTypes: field.esTypes, + scripted: field.scripted, + }; + + // Simplifies tests by hiding optional properties instead of undefined + return base.scripted + ? { + ...base, + lang: field.lang, + script: field.script, + } + : base; + } ) .concat(documentField); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts b/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts index 31e6240993d36..21ed23321cf57 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts @@ -64,6 +64,16 @@ export const createMockedIndexPattern = (): IndexPattern => ({ searchable: true, esTypes: ['keyword'], }, + { + name: 'scripted', + displayName: 'Scripted', + type: 'string', + searchable: true, + aggregatable: true, + scripted: true, + lang: 'painless', + script: '1234', + }, ], }); @@ -95,6 +105,8 @@ export const createMockedRestrictedIndexPattern = () => ({ searchable: true, scripted: true, esTypes: ['keyword'], + lang: 'painless', + script: '1234', }, ], typeMeta: { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/types.ts b/x-pack/plugins/lens/public/indexpattern_datasource/types.ts index c101f1354b703..21ca41234fdf1 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/types.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/types.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import { IFieldType } from 'src/plugins/data/common'; import { IndexPatternColumn } from './operations'; import { IndexPatternAggRestrictions } from '../../../../../src/plugins/data/public'; @@ -22,16 +23,10 @@ export interface IndexPattern { hasRestrictions: boolean; } -export interface IndexPatternField { - name: string; +export type IndexPatternField = IFieldType & { displayName: string; - type: string; - esTypes?: string[]; - aggregatable: boolean; - scripted?: boolean; - searchable: boolean; aggregationRestrictions?: Partial; -} +}; export interface IndexPatternLayer { columnOrder: string[]; diff --git a/x-pack/plugins/lens/server/routes/field_stats.ts b/x-pack/plugins/lens/server/routes/field_stats.ts index 20d3e2b4164ca..a7368a12f0e2c 100644 --- a/x-pack/plugins/lens/server/routes/field_stats.ts +++ b/x-pack/plugins/lens/server/routes/field_stats.ts @@ -8,6 +8,7 @@ import Boom from 'boom'; import DateMath from '@elastic/datemath'; import { schema } from '@kbn/config-schema'; import { CoreSetup } from 'src/core/server'; +import { IFieldType } from 'src/plugins/data/common'; import { ESSearchResponse } from '../../../apm/typings/elasticsearch'; import { FieldStatsResponse, BASE_API_URL } from '../../common'; @@ -33,6 +34,9 @@ export async function initFieldsRoute(setup: CoreSetup) { name: schema.string(), type: schema.string(), esTypes: schema.maybe(schema.arrayOf(schema.string())), + scripted: schema.maybe(schema.boolean()), + lang: schema.maybe(schema.string()), + script: schema.maybe(schema.string()), }, { unknowns: 'allow' } ), @@ -83,21 +87,15 @@ export async function initFieldsRoute(setup: CoreSetup) { return res.ok({ body: await getNumberHistogram(search, field), }); - } else if (field.type === 'string') { - return res.ok({ - body: await getStringSamples(search, field), - }); } else if (field.type === 'date') { return res.ok({ body: await getDateHistogram(search, field, { fromDate, toDate }), }); - } else if (field.type === 'boolean') { - return res.ok({ - body: await getStringSamples(search, field), - }); } - return res.ok({}); + return res.ok({ + body: await getStringSamples(search, field), + }); } catch (e) { if (e.status === 404) { return res.notFound(); @@ -119,8 +117,10 @@ export async function initFieldsRoute(setup: CoreSetup) { export async function getNumberHistogram( aggSearchWithBody: (body: unknown) => Promise, - field: { name: string; type: string; esTypes?: string[] } + field: IFieldType ): Promise { + const fieldRef = getFieldRef(field); + const searchBody = { sample: { sampler: { shard_size: SHARD_SIZE }, @@ -131,9 +131,9 @@ export async function getNumberHistogram( max_value: { max: { field: field.name }, }, - sample_count: { value_count: { field: field.name } }, + sample_count: { value_count: { ...fieldRef } }, top_values: { - terms: { field: field.name, size: 10 }, + terms: { ...fieldRef, size: 10 }, }, }, }, @@ -206,15 +206,20 @@ export async function getNumberHistogram( export async function getStringSamples( aggSearchWithBody: (body: unknown) => unknown, - field: { name: string; type: string } + field: IFieldType ): Promise { + const fieldRef = getFieldRef(field); + const topValuesBody = { sample: { sampler: { shard_size: SHARD_SIZE }, aggs: { - sample_count: { value_count: { field: field.name } }, + sample_count: { value_count: { ...fieldRef } }, top_values: { - terms: { field: field.name, size: 10 }, + terms: { + ...fieldRef, + size: 10, + }, }, }, }, @@ -241,7 +246,7 @@ export async function getStringSamples( // This one is not sampled so that it returns the full date range export async function getDateHistogram( aggSearchWithBody: (body: unknown) => unknown, - field: { name: string; type: string }, + field: IFieldType, range: { fromDate: string; toDate: string } ): Promise { const fromDate = DateMath.parse(range.fromDate); @@ -265,7 +270,7 @@ export async function getDateHistogram( const fixedInterval = `${interval}ms`; const histogramBody = { - histo: { date_histogram: { field: field.name, fixed_interval: fixedInterval } }, + histo: { date_histogram: { ...getFieldRef(field), fixed_interval: fixedInterval } }, }; const results = (await aggSearchWithBody(histogramBody)) as ESSearchResponse< unknown, @@ -283,3 +288,14 @@ export async function getDateHistogram( }, }; } + +function getFieldRef(field: IFieldType) { + return field.scripted + ? { + script: { + lang: field.lang as string, + source: field.script as string, + }, + } + : { field: field.name }; +} diff --git a/x-pack/test/api_integration/apis/lens/field_stats.ts b/x-pack/test/api_integration/apis/lens/field_stats.ts index 87c9d97be9b60..ccaea03691f01 100644 --- a/x-pack/test/api_integration/apis/lens/field_stats.ts +++ b/x-pack/test/api_integration/apis/lens/field_stats.ts @@ -279,6 +279,139 @@ export default ({ getService }: FtrProviderContext) => { }); }); + it('should return top values for ip fields', async () => { + const { body } = await supertest + .post('/api/lens/index_stats/logstash-2015.09.22/field') + .set(COMMON_HEADERS) + .send({ + dslQuery: { match_all: {} }, + fromDate: TEST_START_TIME, + toDate: TEST_END_TIME, + timeFieldName: '@timestamp', + field: { + name: 'ip', + type: 'ip', + }, + }) + .expect(200); + + expect(body).to.eql({ + totalDocuments: 4634, + sampledDocuments: 4634, + sampledValues: 4633, + topValues: { + buckets: [ + { + count: 13, + key: '177.194.175.66', + }, + { + count: 12, + key: '18.55.141.62', + }, + { + count: 12, + key: '53.55.251.105', + }, + { + count: 11, + key: '21.111.249.239', + }, + { + count: 11, + key: '97.63.84.25', + }, + { + count: 11, + key: '100.99.207.174', + }, + { + count: 11, + key: '112.34.138.226', + }, + { + count: 11, + key: '194.68.89.92', + }, + { + count: 11, + key: '235.186.79.201', + }, + { + count: 10, + key: '57.79.108.136', + }, + ], + }, + }); + }); + + it('should return histograms for scripted date fields', async () => { + const { body } = await supertest + .post('/api/lens/index_stats/logstash-2015.09.22/field') + .set(COMMON_HEADERS) + .send({ + dslQuery: { match_all: {} }, + fromDate: TEST_START_TIME, + toDate: TEST_END_TIME, + timeFieldName: '@timestamp', + field: { + name: 'scripted date', + type: 'date', + scripted: true, + script: '1234', + lang: 'painless', + }, + }) + .expect(200); + + expect(body).to.eql({ + histogram: { + buckets: [ + { + count: 4634, + key: 0, + }, + ], + }, + totalDocuments: 4634, + }); + }); + + it('should return top values for scripted string fields', async () => { + const { body } = await supertest + .post('/api/lens/index_stats/logstash-2015.09.22/field') + .set(COMMON_HEADERS) + .send({ + dslQuery: { match_all: {} }, + fromDate: TEST_START_TIME, + toDate: TEST_END_TIME, + timeFieldName: '@timestamp', + field: { + name: 'scripted string', + type: 'string', + scripted: true, + script: 'return "hello"', + lang: 'painless', + }, + }) + .expect(200); + + expect(body).to.eql({ + totalDocuments: 4634, + sampledDocuments: 4634, + sampledValues: 4634, + topValues: { + buckets: [ + { + count: 4634, + key: 'hello', + }, + ], + }, + }); + }); + it('should apply filters and queries', async () => { const { body } = await supertest .post('/api/lens/index_stats/logstash-2015.09.22/field') From 194d0b0a3fc87a3e46317ba0942edb701c67bed0 Mon Sep 17 00:00:00 2001 From: Shamin Meerankutty <8272719+shamin@users.noreply.github.com> Date: Wed, 9 Sep 2020 03:21:28 +0530 Subject: [PATCH 41/58] Convert map client routing files to TS (#76387) * Converted maps_router and store operations files * Converted files in map routes to typescript * Removed an unwanted ts-expect-error * Fixed the lint errors from jenkins * Naming changes, type for mapStateJSON etc. * More type fixes in map routes * More type fixes in map routes * Added back some removed props * Added types to app state manager * Autogenerated api documentation * Type fixes Co-authored-by: Elastic Machine --- .../kibana-plugin-plugins-data-public.md | 1 + ...data-public.querystatechange.appfilters.md | 11 ++ ...a-public.querystatechange.globalfilters.md | 11 ++ ...in-plugins-data-public.querystatechange.md | 19 +++ ...na-plugin-plugins-data-public.searchbar.md | 4 +- src/plugins/data/public/index.ts | 1 + src/plugins/data/public/public.api.md | 15 +- .../public/top_nav_menu/top_nav_menu.tsx | 65 ++++---- .../maps/public/lazy_load_bundle/index.ts | 6 +- .../public/lazy_load_bundle/lazy/index.ts | 2 - x-pack/plugins/maps/public/plugin.ts | 1 - .../routing/bootstrap/get_initial_layers.d.ts | 12 -- ...nitial_layers.js => get_initial_layers.ts} | 11 +- ..._initial_query.js => get_initial_query.ts} | 9 +- ...onfig.js => get_initial_refresh_config.ts} | 9 +- ...filters.js => get_initial_time_filters.ts} | 9 +- ...ader.js => gis_map_saved_object_loader.ts} | 0 .../bootstrap/services/saved_gis_map.ts | 1 - .../{maps_router.js => maps_router.tsx} | 29 +++- ...and_render.js => load_list_and_render.tsx} | 5 +- .../{maps_list_view.js => maps_list_view.tsx} | 80 ++++++---- .../routes/maps_app/get_breadcrumbs.tsx | 3 +- .../routes/maps_app/{index.js => index.ts} | 39 +++-- ..._and_render.js => load_map_and_render.tsx} | 28 +++- .../{maps_app_view.js => maps_app_view.tsx} | 146 ++++++++++++++---- .../routes/maps_app/top_nav_config.tsx | 1 - ..._state_manager.js => app_state_manager.ts} | 23 ++- .../{app_sync.js => app_sync.ts} | 10 +- .../routing/state_syncing/global_sync.ts | 17 +- ...tore_operations.js => store_operations.ts} | 0 30 files changed, 407 insertions(+), 161 deletions(-) create mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.appfilters.md create mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.globalfilters.md create mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.md delete mode 100644 x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.d.ts rename x-pack/plugins/maps/public/routing/bootstrap/{get_initial_layers.js => get_initial_layers.ts} (87%) rename x-pack/plugins/maps/public/routing/bootstrap/{get_initial_query.js => get_initial_query.ts} (73%) rename x-pack/plugins/maps/public/routing/bootstrap/{get_initial_refresh_config.js => get_initial_refresh_config.ts} (81%) rename x-pack/plugins/maps/public/routing/bootstrap/{get_initial_time_filters.js => get_initial_time_filters.ts} (75%) rename x-pack/plugins/maps/public/routing/bootstrap/services/{gis_map_saved_object_loader.js => gis_map_saved_object_loader.ts} (100%) rename x-pack/plugins/maps/public/routing/{maps_router.js => maps_router.tsx} (80%) rename x-pack/plugins/maps/public/routing/routes/list/{load_list_and_render.js => load_list_and_render.tsx} (98%) rename x-pack/plugins/maps/public/routing/routes/list/{maps_list_view.js => maps_list_view.tsx} (88%) rename x-pack/plugins/maps/public/routing/routes/maps_app/{index.js => index.ts} (62%) rename x-pack/plugins/maps/public/routing/routes/maps_app/{load_map_and_render.js => load_map_and_render.tsx} (75%) rename x-pack/plugins/maps/public/routing/routes/maps_app/{maps_app_view.js => maps_app_view.tsx} (73%) rename x-pack/plugins/maps/public/routing/state_syncing/{app_state_manager.js => app_state_manager.ts} (58%) rename x-pack/plugins/maps/public/routing/state_syncing/{app_sync.js => app_sync.ts} (88%) rename x-pack/plugins/maps/public/routing/{store_operations.js => store_operations.ts} (100%) diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md index b651480a85899..0c493ca492953 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md @@ -69,6 +69,7 @@ | [OptionedValueProp](./kibana-plugin-plugins-data-public.optionedvalueprop.md) | | | [Query](./kibana-plugin-plugins-data-public.query.md) | | | [QueryState](./kibana-plugin-plugins-data-public.querystate.md) | All query state service state | +| [QueryStateChange](./kibana-plugin-plugins-data-public.querystatechange.md) | | | [QuerySuggestionBasic](./kibana-plugin-plugins-data-public.querysuggestionbasic.md) | \* | | [QuerySuggestionField](./kibana-plugin-plugins-data-public.querysuggestionfield.md) | \* | | [QuerySuggestionGetFnArgs](./kibana-plugin-plugins-data-public.querysuggestiongetfnargs.md) | \* | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.appfilters.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.appfilters.md new file mode 100644 index 0000000000000..b358e9477e515 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.appfilters.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [QueryStateChange](./kibana-plugin-plugins-data-public.querystatechange.md) > [appFilters](./kibana-plugin-plugins-data-public.querystatechange.appfilters.md) + +## QueryStateChange.appFilters property + +Signature: + +```typescript +appFilters?: boolean; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.globalfilters.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.globalfilters.md new file mode 100644 index 0000000000000..c395f169c35a5 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.globalfilters.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [QueryStateChange](./kibana-plugin-plugins-data-public.querystatechange.md) > [globalFilters](./kibana-plugin-plugins-data-public.querystatechange.globalfilters.md) + +## QueryStateChange.globalFilters property + +Signature: + +```typescript +globalFilters?: boolean; +``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.md new file mode 100644 index 0000000000000..71fb211da11d2 --- /dev/null +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystatechange.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [QueryStateChange](./kibana-plugin-plugins-data-public.querystatechange.md) + +## QueryStateChange interface + +Signature: + +```typescript +export interface QueryStateChange extends QueryStateChangePartial +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [appFilters](./kibana-plugin-plugins-data-public.querystatechange.appfilters.md) | boolean | | +| [globalFilters](./kibana-plugin-plugins-data-public.querystatechange.globalfilters.md) | boolean | | + diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md index 498691c06285d..d1d20291a6799 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md @@ -7,7 +7,7 @@ Signature: ```typescript -SearchBar: React.ComponentClass, "query" | "isLoading" | "filters" | "onRefresh" | "onRefreshChange" | "refreshInterval" | "indexPatterns" | "dataTestSubj" | "customSubmitButton" | "screenTitle" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQueryChange" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "indicateNoData" | "timeHistory" | "onFiltersUpdated">, any> & { - WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>; +SearchBar: React.ComponentClass, "query" | "isLoading" | "filters" | "onRefresh" | "onRefreshChange" | "refreshInterval" | "indexPatterns" | "dataTestSubj" | "timeHistory" | "customSubmitButton" | "screenTitle" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQueryChange" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "indicateNoData" | "onFiltersUpdated">, any> & { + WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>; } ``` diff --git a/src/plugins/data/public/index.ts b/src/plugins/data/public/index.ts index f7b4111df5172..553ee6bde5f2d 100644 --- a/src/plugins/data/public/index.ts +++ b/src/plugins/data/public/index.ts @@ -429,6 +429,7 @@ export { TimeHistory, TimefilterContract, TimeHistoryContract, + QueryStateChange, } from './query'; export { diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index a3de45189a85d..e76f3c669fae1 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -1465,6 +1465,17 @@ export interface QueryState { time?: TimeRange; } +// Warning: (ae-forgotten-export) The symbol "QueryStateChangePartial" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "QueryStateChange" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface QueryStateChange extends QueryStateChangePartial { + // (undocumented) + appFilters?: boolean; + // (undocumented) + globalFilters?: boolean; +} + // Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "QueryStringInput" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1682,8 +1693,8 @@ export const search: { // Warning: (ae-missing-release-tag) "SearchBar" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const SearchBar: React.ComponentClass, "query" | "isLoading" | "filters" | "onRefresh" | "onRefreshChange" | "refreshInterval" | "indexPatterns" | "dataTestSubj" | "customSubmitButton" | "screenTitle" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQueryChange" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "indicateNoData" | "timeHistory" | "onFiltersUpdated">, any> & { - WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>; +export const SearchBar: React.ComponentClass, "query" | "isLoading" | "filters" | "onRefresh" | "onRefreshChange" | "refreshInterval" | "indexPatterns" | "dataTestSubj" | "timeHistory" | "customSubmitButton" | "screenTitle" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQueryChange" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "indicateNoData" | "onFiltersUpdated">, any> & { + WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>; }; // Warning: (ae-forgotten-export) The symbol "SearchBarOwnProps" needs to be exported by the entry point index.d.ts diff --git a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx index a1a40b49cc8f0..b284c60bac5de 100644 --- a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx +++ b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx @@ -23,39 +23,44 @@ import classNames from 'classnames'; import { MountPoint } from '../../../../core/public'; import { MountPointPortal } from '../../../kibana_react/public'; -import { StatefulSearchBarProps, DataPublicPluginStart } from '../../../data/public'; +import { + StatefulSearchBarProps, + DataPublicPluginStart, + SearchBarProps, +} from '../../../data/public'; import { TopNavMenuData } from './top_nav_menu_data'; import { TopNavMenuItem } from './top_nav_menu_item'; -export type TopNavMenuProps = StatefulSearchBarProps & { - config?: TopNavMenuData[]; - showSearchBar?: boolean; - showQueryBar?: boolean; - showQueryInput?: boolean; - showDatePicker?: boolean; - showFilterBar?: boolean; - data?: DataPublicPluginStart; - className?: string; - /** - * If provided, the menu part of the component will be rendered as a portal inside the given mount point. - * - * This is meant to be used with the `setHeaderActionMenu` core API. - * - * @example - * ```ts - * export renderApp = ({ element, history, setHeaderActionMenu }: AppMountParameters) => { - * const topNavConfig = ...; // TopNavMenuProps - * return ( - * - * - * - * - * ) - * } - * ``` - */ - setMenuMountPoint?: (menuMount: MountPoint | undefined) => void; -}; +export type TopNavMenuProps = StatefulSearchBarProps & + Omit & { + config?: TopNavMenuData[]; + showSearchBar?: boolean; + showQueryBar?: boolean; + showQueryInput?: boolean; + showDatePicker?: boolean; + showFilterBar?: boolean; + data?: DataPublicPluginStart; + className?: string; + /** + * If provided, the menu part of the component will be rendered as a portal inside the given mount point. + * + * This is meant to be used with the `setHeaderActionMenu` core API. + * + * @example + * ```ts + * export renderApp = ({ element, history, setHeaderActionMenu }: AppMountParameters) => { + * const topNavConfig = ...; // TopNavMenuProps + * return ( + * + * + * + * + * ) + * } + * ``` + */ + setMenuMountPoint?: (menuMount: MountPoint | undefined) => void; + }; /* * Top Nav Menu is a convenience wrapper component for: diff --git a/x-pack/plugins/maps/public/lazy_load_bundle/index.ts b/x-pack/plugins/maps/public/lazy_load_bundle/index.ts index 5f2a640aa9d0f..03752a1c3e11e 100644 --- a/x-pack/plugins/maps/public/lazy_load_bundle/index.ts +++ b/x-pack/plugins/maps/public/lazy_load_bundle/index.ts @@ -7,7 +7,7 @@ import { AnyAction } from 'redux'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { IndexPatternsContract } from 'src/plugins/data/public/index_patterns'; -import { ReactElement } from 'react'; +import { AppMountContext, AppMountParameters } from 'kibana/public'; import { IndexPattern } from 'src/plugins/data/public'; import { Embeddable, IContainer } from '../../../../../src/plugins/embeddable/public'; import { LayerDescriptor } from '../../common/descriptor_types'; @@ -40,7 +40,7 @@ interface LazyLoadedMapModules { initialLayers?: LayerDescriptor[] ) => LayerDescriptor[]; mergeInputWithSavedMap: any; - renderApp: (context: unknown, params: unknown) => ReactElement; + renderApp: (context: AppMountContext, params: AppMountParameters) => Promise<() => void>; createSecurityLayerDescriptors: ( indexPatternId: string, indexPatternTitle: string @@ -57,7 +57,6 @@ export async function lazyLoadMapModules(): Promise { loadModulesPromise = new Promise(async (resolve) => { const { - // @ts-expect-error getMapsSavedObjectLoader, getQueryableUniqueIndexPatternIds, MapEmbeddable, @@ -68,7 +67,6 @@ export async function lazyLoadMapModules(): Promise { addLayerWithoutDataSync, getInitialLayers, mergeInputWithSavedMap, - // @ts-expect-error renderApp, createSecurityLayerDescriptors, registerLayerWizard, diff --git a/x-pack/plugins/maps/public/lazy_load_bundle/lazy/index.ts b/x-pack/plugins/maps/public/lazy_load_bundle/lazy/index.ts index e55160383a8f3..28f5acdc17656 100644 --- a/x-pack/plugins/maps/public/lazy_load_bundle/lazy/index.ts +++ b/x-pack/plugins/maps/public/lazy_load_bundle/lazy/index.ts @@ -7,7 +7,6 @@ // These are map-dependencies of the embeddable. // By lazy-loading these, the Maps-app can register the embeddable when the plugin mounts, without actually pulling all the code. -// @ts-expect-error export * from '../../routing/bootstrap/services/gis_map_saved_object_loader'; export * from '../../embeddable/map_embeddable'; export * from '../../kibana_services'; @@ -16,7 +15,6 @@ export * from '../../actions'; export * from '../../selectors/map_selectors'; export * from '../../routing/bootstrap/get_initial_layers'; export * from '../../embeddable/merge_input_with_saved_map'; -// @ts-expect-error export * from '../../routing/maps_router'; export * from '../../classes/layers/solution_layers/security'; export { registerLayerWizard } from '../../classes/layers/layer_wizard_registry'; diff --git a/x-pack/plugins/maps/public/plugin.ts b/x-pack/plugins/maps/public/plugin.ts index b08135b4e486c..00ee7f376efc6 100644 --- a/x-pack/plugins/maps/public/plugin.ts +++ b/x-pack/plugins/maps/public/plugin.ts @@ -123,7 +123,6 @@ export class MapsPlugin icon: `plugins/${APP_ID}/icon.svg`, euiIconType: APP_ICON, category: DEFAULT_APP_CATEGORIES.kibana, - // @ts-expect-error async mount(context, params) { const { renderApp } = await lazyLoadMapModules(); return renderApp(context, params); diff --git a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.d.ts b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.d.ts deleted file mode 100644 index a23e715a08295..0000000000000 --- a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { LayerDescriptor } from '../../../common/descriptor_types'; - -export function getInitialLayers( - layerListJSON?: string, - initialLayers?: LayerDescriptor[] -): LayerDescriptor[]; diff --git a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.js b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.ts similarity index 87% rename from x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.js rename to x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.ts index b47f83d5a6664..e828dc88409cb 100644 --- a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.js +++ b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.ts @@ -15,15 +15,19 @@ import '../../classes/sources/es_pew_pew_source'; import '../../classes/sources/kibana_regionmap_source'; import '../../classes/sources/es_geo_grid_source'; import '../../classes/sources/xyz_tms_source'; +import { LayerDescriptor } from '../../../common/descriptor_types'; +// @ts-expect-error import { KibanaTilemapSource } from '../../classes/sources/kibana_tilemap_source'; import { TileLayer } from '../../classes/layers/tile_layer/tile_layer'; +// @ts-expect-error import { EMSTMSSource } from '../../classes/sources/ems_tms_source'; +// @ts-expect-error import { VectorTileLayer } from '../../classes/layers/vector_tile_layer/vector_tile_layer'; import { getIsEmsEnabled, getToasts } from '../../kibana_services'; import { INITIAL_LAYERS_KEY } from '../../../common/constants'; import { getKibanaTileMap } from '../../meta'; -export function getInitialLayers(layerListJSON, initialLayers = []) { +export function getInitialLayers(layerListJSON?: string, initialLayers: LayerDescriptor[] = []) { if (layerListJSON) { return JSON.parse(layerListJSON); } @@ -58,9 +62,10 @@ export function getInitialLayersFromUrlParam() { try { let mapInitLayers = mapAppParams.get(INITIAL_LAYERS_KEY); - if (mapInitLayers[mapInitLayers.length - 1] === '#') { - mapInitLayers = mapInitLayers.substr(0, mapInitLayers.length - 1); + if (mapInitLayers![mapInitLayers!.length - 1] === '#') { + mapInitLayers = mapInitLayers!.substr(0, mapInitLayers!.length - 1); } + // @ts-ignore return rison.decode_array(mapInitLayers); } catch (e) { getToasts().addWarning({ diff --git a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_query.js b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_query.ts similarity index 73% rename from x-pack/plugins/maps/public/routing/bootstrap/get_initial_query.js rename to x-pack/plugins/maps/public/routing/bootstrap/get_initial_query.ts index 1f2cf27077623..43293d152dbff 100644 --- a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_query.js +++ b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_query.ts @@ -5,8 +5,15 @@ */ import { getData } from '../../kibana_services'; +import { MapsAppState } from '../state_syncing/app_state_manager'; -export function getInitialQuery({ mapStateJSON, appState = {} }) { +export function getInitialQuery({ + mapStateJSON, + appState = {}, +}: { + mapStateJSON?: string; + appState: MapsAppState; +}) { if (appState.query) { return appState.query; } diff --git a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_refresh_config.js b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_refresh_config.ts similarity index 81% rename from x-pack/plugins/maps/public/routing/bootstrap/get_initial_refresh_config.js rename to x-pack/plugins/maps/public/routing/bootstrap/get_initial_refresh_config.ts index d7b3bbf5b4ab2..7d759cb25052f 100644 --- a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_refresh_config.js +++ b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_refresh_config.ts @@ -4,10 +4,17 @@ * you may not use this file except in compliance with the Elastic License. */ +import { QueryState } from 'src/plugins/data/public'; import { getUiSettings } from '../../kibana_services'; import { UI_SETTINGS } from '../../../../../../src/plugins/data/public'; -export function getInitialRefreshConfig({ mapStateJSON, globalState = {} }) { +export function getInitialRefreshConfig({ + mapStateJSON, + globalState = {}, +}: { + mapStateJSON?: string; + globalState: QueryState; +}) { const uiSettings = getUiSettings(); if (mapStateJSON) { diff --git a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_time_filters.js b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_time_filters.ts similarity index 75% rename from x-pack/plugins/maps/public/routing/bootstrap/get_initial_time_filters.js rename to x-pack/plugins/maps/public/routing/bootstrap/get_initial_time_filters.ts index 9c11dabe03923..549cc154fe487 100644 --- a/x-pack/plugins/maps/public/routing/bootstrap/get_initial_time_filters.js +++ b/x-pack/plugins/maps/public/routing/bootstrap/get_initial_time_filters.ts @@ -4,9 +4,16 @@ * you may not use this file except in compliance with the Elastic License. */ +import { QueryState } from 'src/plugins/data/public'; import { getUiSettings } from '../../kibana_services'; -export function getInitialTimeFilters({ mapStateJSON, globalState }) { +export function getInitialTimeFilters({ + mapStateJSON, + globalState, +}: { + mapStateJSON?: string; + globalState: QueryState; +}) { if (mapStateJSON) { const mapState = JSON.parse(mapStateJSON); if (mapState.timeFilters) { diff --git a/x-pack/plugins/maps/public/routing/bootstrap/services/gis_map_saved_object_loader.js b/x-pack/plugins/maps/public/routing/bootstrap/services/gis_map_saved_object_loader.ts similarity index 100% rename from x-pack/plugins/maps/public/routing/bootstrap/services/gis_map_saved_object_loader.js rename to x-pack/plugins/maps/public/routing/bootstrap/services/gis_map_saved_object_loader.ts diff --git a/x-pack/plugins/maps/public/routing/bootstrap/services/saved_gis_map.ts b/x-pack/plugins/maps/public/routing/bootstrap/services/saved_gis_map.ts index 6f8e7777f671b..511f015b0ff80 100644 --- a/x-pack/plugins/maps/public/routing/bootstrap/services/saved_gis_map.ts +++ b/x-pack/plugins/maps/public/routing/bootstrap/services/saved_gis_map.ts @@ -27,7 +27,6 @@ import { copyPersistentState } from '../../../reducers/util'; // @ts-expect-error import { extractReferences, injectReferences } from '../../../../common/migrations/references'; import { getExistingMapPath, MAP_SAVED_OBJECT_TYPE } from '../../../../common/constants'; -// @ts-expect-error import { getStore } from '../../store_operations'; import { MapStoreState } from '../../../reducers/store'; import { LayerDescriptor } from '../../../../common/descriptor_types'; diff --git a/x-pack/plugins/maps/public/routing/maps_router.js b/x-pack/plugins/maps/public/routing/maps_router.tsx similarity index 80% rename from x-pack/plugins/maps/public/routing/maps_router.js rename to x-pack/plugins/maps/public/routing/maps_router.tsx index f0f5234e3f989..5291d9c361161 100644 --- a/x-pack/plugins/maps/public/routing/maps_router.js +++ b/x-pack/plugins/maps/public/routing/maps_router.tsx @@ -6,8 +6,10 @@ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; -import { Router, Switch, Route, Redirect } from 'react-router-dom'; +import { Router, Switch, Route, Redirect, RouteComponentProps } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; +import { Provider } from 'react-redux'; +import { AppMountContext, AppMountParameters } from 'kibana/public'; import { getCoreChrome, getCoreI18n, @@ -18,16 +20,19 @@ import { import { createKbnUrlStateStorage, withNotifyOnErrors, + IKbnUrlStateStorage, } from '../../../../../src/plugins/kibana_utils/public'; import { getStore } from './store_operations'; -import { Provider } from 'react-redux'; import { LoadListAndRender } from './routes/list/load_list_and_render'; import { LoadMapAndRender } from './routes/maps_app/load_map_and_render'; -export let goToSpecifiedPath; -export let kbnUrlStateStorage; +export let goToSpecifiedPath: (path: string) => void; +export let kbnUrlStateStorage: IKbnUrlStateStorage; -export async function renderApp(context, { appBasePath, element, history, onAppLeave }) { +export async function renderApp( + context: AppMountContext, + { appBasePath, element, history, onAppLeave }: AppMountParameters +) { goToSpecifiedPath = (path) => history.push(path); kbnUrlStateStorage = createKbnUrlStateStorage({ useHash: false, @@ -42,11 +47,19 @@ export async function renderApp(context, { appBasePath, element, history, onAppL }; } -const App = ({ history, appBasePath, onAppLeave }) => { +interface Props { + history: AppMountParameters['history'] | RouteComponentProps['history']; + appBasePath: AppMountParameters['appBasePath']; + onAppLeave: AppMountParameters['onAppLeave']; +} + +const App: React.FC = ({ history, appBasePath, onAppLeave }) => { const store = getStore(); const I18nContext = getCoreI18n().Context; - const stateTransfer = getEmbeddableService()?.getStateTransfer(history); + const stateTransfer = getEmbeddableService()?.getStateTransfer( + history as AppMountParameters['history'] + ); const { originatingApp } = stateTransfer?.getIncomingEditorState({ keysToRemoveAfterFetch: ['originatingApp'] }) || {}; @@ -66,7 +79,7 @@ const App = ({ history, appBasePath, onAppLeave }) => { return ( - + getMapsSavedObjectLoader().find(search, this.state.listingLimit); + _find = (search: string) => getMapsSavedObjectLoader().find(search, this.state.listingLimit); - _delete = (ids) => getMapsSavedObjectLoader().delete(ids); + _delete = (ids: string[]) => getMapsSavedObjectLoader().delete(ids); debouncedFetch = _.debounce(async (filter) => { const response = await this._find(filter); @@ -135,10 +163,10 @@ export class MapsListView extends React.Component { this.setState({ showDeleteModal: true }); }; - onTableChange = ({ page, sort = {} }) => { + onTableChange = ({ page, sort }: CriteriaWithPagination) => { const { index: pageIndex, size: pageSize } = page; - let { field: sortField, direction: sortDirection } = sort; + let { field: sortField, direction: sortDirection } = sort || {}; // 3rd sorting state that is not captured by sort - native order (no sort) // when switching from desc to asc for the same field - use native order @@ -147,8 +175,8 @@ export class MapsListView extends React.Component { this.state.sortDirection === 'desc' && sortDirection === 'asc' ) { - sortField = null; - sortDirection = null; + sortField = undefined; + sortDirection = undefined; } this.setState({ @@ -165,8 +193,8 @@ export class MapsListView extends React.Component { if (this.state.sortField) { itemsCopy.sort((a, b) => { - const fieldA = _.get(a, this.state.sortField, ''); - const fieldB = _.get(b, this.state.sortField, ''); + const fieldA = _.get(a, this.state.sortField!, ''); + const fieldB = _.get(b, this.state.sortField!, ''); let order = 1; if (this.state.sortDirection === 'desc') { order = -1; @@ -320,7 +348,7 @@ export class MapsListView extends React.Component { } renderTable() { - const tableColumns = [ + const tableColumns: Array> = [ { field: 'title', name: i18n.translate('xpack.maps.mapListing.titleFieldTitle', { @@ -329,7 +357,7 @@ export class MapsListView extends React.Component { sortable: true, render: (field, record) => ( { + onClick={(e: MouseEvent) => { e.preventDefault(); goToSpecifiedPath(`/map/${record.id}`); }} @@ -355,12 +383,12 @@ export class MapsListView extends React.Component { pageSizeOptions: [10, 20, 50], }; - let selection = false; + let selection; if (!this.state.readOnly) { selection = { - onSelectionChange: (selection) => { + onSelectionChange: (s: SelectionItem[]) => { this.setState({ - selectedIds: selection.map((item) => { + selectedIds: s.map((item) => { return item.id; }), }); @@ -368,11 +396,11 @@ export class MapsListView extends React.Component { }; } - const sorting = {}; + const sorting: EuiTableSortingType = {}; if (this.state.sortField) { sorting.sort = { field: this.state.sortField, - direction: this.state.sortDirection, + direction: this.state.sortDirection!, }; } const items = this.state.items.length === 0 ? [] : this.getPageOfItems(); diff --git a/x-pack/plugins/maps/public/routing/routes/maps_app/get_breadcrumbs.tsx b/x-pack/plugins/maps/public/routing/routes/maps_app/get_breadcrumbs.tsx index 1ccf890597edc..149c04b414c18 100644 --- a/x-pack/plugins/maps/public/routing/routes/maps_app/get_breadcrumbs.tsx +++ b/x-pack/plugins/maps/public/routing/routes/maps_app/get_breadcrumbs.tsx @@ -6,7 +6,6 @@ import { i18n } from '@kbn/i18n'; import { getNavigateToApp } from '../../../kibana_services'; -// @ts-expect-error import { goToSpecifiedPath } from '../../maps_router'; export const unsavedChangesWarning = i18n.translate( @@ -25,7 +24,7 @@ export function getBreadcrumbs({ title: string; getHasUnsavedChanges: () => boolean; originatingApp?: string; - getAppNameFromId?: (id: string) => string; + getAppNameFromId?: (id: string) => string | undefined; }) { const breadcrumbs = []; if (originatingApp && getAppNameFromId) { diff --git a/x-pack/plugins/maps/public/routing/routes/maps_app/index.js b/x-pack/plugins/maps/public/routing/routes/maps_app/index.ts similarity index 62% rename from x-pack/plugins/maps/public/routing/routes/maps_app/index.js rename to x-pack/plugins/maps/public/routing/routes/maps_app/index.ts index 326db7289e60d..812d7fcf30981 100644 --- a/x-pack/plugins/maps/public/routing/routes/maps_app/index.js +++ b/x-pack/plugins/maps/public/routing/routes/maps_app/index.ts @@ -5,6 +5,9 @@ */ import { connect } from 'react-redux'; +import { ThunkDispatch } from 'redux-thunk'; +import { AnyAction } from 'redux'; +import { Filter, Query, TimeRange } from 'src/plugins/data/public'; import { MapsAppView } from './maps_app_view'; import { getFlyoutDisplay, getIsFullScreen } from '../../../selectors/ui_selectors'; import { @@ -33,8 +36,15 @@ import { import { FLYOUT_STATE } from '../../../reducers/ui'; import { getMapsCapabilities } from '../../../kibana_services'; import { getInspectorAdapters } from '../../../reducers/non_serializable_instances'; +import { MapStoreState } from '../../../reducers/store'; +import { + MapRefreshConfig, + MapCenterAndZoom, + LayerDescriptor, +} from '../../../../common/descriptor_types'; +import { MapSettings } from '../../../reducers/map'; -function mapStateToProps(state = {}) { +function mapStateToProps(state: MapStoreState) { return { isFullScreen: getIsFullScreen(state), isOpenSettingsDisabled: getFlyoutDisplay(state) !== FLYOUT_STATE.NONE, @@ -50,9 +60,19 @@ function mapStateToProps(state = {}) { }; } -function mapDispatchToProps(dispatch) { +function mapDispatchToProps(dispatch: ThunkDispatch) { return { - dispatchSetQuery: ({ forceRefresh, filters, query, timeFilters }) => { + dispatchSetQuery: ({ + forceRefresh, + filters, + query, + timeFilters, + }: { + filters?: Filter[]; + query?: Query; + timeFilters?: TimeRange; + forceRefresh?: boolean; + }) => { dispatch( setQuery({ filters, @@ -62,12 +82,13 @@ function mapDispatchToProps(dispatch) { }) ); }, - setRefreshConfig: (refreshConfig) => dispatch(setRefreshConfig(refreshConfig)), - replaceLayerList: (layerList) => dispatch(replaceLayerList(layerList)), - setGotoWithCenter: (latLonZoom) => dispatch(setGotoWithCenter(latLonZoom)), - setMapSettings: (mapSettings) => dispatch(setMapSettings(mapSettings)), - setIsLayerTOCOpen: (isLayerTOCOpen) => dispatch(setIsLayerTOCOpen(isLayerTOCOpen)), - setOpenTOCDetails: (openTOCDetails) => dispatch(setOpenTOCDetails(openTOCDetails)), + setRefreshConfig: (refreshConfig: MapRefreshConfig) => + dispatch(setRefreshConfig(refreshConfig)), + replaceLayerList: (layerList: LayerDescriptor[]) => dispatch(replaceLayerList(layerList)), + setGotoWithCenter: (latLonZoom: MapCenterAndZoom) => dispatch(setGotoWithCenter(latLonZoom)), + setMapSettings: (mapSettings: MapSettings) => dispatch(setMapSettings(mapSettings)), + setIsLayerTOCOpen: (isLayerTOCOpen: boolean) => dispatch(setIsLayerTOCOpen(isLayerTOCOpen)), + setOpenTOCDetails: (openTOCDetails: string[]) => dispatch(setOpenTOCDetails(openTOCDetails)), clearUi: () => { dispatch(setSelectedLayer(null)); dispatch(updateFlyout(FLYOUT_STATE.NONE)); diff --git a/x-pack/plugins/maps/public/routing/routes/maps_app/load_map_and_render.js b/x-pack/plugins/maps/public/routing/routes/maps_app/load_map_and_render.tsx similarity index 75% rename from x-pack/plugins/maps/public/routing/routes/maps_app/load_map_and_render.js rename to x-pack/plugins/maps/public/routing/routes/maps_app/load_map_and_render.tsx index eebbb17582821..7ab138300dc4c 100644 --- a/x-pack/plugins/maps/public/routing/routes/maps_app/load_map_and_render.js +++ b/x-pack/plugins/maps/public/routing/routes/maps_app/load_map_and_render.tsx @@ -5,15 +5,31 @@ */ import React from 'react'; -import { MapsAppView } from '.'; -import { getMapsSavedObjectLoader } from '../../bootstrap/services/gis_map_saved_object_loader'; -import { getCoreChrome, getToasts } from '../../../kibana_services'; import { i18n } from '@kbn/i18n'; import { Redirect } from 'react-router-dom'; +import { AppMountParameters } from 'kibana/public'; +import { EmbeddableStateTransfer } from 'src/plugins/embeddable/public'; +import { getCoreChrome, getToasts } from '../../../kibana_services'; +import { getMapsSavedObjectLoader } from '../../bootstrap/services/gis_map_saved_object_loader'; +import { MapsAppView } from '.'; +import { ISavedGisMap } from '../../bootstrap/services/saved_gis_map'; + +interface Props { + savedMapId?: string; + onAppLeave: AppMountParameters['onAppLeave']; + stateTransfer: EmbeddableStateTransfer; + originatingApp?: string; +} + +interface State { + savedMap?: ISavedGisMap; + failedToLoad: boolean; +} -export const LoadMapAndRender = class extends React.Component { - state = { - savedMap: null, +export const LoadMapAndRender = class extends React.Component { + _isMounted: boolean = false; + state: State = { + savedMap: undefined, failedToLoad: false, }; diff --git a/x-pack/plugins/maps/public/routing/routes/maps_app/maps_app_view.js b/x-pack/plugins/maps/public/routing/routes/maps_app/maps_app_view.tsx similarity index 73% rename from x-pack/plugins/maps/public/routing/routes/maps_app/maps_app_view.js rename to x-pack/plugins/maps/public/routing/routes/maps_app/maps_app_view.tsx index 485b0ed7682fa..b3377547b2dd1 100644 --- a/x-pack/plugins/maps/public/routing/routes/maps_app/maps_app_view.js +++ b/x-pack/plugins/maps/public/routing/routes/maps_app/maps_app_view.tsx @@ -7,6 +7,9 @@ import React from 'react'; import 'mapbox-gl/dist/mapbox-gl.css'; import _ from 'lodash'; +import { AppLeaveAction, AppMountParameters } from 'kibana/public'; +import { EmbeddableStateTransfer, Adapters } from 'src/plugins/embeddable/public'; +import { Subscription } from 'rxjs'; import { DEFAULT_IS_LAYER_TOC_OPEN } from '../../../reducers/ui'; import { getData, @@ -23,29 +26,91 @@ import { getGlobalState, updateGlobalState, startGlobalStateSyncing, + MapsGlobalState, } from '../../state_syncing/global_sync'; import { AppStateManager } from '../../state_syncing/app_state_manager'; import { startAppStateSyncing } from '../../state_syncing/app_sync'; -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { + esFilters, + Filter, + Query, + TimeRange, + IndexPattern, + SavedQuery, + QueryStateChange, + QueryState, +} from '../../../../../../../src/plugins/data/public'; import { MapContainer } from '../../../connected_components/map_container'; import { getIndexPatternsFromIds } from '../../../index_pattern_util'; import { getTopNavConfig } from './top_nav_config'; import { getBreadcrumbs, unsavedChangesWarning } from './get_breadcrumbs'; +import { + LayerDescriptor, + MapRefreshConfig, + MapCenterAndZoom, + MapQuery, +} from '../../../../common/descriptor_types'; +import { MapSettings } from '../../../reducers/map'; +import { ISavedGisMap } from '../../bootstrap/services/saved_gis_map'; + +interface Props { + savedMap: ISavedGisMap; + onAppLeave: AppMountParameters['onAppLeave']; + stateTransfer: EmbeddableStateTransfer; + originatingApp?: string; + layerListConfigOnly: LayerDescriptor[]; + replaceLayerList: (layerList: LayerDescriptor[]) => void; + filters: Filter[]; + isFullScreen: boolean; + isOpenSettingsDisabled: boolean; + enableFullScreen: () => void; + openMapSettings: () => void; + inspectorAdapters: Adapters; + nextIndexPatternIds: string[]; + dispatchSetQuery: ({ + forceRefresh, + filters, + query, + timeFilters, + }: { + filters?: Filter[]; + query?: Query; + timeFilters?: TimeRange; + forceRefresh?: boolean; + }) => void; + timeFilters: TimeRange; + refreshConfig: MapRefreshConfig; + setRefreshConfig: (refreshConfig: MapRefreshConfig) => void; + isSaveDisabled: boolean; + clearUi: () => void; + setGotoWithCenter: (latLonZoom: MapCenterAndZoom) => void; + setMapSettings: (mapSettings: MapSettings) => void; + setIsLayerTOCOpen: (isLayerTOCOpen: boolean) => void; + setOpenTOCDetails: (openTOCDetails: string[]) => void; + query: MapQuery | undefined; +} -export class MapsAppView extends React.Component { - _globalSyncUnsubscribe = null; - _globalSyncChangeMonitorSubscription = null; - _appSyncUnsubscribe = null; +interface State { + initialized: boolean; + initialLayerListConfig?: LayerDescriptor[]; + indexPatterns: IndexPattern[]; + savedQuery?: SavedQuery; + originatingApp?: string; +} + +export class MapsAppView extends React.Component { + _globalSyncUnsubscribe: (() => void) | null = null; + _globalSyncChangeMonitorSubscription: Subscription | null = null; + _appSyncUnsubscribe: (() => void) | null = null; _appStateManager = new AppStateManager(); - _prevIndexPatternIds = null; + _prevIndexPatternIds: string[] | null = null; + _isMounted: boolean = false; - constructor(props) { + constructor(props: Props) { super(props); this.state = { indexPatterns: [], initialized: false, - savedQuery: '', - initialLayerListConfig: null, // tracking originatingApp in state so the connection can be broken by users originatingApp: props.originatingApp, }; @@ -60,10 +125,11 @@ export class MapsAppView extends React.Component { this._updateFromGlobalState ); - const initialSavedQuery = this._appStateManager.getAppState().savedQuery; - if (initialSavedQuery) { - this._updateStateFromSavedQuery(initialSavedQuery); - } + // savedQuery must be fetched from savedQueryId + // const initialSavedQuery = this._appStateManager.getAppState().savedQuery; + // if (initialSavedQuery) { + // this._updateStateFromSavedQuery(initialSavedQuery as SavedQuery); + // } this._initMap(); @@ -72,10 +138,10 @@ export class MapsAppView extends React.Component { this.props.onAppLeave((actions) => { if (this._hasUnsavedChanges()) { if (!window.confirm(unsavedChangesWarning)) { - return; + return {} as AppLeaveAction; } } - return actions.default(); + return actions.default() as AppLeaveAction; }); } @@ -121,7 +187,13 @@ export class MapsAppView extends React.Component { getCoreChrome().setBreadcrumbs(breadcrumbs); }; - _updateFromGlobalState = ({ changes, state: globalState }) => { + _updateFromGlobalState = ({ + changes, + state: globalState, + }: { + changes: QueryStateChange; + state: QueryState; + }) => { if (!this.state.initialized || !changes || !globalState) { return; } @@ -144,7 +216,17 @@ export class MapsAppView extends React.Component { } } - _onQueryChange = ({ filters, query, time, forceRefresh = false }) => { + _onQueryChange = ({ + filters, + query, + time, + forceRefresh = false, + }: { + filters?: Filter[]; + query?: Query; + time?: TimeRange; + forceRefresh?: boolean; + }) => { const { filterManager } = getData().query; if (filters) { @@ -165,7 +247,9 @@ export class MapsAppView extends React.Component { }); // sync globalState - const updatedGlobalState = { filters: filterManager.getGlobalFilters() }; + const updatedGlobalState: MapsGlobalState = { + filters: filterManager.getGlobalFilters(), + }; if (time) { updatedGlobalState.time = time; } @@ -173,7 +257,7 @@ export class MapsAppView extends React.Component { }; _initMapAndLayerSettings() { - const globalState = getGlobalState(); + const globalState: MapsGlobalState = getGlobalState(); const mapStateJSON = this.props.savedMap.mapStateJSON; let savedObjectFilters = []; @@ -219,14 +303,14 @@ export class MapsAppView extends React.Component { }); } - _onFiltersChange = (filters) => { + _onFiltersChange = (filters: Filter[]) => { this._onQueryChange({ filters, }); }; // mapRefreshConfig: MapRefreshConfig - _onRefreshConfigChange(mapRefreshConfig) { + _onRefreshConfigChange(mapRefreshConfig: MapRefreshConfig) { this.props.setRefreshConfig(mapRefreshConfig); updateGlobalState( { @@ -239,9 +323,9 @@ export class MapsAppView extends React.Component { ); } - _updateStateFromSavedQuery = (savedQuery) => { + _updateStateFromSavedQuery = (savedQuery: SavedQuery) => { this.setState({ savedQuery: { ...savedQuery } }); - this._appStateManager.setQueryAndFilters({ savedQuery }); + this._appStateManager.setQueryAndFilters({ savedQueryId: savedQuery.id }); const { filterManager } = getData().query; const savedQueryFilters = savedQuery.attributes.filters || []; @@ -328,7 +412,13 @@ export class MapsAppView extends React.Component { dateRangeTo={this.props.timeFilters.to} isRefreshPaused={this.props.refreshConfig.isPaused} refreshInterval={this.props.refreshConfig.interval} - onRefreshChange={({ isPaused, refreshInterval }) => { + onRefreshChange={({ + isPaused, + refreshInterval, + }: { + isPaused: boolean; + refreshInterval: number; + }) => { this._onRefreshConfigChange({ isPaused, interval: refreshInterval, @@ -337,14 +427,14 @@ export class MapsAppView extends React.Component { showSearchBar={true} showFilterBar={true} showDatePicker={true} - showSaveQuery={getMapsCapabilities().saveQuery} + showSaveQuery={!!getMapsCapabilities().saveQuery} savedQuery={this.state.savedQuery} onSaved={this._updateStateFromSavedQuery} onSavedQueryUpdated={this._updateStateFromSavedQuery} onClearSavedQuery={() => { const { filterManager, queryString } = getData().query; - this.setState({ savedQuery: '' }); - this._appStateManager.setQueryAndFilters({ savedQuery: '' }); + this.setState({ savedQuery: undefined }); + this._appStateManager.setQueryAndFilters({ savedQueryId: '' }); this._onQueryChange({ filters: filterManager.getGlobalFilters(), query: queryString.getDefaultQuery(), @@ -354,7 +444,7 @@ export class MapsAppView extends React.Component { ); } - _addFilter = (newFilters) => { + _addFilter = async (newFilters: Filter[]) => { newFilters.forEach((filter) => { filter.$state = { store: esFilters.FilterStateStore.APP_STATE }; }); diff --git a/x-pack/plugins/maps/public/routing/routes/maps_app/top_nav_config.tsx b/x-pack/plugins/maps/public/routing/routes/maps_app/top_nav_config.tsx index 497c87ad533a6..47f41f2b76f3e 100644 --- a/x-pack/plugins/maps/public/routing/routes/maps_app/top_nav_config.tsx +++ b/x-pack/plugins/maps/public/routing/routes/maps_app/top_nav_config.tsx @@ -21,7 +21,6 @@ import { showSaveModal, } from '../../../../../../../src/plugins/saved_objects/public'; import { MAP_SAVED_OBJECT_TYPE } from '../../../../common/constants'; -// @ts-expect-error import { goToSpecifiedPath } from '../../maps_router'; import { ISavedGisMap } from '../../bootstrap/services/saved_gis_map'; import { EmbeddableStateTransfer } from '../../../../../../../src/plugins/embeddable/public'; diff --git a/x-pack/plugins/maps/public/routing/state_syncing/app_state_manager.js b/x-pack/plugins/maps/public/routing/state_syncing/app_state_manager.ts similarity index 58% rename from x-pack/plugins/maps/public/routing/state_syncing/app_state_manager.js rename to x-pack/plugins/maps/public/routing/state_syncing/app_state_manager.ts index 4cdba13bd85d2..122b50f823a95 100644 --- a/x-pack/plugins/maps/public/routing/state_syncing/app_state_manager.js +++ b/x-pack/plugins/maps/public/routing/state_syncing/app_state_manager.ts @@ -5,20 +5,27 @@ */ import { Subject } from 'rxjs'; +import { Filter, Query } from 'src/plugins/data/public'; + +export interface MapsAppState { + query?: Query | null; + savedQueryId?: string; + filters?: Filter[]; +} export class AppStateManager { - _query = ''; - _savedQuery = ''; - _filters = []; + _query: Query | null = null; + _savedQueryId: string = ''; + _filters: Filter[] = []; _updated$ = new Subject(); - setQueryAndFilters({ query, savedQuery, filters }) { + setQueryAndFilters({ query, savedQueryId, filters }: MapsAppState) { if (query && this._query !== query) { this._query = query; } - if (savedQuery && this._savedQuery !== savedQuery) { - this._savedQuery = savedQuery; + if (savedQueryId && this._savedQueryId !== savedQueryId) { + this._savedQueryId = savedQueryId; } if (filters && this._filters !== filters) { this._filters = filters; @@ -34,10 +41,10 @@ export class AppStateManager { return this._filters; } - getAppState() { + getAppState(): MapsAppState { return { query: this._query, - savedQuery: this._savedQuery, + savedQueryId: this._savedQueryId, filters: this._filters, }; } diff --git a/x-pack/plugins/maps/public/routing/state_syncing/app_sync.js b/x-pack/plugins/maps/public/routing/state_syncing/app_sync.ts similarity index 88% rename from x-pack/plugins/maps/public/routing/state_syncing/app_sync.js rename to x-pack/plugins/maps/public/routing/state_syncing/app_sync.ts index 60e8dc9cd574c..b346822913bec 100644 --- a/x-pack/plugins/maps/public/routing/state_syncing/app_sync.js +++ b/x-pack/plugins/maps/public/routing/state_syncing/app_sync.ts @@ -4,13 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ -import { connectToQueryState, esFilters } from '../../../../../../src/plugins/data/public'; -import { syncState } from '../../../../../../src/plugins/kibana_utils/public'; import { map } from 'rxjs/operators'; +import { connectToQueryState, esFilters } from '../../../../../../src/plugins/data/public'; +import { syncState, BaseStateContainer } from '../../../../../../src/plugins/kibana_utils/public'; import { getData } from '../../kibana_services'; import { kbnUrlStateStorage } from '../maps_router'; +import { AppStateManager } from './app_state_manager'; -export function startAppStateSyncing(appStateManager) { +export function startAppStateSyncing(appStateManager: AppStateManager) { // get appStateContainer // sync app filters with app state container from data.query to state container const { query } = getData(); @@ -19,7 +20,7 @@ export function startAppStateSyncing(appStateManager) { // clear app state filters to prevent application filters from other applications being transfered to maps query.filterManager.setAppFilters([]); - const stateContainer = { + const stateContainer: BaseStateContainer = { get: () => ({ query: appStateManager.getQuery(), filters: appStateManager.getFilters(), @@ -48,6 +49,7 @@ export function startAppStateSyncing(appStateManager) { // merge initial state from app state container and current state in url const initialAppState = { ...stateContainer.get(), + // @ts-ignore ...kbnUrlStateStorage.get('_a'), }; // trigger state update. actually needed in case some data was in url diff --git a/x-pack/plugins/maps/public/routing/state_syncing/global_sync.ts b/x-pack/plugins/maps/public/routing/state_syncing/global_sync.ts index 4e17241752f53..1e779831c5e0c 100644 --- a/x-pack/plugins/maps/public/routing/state_syncing/global_sync.ts +++ b/x-pack/plugins/maps/public/routing/state_syncing/global_sync.ts @@ -3,27 +3,30 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - +import { TimeRange, RefreshInterval, Filter } from 'src/plugins/data/public'; import { syncQueryStateWithUrl } from '../../../../../../src/plugins/data/public'; import { getData } from '../../kibana_services'; -// @ts-ignore import { kbnUrlStateStorage } from '../maps_router'; +export interface MapsGlobalState { + time?: TimeRange; + refreshInterval?: RefreshInterval; + filters?: Filter[]; +} + export function startGlobalStateSyncing() { const { stop } = syncQueryStateWithUrl(getData().query, kbnUrlStateStorage); return stop; } -export function getGlobalState() { - return kbnUrlStateStorage.get('_g'); +export function getGlobalState(): MapsGlobalState { + return kbnUrlStateStorage.get('_g') as MapsGlobalState; } -export function updateGlobalState(newState: unknown, flushUrlState = false) { +export function updateGlobalState(newState: MapsGlobalState, flushUrlState = false) { const globalState = getGlobalState(); kbnUrlStateStorage.set('_g', { - // @ts-ignore ...globalState, - // @ts-ignore ...newState, }); if (flushUrlState) { diff --git a/x-pack/plugins/maps/public/routing/store_operations.js b/x-pack/plugins/maps/public/routing/store_operations.ts similarity index 100% rename from x-pack/plugins/maps/public/routing/store_operations.js rename to x-pack/plugins/maps/public/routing/store_operations.ts From 2ed4b577760222b4d7e253aec83bec8434e8af43 Mon Sep 17 00:00:00 2001 From: nnamdifrankie <56440728+nnamdifrankie@users.noreply.github.com> Date: Tue, 8 Sep 2020 17:56:38 -0400 Subject: [PATCH 42/58] [SecuritySolution-Ingest]: use new metadata current and add transform installation (#74394) [SecuritySolution-Ingest]: use new metadata current and add transform installation --- .../ingest_manager/common/types/models/epm.ts | 1 + .../ingest_manager/sections/epm/constants.tsx | 1 + .../epm/elasticsearch/transform/common.ts | 11 + .../epm/elasticsearch/transform/install.ts | 165 +++++++ .../elasticsearch/transform/remove.test.ts | 69 +++ .../epm/elasticsearch/transform/remove.ts | 58 +++ .../elasticsearch/transform/transform.test.ts | 420 ++++++++++++++++++ .../server/services/epm/packages/install.ts | 16 +- .../server/services/epm/packages/remove.ts | 13 +- .../common/endpoint/constants.ts | 1 + .../common/endpoint/types/index.ts | 7 + .../server/endpoint/routes/metadata/index.ts | 29 +- .../endpoint/routes/metadata/metadata.test.ts | 43 +- .../routes/metadata/query_builders.test.ts | 106 +---- .../routes/metadata/query_builders.ts | 25 +- .../apis/epm/install_remove_assets.ts | 23 + .../elasticsearch/transform/default.json | 35 ++ .../ingest_manager_api_integration/config.ts | 2 +- .../apps/endpoint/endpoint_list.ts | 37 +- .../apis/data_stream_helper.ts | 35 ++ .../apis/metadata.ts | 54 ++- 21 files changed, 965 insertions(+), 186 deletions(-) create mode 100644 x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/common.ts create mode 100644 x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts create mode 100644 x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.test.ts create mode 100644 x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.ts create mode 100644 x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts create mode 100644 x-pack/test/ingest_manager_api_integration/apis/fixtures/test_packages/all_assets/0.1.0/dataset/test_logs/elasticsearch/transform/default.json diff --git a/x-pack/plugins/ingest_manager/common/types/models/epm.ts b/x-pack/plugins/ingest_manager/common/types/models/epm.ts index 96810a2b78461..f083400997870 100644 --- a/x-pack/plugins/ingest_manager/common/types/models/epm.ts +++ b/x-pack/plugins/ingest_manager/common/types/models/epm.ts @@ -40,6 +40,7 @@ export enum ElasticsearchAssetType { ingestPipeline = 'ingest_pipeline', indexTemplate = 'index_template', ilmPolicy = 'ilm_policy', + transform = 'transform', } export enum AgentAssetType { diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/constants.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/constants.tsx index 31c6d76446447..da3cab1a4b8a3 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/constants.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/constants.tsx @@ -19,6 +19,7 @@ export const AssetTitleMap: Record = { dashboard: 'Dashboard', ilm_policy: 'ILM Policy', ingest_pipeline: 'Ingest Pipeline', + transform: 'Transform', 'index-pattern': 'Index Pattern', index_template: 'Index Template', component_template: 'Component Template', diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/common.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/common.ts new file mode 100644 index 0000000000000..46f36dba96747 --- /dev/null +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/common.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import * as Registry from '../../registry'; + +export const getAsset = (path: string): Buffer => { + return Registry.getAsset(path); +}; diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts new file mode 100644 index 0000000000000..1e58319183c7d --- /dev/null +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts @@ -0,0 +1,165 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { SavedObjectsClientContract } from 'kibana/server'; + +import { saveInstalledEsRefs } from '../../packages/install'; +import * as Registry from '../../registry'; +import { + Dataset, + ElasticsearchAssetType, + EsAssetReference, + RegistryPackage, +} from '../../../../../common/types/models'; +import { CallESAsCurrentUser } from '../../../../types'; +import { getInstallation } from '../../packages'; +import { deleteTransforms, deleteTransformRefs } from './remove'; +import { getAsset } from './common'; + +interface TransformInstallation { + installationName: string; + content: string; +} + +interface TransformPathDataset { + path: string; + dataset: Dataset; +} + +export const installTransformForDataset = async ( + registryPackage: RegistryPackage, + paths: string[], + callCluster: CallESAsCurrentUser, + savedObjectsClient: SavedObjectsClientContract +) => { + const installation = await getInstallation({ savedObjectsClient, pkgName: registryPackage.name }); + let previousInstalledTransformEsAssets: EsAssetReference[] = []; + if (installation) { + previousInstalledTransformEsAssets = installation.installed_es.filter( + ({ type, id }) => type === ElasticsearchAssetType.transform + ); + } + + // delete all previous transform + await deleteTransforms( + callCluster, + previousInstalledTransformEsAssets.map((asset) => asset.id) + ); + // install the latest dataset + const datasets = registryPackage.datasets; + if (!datasets?.length) return []; + const installNameSuffix = `${registryPackage.version}`; + + const transformPaths = paths.filter((path) => isTransform(path)); + let installedTransforms: EsAssetReference[] = []; + if (transformPaths.length > 0) { + const transformPathDatasets = datasets.reduce((acc, dataset) => { + transformPaths.forEach((path) => { + if (isDatasetTransform(path, dataset.path)) { + acc.push({ path, dataset }); + } + }); + return acc; + }, []); + + const transformRefs = transformPathDatasets.reduce( + (acc, transformPathDataset) => { + if (transformPathDataset) { + acc.push({ + id: getTransformNameForInstallation(transformPathDataset, installNameSuffix), + type: ElasticsearchAssetType.transform, + }); + } + return acc; + }, + [] + ); + + // get and save transform refs before installing transforms + await saveInstalledEsRefs(savedObjectsClient, registryPackage.name, transformRefs); + + const transforms: TransformInstallation[] = transformPathDatasets.map( + (transformPathDataset: TransformPathDataset) => { + return { + installationName: getTransformNameForInstallation( + transformPathDataset, + installNameSuffix + ), + content: getAsset(transformPathDataset.path).toString('utf-8'), + }; + } + ); + + const installationPromises = transforms.map(async (transform) => { + return installTransform({ callCluster, transform }); + }); + + installedTransforms = await Promise.all(installationPromises).then((results) => results.flat()); + } + + if (previousInstalledTransformEsAssets.length > 0) { + const currentInstallation = await getInstallation({ + savedObjectsClient, + pkgName: registryPackage.name, + }); + + // remove the saved object reference + await deleteTransformRefs( + savedObjectsClient, + currentInstallation?.installed_es || [], + registryPackage.name, + previousInstalledTransformEsAssets.map((asset) => asset.id), + installedTransforms.map((installed) => installed.id) + ); + } + return installedTransforms; +}; + +const isTransform = (path: string) => { + const pathParts = Registry.pathParts(path); + return pathParts.type === ElasticsearchAssetType.transform; +}; + +const isDatasetTransform = (path: string, datasetName: string) => { + const pathParts = Registry.pathParts(path); + return ( + !path.endsWith('/') && + pathParts.type === ElasticsearchAssetType.transform && + pathParts.dataset !== undefined && + datasetName === pathParts.dataset + ); +}; + +async function installTransform({ + callCluster, + transform, +}: { + callCluster: CallESAsCurrentUser; + transform: TransformInstallation; +}): Promise { + // defer validation on put if the source index is not available + await callCluster('transport.request', { + method: 'PUT', + path: `_transform/${transform.installationName}`, + query: 'defer_validation=true', + body: transform.content, + }); + + await callCluster('transport.request', { + method: 'POST', + path: `_transform/${transform.installationName}/_start`, + }); + + return { id: transform.installationName, type: ElasticsearchAssetType.transform }; +} + +const getTransformNameForInstallation = ( + transformDataset: TransformPathDataset, + suffix: string +) => { + const filename = transformDataset?.path.split('/')?.pop()?.split('.')[0]; + return `${transformDataset.dataset.type}-${transformDataset.dataset.name}-${filename}-${suffix}`; +}; diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.test.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.test.ts new file mode 100644 index 0000000000000..3f85ee9b550b2 --- /dev/null +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.test.ts @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { SavedObjectsClientContract } from 'kibana/server'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { savedObjectsClientMock } from '../../../../../../../../src/core/server/saved_objects/service/saved_objects_client.mock'; +import { deleteTransformRefs } from './remove'; +import { EsAssetReference } from '../../../../../common/types/models'; + +describe('test transform install', () => { + let savedObjectsClient: jest.Mocked; + beforeEach(() => { + savedObjectsClient = savedObjectsClientMock.create(); + }); + + test('can delete transform ref and handle duplicate when previous version and current version are the same', async () => { + await deleteTransformRefs( + savedObjectsClient, + [ + { id: 'metrics-endpoint.policy-0.16.0-dev.0', type: 'ingest_pipeline' }, + { id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', type: 'transform' }, + ] as EsAssetReference[], + 'endpoint', + ['metrics-endpoint.metadata-current-default-0.16.0-dev.0'], + ['metrics-endpoint.metadata-current-default-0.16.0-dev.0'] + ); + expect(savedObjectsClient.update.mock.calls).toEqual([ + [ + 'epm-packages', + 'endpoint', + { + installed_es: [ + { id: 'metrics-endpoint.policy-0.16.0-dev.0', type: 'ingest_pipeline' }, + { id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', type: 'transform' }, + ], + }, + ], + ]); + }); + + test('can delete transform ref when previous version and current version are not the same', async () => { + await deleteTransformRefs( + savedObjectsClient, + [ + { id: 'metrics-endpoint.policy-0.16.0-dev.0', type: 'ingest_pipeline' }, + { id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', type: 'transform' }, + ] as EsAssetReference[], + 'endpoint', + ['metrics-endpoint.metadata-current-default-0.15.0-dev.0'], + ['metrics-endpoint.metadata-current-default-0.16.0-dev.0'] + ); + + expect(savedObjectsClient.update.mock.calls).toEqual([ + [ + 'epm-packages', + 'endpoint', + { + installed_es: [ + { id: 'metrics-endpoint.policy-0.16.0-dev.0', type: 'ingest_pipeline' }, + { id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', type: 'transform' }, + ], + }, + ], + ]); + }); +}); diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.ts new file mode 100644 index 0000000000000..5c9d3e2846200 --- /dev/null +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { SavedObjectsClientContract } from 'kibana/server'; +import { CallESAsCurrentUser, ElasticsearchAssetType, EsAssetReference } from '../../../../types'; +import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../../../common/constants'; + +export const stopTransforms = async (transformIds: string[], callCluster: CallESAsCurrentUser) => { + for (const transformId of transformIds) { + await callCluster('transport.request', { + method: 'POST', + path: `_transform/${transformId}/_stop`, + query: 'force=true', + ignore: [404], + }); + } +}; + +export const deleteTransforms = async ( + callCluster: CallESAsCurrentUser, + transformIds: string[] +) => { + await Promise.all( + transformIds.map(async (transformId) => { + await stopTransforms([transformId], callCluster); + await callCluster('transport.request', { + method: 'DELETE', + query: 'force=true', + path: `_transform/${transformId}`, + ignore: [404], + }); + }) + ); +}; + +export const deleteTransformRefs = async ( + savedObjectsClient: SavedObjectsClientContract, + installedEsAssets: EsAssetReference[], + pkgName: string, + installedEsIdToRemove: string[], + currentInstalledEsTransformIds: string[] +) => { + const seen = new Set(); + const filteredAssets = installedEsAssets.filter(({ type, id }) => { + if (type !== ElasticsearchAssetType.transform) return true; + const add = + (currentInstalledEsTransformIds.includes(id) || !installedEsIdToRemove.includes(id)) && + !seen.has(id); + seen.add(id); + return add; + }); + return savedObjectsClient.update(PACKAGES_SAVED_OBJECT_TYPE, pkgName, { + installed_es: filteredAssets, + }); +}; diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts new file mode 100644 index 0000000000000..0b66077b8699a --- /dev/null +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts @@ -0,0 +1,420 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +jest.mock('../../packages/get', () => { + return { getInstallation: jest.fn(), getInstallationObject: jest.fn() }; +}); + +jest.mock('./common', () => { + return { + getAsset: jest.fn(), + }; +}); + +import { installTransformForDataset } from './install'; +import { ILegacyScopedClusterClient, SavedObject, SavedObjectsClientContract } from 'kibana/server'; +import { ElasticsearchAssetType, Installation, RegistryPackage } from '../../../../types'; +import { getInstallation, getInstallationObject } from '../../packages'; +import { getAsset } from './common'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { savedObjectsClientMock } from '../../../../../../../../src/core/server/saved_objects/service/saved_objects_client.mock'; + +describe('test transform install', () => { + let legacyScopedClusterClient: jest.Mocked; + let savedObjectsClient: jest.Mocked; + beforeEach(() => { + legacyScopedClusterClient = { + callAsInternalUser: jest.fn(), + callAsCurrentUser: jest.fn(), + }; + (getInstallation as jest.MockedFunction).mockReset(); + (getInstallationObject as jest.MockedFunction).mockReset(); + savedObjectsClient = savedObjectsClientMock.create(); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('can install new versions and removes older version', async () => { + const previousInstallation: Installation = ({ + installed_es: [ + { + id: 'metrics-endpoint.policy-0.16.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', + type: ElasticsearchAssetType.transform, + }, + ], + } as unknown) as Installation; + + const currentInstallation: Installation = ({ + installed_es: [ + { + id: 'metrics-endpoint.policy-0.16.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', + type: ElasticsearchAssetType.transform, + }, + { + id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + type: ElasticsearchAssetType.transform, + }, + { + id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', + type: ElasticsearchAssetType.transform, + }, + ], + } as unknown) as Installation; + (getAsset as jest.MockedFunction) + .mockReturnValueOnce(Buffer.from('{"content": "data"}', 'utf8')) + .mockReturnValueOnce(Buffer.from('{"content": "data"}', 'utf8')); + + (getInstallation as jest.MockedFunction) + .mockReturnValueOnce(Promise.resolve(previousInstallation)) + .mockReturnValueOnce(Promise.resolve(currentInstallation)); + + (getInstallationObject as jest.MockedFunction< + typeof getInstallationObject + >).mockReturnValueOnce( + Promise.resolve(({ + attributes: { + installed_es: previousInstallation.installed_es, + }, + } as unknown) as SavedObject) + ); + + await installTransformForDataset( + ({ + name: 'endpoint', + version: '0.16.0-dev.0', + datasets: [ + { + type: 'metrics', + name: 'endpoint.metadata', + title: 'Endpoint Metadata', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, + }, + path: 'metadata', + }, + { + type: 'metrics', + name: 'endpoint.metadata_current', + title: 'Endpoint Metadata Current', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, + }, + path: 'metadata_current', + }, + ], + } as unknown) as RegistryPackage, + [ + 'endpoint-0.16.0-dev.0/dataset/policy/elasticsearch/ingest_pipeline/default.json', + 'endpoint-0.16.0-dev.0/dataset/metadata/elasticsearch/transform/default.json', + 'endpoint-0.16.0-dev.0/dataset/metadata_current/elasticsearch/transform/default.json', + ], + legacyScopedClusterClient.callAsCurrentUser, + savedObjectsClient + ); + + expect(legacyScopedClusterClient.callAsCurrentUser.mock.calls).toEqual([ + [ + 'transport.request', + { + method: 'POST', + path: '_transform/metrics-endpoint.metadata_current-default-0.15.0-dev.0/_stop', + query: 'force=true', + ignore: [404], + }, + ], + [ + 'transport.request', + { + method: 'DELETE', + query: 'force=true', + path: '_transform/metrics-endpoint.metadata_current-default-0.15.0-dev.0', + ignore: [404], + }, + ], + [ + 'transport.request', + { + method: 'PUT', + path: '_transform/metrics-endpoint.metadata-default-0.16.0-dev.0', + query: 'defer_validation=true', + body: '{"content": "data"}', + }, + ], + [ + 'transport.request', + { + method: 'PUT', + path: '_transform/metrics-endpoint.metadata_current-default-0.16.0-dev.0', + query: 'defer_validation=true', + body: '{"content": "data"}', + }, + ], + [ + 'transport.request', + { + method: 'POST', + path: '_transform/metrics-endpoint.metadata-default-0.16.0-dev.0/_start', + }, + ], + [ + 'transport.request', + { + method: 'POST', + path: '_transform/metrics-endpoint.metadata_current-default-0.16.0-dev.0/_start', + }, + ], + ]); + + expect(savedObjectsClient.update.mock.calls).toEqual([ + [ + 'epm-packages', + 'endpoint', + { + installed_es: [ + { + id: 'metrics-endpoint.policy-0.16.0-dev.0', + type: 'ingest_pipeline', + }, + { + id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', + type: 'transform', + }, + { + id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', + type: 'transform', + }, + { + id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + type: 'transform', + }, + ], + }, + ], + [ + 'epm-packages', + 'endpoint', + { + installed_es: [ + { + id: 'metrics-endpoint.policy-0.16.0-dev.0', + type: 'ingest_pipeline', + }, + { + id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + type: 'transform', + }, + { + id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', + type: 'transform', + }, + ], + }, + ], + ]); + }); + + test('can install new version and when no older version', async () => { + const previousInstallation: Installation = ({ + installed_es: [], + } as unknown) as Installation; + + const currentInstallation: Installation = ({ + installed_es: [ + { + id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', + type: ElasticsearchAssetType.transform, + }, + ], + } as unknown) as Installation; + (getAsset as jest.MockedFunction).mockReturnValueOnce( + Buffer.from('{"content": "data"}', 'utf8') + ); + (getInstallation as jest.MockedFunction) + .mockReturnValueOnce(Promise.resolve(previousInstallation)) + .mockReturnValueOnce(Promise.resolve(currentInstallation)); + + (getInstallationObject as jest.MockedFunction< + typeof getInstallationObject + >).mockReturnValueOnce( + Promise.resolve(({ attributes: { installed_es: [] } } as unknown) as SavedObject< + Installation + >) + ); + legacyScopedClusterClient.callAsCurrentUser = jest.fn(); + await installTransformForDataset( + ({ + name: 'endpoint', + version: '0.16.0-dev.0', + datasets: [ + { + type: 'metrics', + name: 'endpoint.metadata_current', + title: 'Endpoint Metadata', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, + }, + path: 'metadata_current', + }, + ], + } as unknown) as RegistryPackage, + ['endpoint-0.16.0-dev.0/dataset/metadata_current/elasticsearch/transform/default.json'], + legacyScopedClusterClient.callAsCurrentUser, + savedObjectsClient + ); + + expect(legacyScopedClusterClient.callAsCurrentUser.mock.calls).toEqual([ + [ + 'transport.request', + { + method: 'PUT', + path: '_transform/metrics-endpoint.metadata_current-default-0.16.0-dev.0', + query: 'defer_validation=true', + body: '{"content": "data"}', + }, + ], + [ + 'transport.request', + { + method: 'POST', + path: '_transform/metrics-endpoint.metadata_current-default-0.16.0-dev.0/_start', + }, + ], + ]); + expect(savedObjectsClient.update.mock.calls).toEqual([ + [ + 'epm-packages', + 'endpoint', + { + installed_es: [ + { id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', type: 'transform' }, + ], + }, + ], + ]); + }); + + test('can removes older version when no new install in package', async () => { + const previousInstallation: Installation = ({ + installed_es: [ + { + id: 'metrics-endpoint.metadata-current-default-0.15.0-dev.0', + type: ElasticsearchAssetType.transform, + }, + ], + } as unknown) as Installation; + + const currentInstallation: Installation = ({ + installed_es: [], + } as unknown) as Installation; + + (getInstallation as jest.MockedFunction) + .mockReturnValueOnce(Promise.resolve(previousInstallation)) + .mockReturnValueOnce(Promise.resolve(currentInstallation)); + + (getInstallationObject as jest.MockedFunction< + typeof getInstallationObject + >).mockReturnValueOnce( + Promise.resolve(({ + attributes: { installed_es: currentInstallation.installed_es }, + } as unknown) as SavedObject) + ); + + await installTransformForDataset( + ({ + name: 'endpoint', + version: '0.16.0-dev.0', + datasets: [ + { + type: 'metrics', + name: 'endpoint.metadata', + title: 'Endpoint Metadata', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, + }, + path: 'metadata', + }, + { + type: 'metrics', + name: 'endpoint.metadata_current', + title: 'Endpoint Metadata Current', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, + }, + path: 'metadata_current', + }, + ], + } as unknown) as RegistryPackage, + [], + legacyScopedClusterClient.callAsCurrentUser, + savedObjectsClient + ); + + expect(legacyScopedClusterClient.callAsCurrentUser.mock.calls).toEqual([ + [ + 'transport.request', + { + ignore: [404], + method: 'POST', + path: '_transform/metrics-endpoint.metadata-current-default-0.15.0-dev.0/_stop', + query: 'force=true', + }, + ], + [ + 'transport.request', + { + ignore: [404], + method: 'DELETE', + path: '_transform/metrics-endpoint.metadata-current-default-0.15.0-dev.0', + query: 'force=true', + }, + ], + ]); + expect(savedObjectsClient.update.mock.calls).toEqual([ + [ + 'epm-packages', + 'endpoint', + { + installed_es: [], + }, + ], + ]); + }); +}); diff --git a/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts b/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts index d1d2352f138b8..e6144e0309594 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts @@ -35,6 +35,7 @@ import { updateCurrentWriteIndices } from '../elasticsearch/template/template'; import { deleteKibanaSavedObjectsAssets } from './remove'; import { PackageOutdatedError } from '../../../errors'; import { getPackageSavedObjects } from './get'; +import { installTransformForDataset } from '../elasticsearch/transform/install'; export async function installLatestPackage(options: { savedObjectsClient: SavedObjectsClientContract; @@ -191,6 +192,13 @@ export async function installPackage({ // update current backing indices of each data stream await updateCurrentWriteIndices(callCluster, installedTemplates); + const installedTransforms = await installTransformForDataset( + registryPackageInfo, + paths, + callCluster, + savedObjectsClient + ); + // if this is an update or retrying an update, delete the previous version's pipelines if (installType === 'update' || installType === 'reupdate') { await deletePreviousPipelines( @@ -216,13 +224,19 @@ export async function installPackage({ type: ElasticsearchAssetType.indexTemplate, })); await Promise.all([installKibanaAssetsPromise, installIndexPatternPromise]); + // update to newly installed version when all assets are successfully installed if (installedPkg) await updateVersion(savedObjectsClient, pkgName, pkgVersion); await savedObjectsClient.update(PACKAGES_SAVED_OBJECT_TYPE, pkgName, { install_version: pkgVersion, install_status: 'installed', }); - return [...installedKibanaAssetsRefs, ...installedPipelines, ...installedTemplateRefs]; + return [ + ...installedKibanaAssetsRefs, + ...installedPipelines, + ...installedTemplateRefs, + ...installedTransforms, + ]; } const updateVersion = async ( diff --git a/x-pack/plugins/ingest_manager/server/services/epm/packages/remove.ts b/x-pack/plugins/ingest_manager/server/services/epm/packages/remove.ts index 71eee1ee82c90..2434ebf27aa5d 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/packages/remove.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/packages/remove.ts @@ -6,12 +6,17 @@ import { SavedObjectsClientContract } from 'src/core/server'; import Boom from 'boom'; -import { PACKAGES_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../../../constants'; -import { AssetReference, AssetType, ElasticsearchAssetType } from '../../../types'; -import { CallESAsCurrentUser } from '../../../types'; +import { PACKAGE_POLICY_SAVED_OBJECT_TYPE, PACKAGES_SAVED_OBJECT_TYPE } from '../../../constants'; +import { + AssetReference, + AssetType, + CallESAsCurrentUser, + ElasticsearchAssetType, +} from '../../../types'; import { getInstallation, savedObjectTypes } from './index'; import { deletePipeline } from '../elasticsearch/ingest_pipeline/'; import { installIndexPatterns } from '../kibana/index_pattern/install'; +import { deleteTransforms } from '../elasticsearch/transform/remove'; import { packagePolicyService, appContextService } from '../..'; import { splitPkgKey, deletePackageCache, getArchiveInfo } from '../registry'; @@ -72,6 +77,8 @@ async function deleteAssets( return deletePipeline(callCluster, id); } else if (assetType === ElasticsearchAssetType.indexTemplate) { return deleteTemplate(callCluster, id); + } else if (assetType === ElasticsearchAssetType.transform) { + return deleteTransforms(callCluster, [id]); } }); try { diff --git a/x-pack/plugins/security_solution/common/endpoint/constants.ts b/x-pack/plugins/security_solution/common/endpoint/constants.ts index 366bf7a1df1f2..a6018837fa4fe 100644 --- a/x-pack/plugins/security_solution/common/endpoint/constants.ts +++ b/x-pack/plugins/security_solution/common/endpoint/constants.ts @@ -7,6 +7,7 @@ export const eventsIndexPattern = 'logs-endpoint.events.*'; export const alertsIndexPattern = 'logs-endpoint.alerts-*'; export const metadataIndexPattern = 'metrics-endpoint.metadata-*'; +export const metadataCurrentIndexPattern = 'metrics-endpoint.metadata_current-*'; export const policyIndexPattern = 'metrics-endpoint.policy-*'; export const telemetryIndexPattern = 'metrics-endpoint.telemetry-*'; export const LIMITED_CONCURRENCY_ENDPOINT_ROUTE_TAG = 'endpoint:limited-concurrency'; diff --git a/x-pack/plugins/security_solution/common/endpoint/types/index.ts b/x-pack/plugins/security_solution/common/endpoint/types/index.ts index 8e507cbc921a2..e0bd916103a28 100644 --- a/x-pack/plugins/security_solution/common/endpoint/types/index.ts +++ b/x-pack/plugins/security_solution/common/endpoint/types/index.ts @@ -445,6 +445,13 @@ export type HostInfo = Immutable<{ host_status: HostStatus; }>; +export type HostMetadataDetails = Immutable<{ + agent: { + id: string; + }; + HostDetails: HostMetadata; +}>; + export type HostMetadata = Immutable<{ '@timestamp': number; event: { diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/index.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/index.ts index 161a31e2ec934..144c536b4e45f 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/index.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/index.ts @@ -9,11 +9,12 @@ import { SearchResponse } from 'elasticsearch'; import { schema } from '@kbn/config-schema'; import Boom from 'boom'; -import { metadataIndexPattern } from '../../../../common/endpoint/constants'; +import { metadataCurrentIndexPattern } from '../../../../common/endpoint/constants'; import { getESQueryHostMetadataByID, kibanaRequestToMetadataListESQuery } from './query_builders'; import { HostInfo, HostMetadata, + HostMetadataDetails, HostResultList, HostStatus, } from '../../../../common/endpoint/types'; @@ -23,10 +24,6 @@ import { Agent, AgentStatus } from '../../../../../ingest_manager/common/types/m import { findAllUnenrolledAgentIds } from './support/unenroll'; import { findAgentIDsByStatus } from './support/agent_status'; -interface HitSource { - _source: HostMetadata; -} - interface MetadataRequestContext { agentService: AgentService; logger: Logger; @@ -127,7 +124,7 @@ export function registerEndpointRoutes(router: IRouter, endpointAppContext: Endp const queryParams = await kibanaRequestToMetadataListESQuery( req, endpointAppContext, - metadataIndexPattern, + metadataCurrentIndexPattern, { unenrolledAgentIds: unenrolledAgentIds.concat(IGNORED_ELASTIC_AGENT_IDS), statusAgentIDs: statusIDs, @@ -137,7 +134,7 @@ export function registerEndpointRoutes(router: IRouter, endpointAppContext: Endp const response = (await context.core.elasticsearch.legacy.client.callAsCurrentUser( 'search', queryParams - )) as SearchResponse; + )) as SearchResponse; return res.ok({ body: await mapToHostResultList(queryParams, response, metadataRequestContext), @@ -193,17 +190,17 @@ export async function getHostData( metadataRequestContext: MetadataRequestContext, id: string ): Promise { - const query = getESQueryHostMetadataByID(id, metadataIndexPattern); + const query = getESQueryHostMetadataByID(id, metadataCurrentIndexPattern); const response = (await metadataRequestContext.requestHandlerContext.core.elasticsearch.legacy.client.callAsCurrentUser( 'search', query - )) as SearchResponse; + )) as SearchResponse; if (response.hits.hits.length === 0) { return undefined; } - const hostMetadata: HostMetadata = response.hits.hits[0]._source; + const hostMetadata: HostMetadata = response.hits.hits[0]._source.HostDetails; const agent = await findAgent(metadataRequestContext, hostMetadata); if (agent && !agent.active) { @@ -241,19 +238,19 @@ async function findAgent( async function mapToHostResultList( // eslint-disable-next-line @typescript-eslint/no-explicit-any queryParams: Record, - searchResponse: SearchResponse, + searchResponse: SearchResponse, metadataRequestContext: MetadataRequestContext ): Promise { - const totalNumberOfHosts = searchResponse?.aggregations?.total?.value || 0; + const totalNumberOfHosts = + ((searchResponse.hits?.total as unknown) as { value: number; relation: string }).value || 0; if (searchResponse.hits.hits.length > 0) { return { request_page_size: queryParams.size, request_page_index: queryParams.from, hosts: await Promise.all( - searchResponse.hits.hits - .map((response) => response.inner_hits.most_recent.hits.hits) - .flatMap((data) => data as HitSource) - .map(async (entry) => enrichHostMetadata(entry._source, metadataRequestContext)) + searchResponse.hits.hits.map(async (entry) => + enrichHostMetadata(entry._source.HostDetails, metadataRequestContext) + ) ), total: totalNumberOfHosts, }; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts index 29624b35d5c9e..f784941f3539a 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts @@ -23,6 +23,7 @@ import { import { HostInfo, HostMetadata, + HostMetadataDetails, HostResultList, HostStatus, } from '../../../../common/endpoint/types'; @@ -141,7 +142,7 @@ describe('test endpoint route', () => { bool: { must_not: { terms: { - 'elastic.agent.id': [ + 'HostDetails.elastic.agent.id': [ '00000000-0000-0000-0000-000000000000', '11111111-1111-1111-1111-111111111111', ], @@ -197,7 +198,7 @@ describe('test endpoint route', () => { bool: { must_not: { terms: { - 'elastic.agent.id': [ + 'HostDetails.elastic.agent.id': [ '00000000-0000-0000-0000-000000000000', '11111111-1111-1111-1111-111111111111', ], @@ -442,7 +443,7 @@ describe('Filters Schema Test', () => { }); }); -function createSearchResponse(hostMetadata?: HostMetadata): SearchResponse { +function createSearchResponse(hostMetadata?: HostMetadata): SearchResponse { return ({ took: 15, timed_out: false, @@ -454,7 +455,7 @@ function createSearchResponse(hostMetadata?: HostMetadata): SearchResponse; + } as unknown) as SearchResponse; } diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.test.ts index e9eb7093a7631..84da4a0960820 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.test.ts @@ -7,7 +7,7 @@ import { httpServerMock, loggingSystemMock } from '../../../../../../../src/core import { kibanaRequestToMetadataListESQuery, getESQueryHostMetadataByID } from './query_builders'; import { EndpointAppContextService } from '../../endpoint_app_context_services'; import { createMockConfig } from '../../../lib/detection_engine/routes/__mocks__'; -import { metadataIndexPattern } from '../../../../common/endpoint/constants'; +import { metadataCurrentIndexPattern } from '../../../../common/endpoint/constants'; describe('query builder', () => { describe('MetadataListESQuery', () => { @@ -22,31 +22,16 @@ describe('query builder', () => { service: new EndpointAppContextService(), config: () => Promise.resolve(createMockConfig()), }, - metadataIndexPattern + metadataCurrentIndexPattern ); expect(query).toEqual({ body: { query: { match_all: {}, }, - collapse: { - field: 'host.id', - inner_hits: { - name: 'most_recent', - size: 1, - sort: [{ 'event.created': 'desc' }], - }, - }, - aggs: { - total: { - cardinality: { - field: 'host.id', - }, - }, - }, sort: [ { - 'event.created': { + 'HostDetails.event.created': { order: 'desc', }, }, @@ -54,7 +39,7 @@ describe('query builder', () => { }, from: 0, size: 10, - index: metadataIndexPattern, + index: metadataCurrentIndexPattern, // eslint-disable-next-line @typescript-eslint/no-explicit-any } as Record); }); @@ -74,7 +59,7 @@ describe('query builder', () => { service: new EndpointAppContextService(), config: () => Promise.resolve(createMockConfig()), }, - metadataIndexPattern, + metadataCurrentIndexPattern, { unenrolledAgentIds: [unenrolledElasticAgentId], } @@ -86,29 +71,14 @@ describe('query builder', () => { bool: { must_not: { terms: { - 'elastic.agent.id': [unenrolledElasticAgentId], + 'HostDetails.elastic.agent.id': [unenrolledElasticAgentId], }, }, }, }, - collapse: { - field: 'host.id', - inner_hits: { - name: 'most_recent', - size: 1, - sort: [{ 'event.created': 'desc' }], - }, - }, - aggs: { - total: { - cardinality: { - field: 'host.id', - }, - }, - }, sort: [ { - 'event.created': { + 'HostDetails.event.created': { order: 'desc', }, }, @@ -116,7 +86,7 @@ describe('query builder', () => { }, from: 0, size: 10, - index: metadataIndexPattern, + index: metadataCurrentIndexPattern, // eslint-disable-next-line @typescript-eslint/no-explicit-any } as Record); } @@ -127,7 +97,7 @@ describe('query builder', () => { it('test default query params for all endpoints metadata when body filter is provided', async () => { const mockRequest = httpServerMock.createKibanaRequest({ body: { - filters: { kql: 'not host.ip:10.140.73.246' }, + filters: { kql: 'not HostDetails.host.ip:10.140.73.246' }, }, }); const query = await kibanaRequestToMetadataListESQuery( @@ -137,7 +107,7 @@ describe('query builder', () => { service: new EndpointAppContextService(), config: () => Promise.resolve(createMockConfig()), }, - metadataIndexPattern + metadataCurrentIndexPattern ); expect(query).toEqual({ @@ -152,7 +122,7 @@ describe('query builder', () => { should: [ { match: { - 'host.ip': '10.140.73.246', + 'HostDetails.host.ip': '10.140.73.246', }, }, ], @@ -164,24 +134,9 @@ describe('query builder', () => { ], }, }, - collapse: { - field: 'host.id', - inner_hits: { - name: 'most_recent', - size: 1, - sort: [{ 'event.created': 'desc' }], - }, - }, - aggs: { - total: { - cardinality: { - field: 'host.id', - }, - }, - }, sort: [ { - 'event.created': { + 'HostDetails.event.created': { order: 'desc', }, }, @@ -189,7 +144,7 @@ describe('query builder', () => { }, from: 0, size: 10, - index: metadataIndexPattern, + index: metadataCurrentIndexPattern, // eslint-disable-next-line @typescript-eslint/no-explicit-any } as Record); }); @@ -201,7 +156,7 @@ describe('query builder', () => { const unenrolledElasticAgentId = '1fdca33f-799f-49f4-939c-ea4383c77672'; const mockRequest = httpServerMock.createKibanaRequest({ body: { - filters: { kql: 'not host.ip:10.140.73.246' }, + filters: { kql: 'not HostDetails.host.ip:10.140.73.246' }, }, }); const query = await kibanaRequestToMetadataListESQuery( @@ -211,7 +166,7 @@ describe('query builder', () => { service: new EndpointAppContextService(), config: () => Promise.resolve(createMockConfig()), }, - metadataIndexPattern, + metadataCurrentIndexPattern, { unenrolledAgentIds: [unenrolledElasticAgentId], } @@ -226,7 +181,7 @@ describe('query builder', () => { bool: { must_not: { terms: { - 'elastic.agent.id': [unenrolledElasticAgentId], + 'HostDetails.elastic.agent.id': [unenrolledElasticAgentId], }, }, }, @@ -238,7 +193,7 @@ describe('query builder', () => { should: [ { match: { - 'host.ip': '10.140.73.246', + 'HostDetails.host.ip': '10.140.73.246', }, }, ], @@ -250,24 +205,9 @@ describe('query builder', () => { ], }, }, - collapse: { - field: 'host.id', - inner_hits: { - name: 'most_recent', - size: 1, - sort: [{ 'event.created': 'desc' }], - }, - }, - aggs: { - total: { - cardinality: { - field: 'host.id', - }, - }, - }, sort: [ { - 'event.created': { + 'HostDetails.event.created': { order: 'desc', }, }, @@ -275,7 +215,7 @@ describe('query builder', () => { }, from: 0, size: 10, - index: metadataIndexPattern, + index: metadataCurrentIndexPattern, // eslint-disable-next-line @typescript-eslint/no-explicit-any } as Record); } @@ -285,15 +225,15 @@ describe('query builder', () => { describe('MetadataGetQuery', () => { it('searches for the correct ID', () => { const mockID = 'AABBCCDD-0011-2233-AA44-DEADBEEF8899'; - const query = getESQueryHostMetadataByID(mockID, metadataIndexPattern); + const query = getESQueryHostMetadataByID(mockID, metadataCurrentIndexPattern); expect(query).toEqual({ body: { - query: { match: { 'host.id': mockID } }, - sort: [{ 'event.created': { order: 'desc' } }], + query: { match: { 'HostDetails.host.id': mockID } }, + sort: [{ 'HostDetails.event.created': { order: 'desc' } }], size: 1, }, - index: metadataIndexPattern, + index: metadataCurrentIndexPattern, }); }); }); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.ts index ba9be96201dbe..9002d328efbe3 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/query_builders.ts @@ -28,24 +28,9 @@ export async function kibanaRequestToMetadataListESQuery( queryBuilderOptions?.unenrolledAgentIds!, queryBuilderOptions?.statusAgentIDs! ), - collapse: { - field: 'host.id', - inner_hits: { - name: 'most_recent', - size: 1, - sort: [{ 'event.created': 'desc' }], - }, - }, - aggs: { - total: { - cardinality: { - field: 'host.id', - }, - }, - }, sort: [ { - 'event.created': { + 'HostDetails.event.created': { order: 'desc', }, }, @@ -90,7 +75,7 @@ function buildQueryBody( ? { must_not: { terms: { - 'elastic.agent.id': unerolledAgentIds, + 'HostDetails.elastic.agent.id': unerolledAgentIds, }, }, } @@ -99,7 +84,7 @@ function buildQueryBody( ? { must: { terms: { - 'elastic.agent.id': statusAgentIDs, + 'HostDetails.elastic.agent.id': statusAgentIDs, }, }, } @@ -137,12 +122,12 @@ export function getESQueryHostMetadataByID(hostID: string, index: string) { body: { query: { match: { - 'host.id': hostID, + 'HostDetails.host.id': hostID, }, }, sort: [ { - 'event.created': { + 'HostDetails.event.created': { order: 'desc', }, }, diff --git a/x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts b/x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts index c7cfee565b2e9..198c129b7482f 100644 --- a/x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts +++ b/x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts @@ -84,6 +84,13 @@ export default function (providerContext: FtrProviderContext) { }); expect(resSettings.statusCode).equal(200); }); + it('should have installed the transform components', async function () { + const res = await es.transport.request({ + method: 'GET', + path: `/_transform/${logsTemplateName}-default-${pkgVersion}`, + }); + expect(res.statusCode).equal(200); + }); it('should have installed the kibana assets', async function () { const resIndexPatternLogs = await kibanaServer.savedObjects.get({ type: 'index-pattern', @@ -161,6 +168,10 @@ export default function (providerContext: FtrProviderContext) { id: 'metrics-all_assets.test_metrics', type: 'index_template', }, + { + id: 'logs-all_assets.test_logs-default-0.1.0', + type: 'transform', + }, ], es_index_patterns: { test_logs: 'logs-all_assets.test_logs-*', @@ -237,6 +248,18 @@ export default function (providerContext: FtrProviderContext) { ); expect(resPipeline2.statusCode).equal(404); }); + it('should have uninstalled the transforms', async function () { + const res = await es.transport.request( + { + method: 'GET', + path: `/_transform/${logsTemplateName}-default-${pkgVersion}`, + }, + { + ignore: [404], + } + ); + expect(res.statusCode).equal(404); + }); it('should have uninstalled the kibana assets', async function () { let resDashboard; try { diff --git a/x-pack/test/ingest_manager_api_integration/apis/fixtures/test_packages/all_assets/0.1.0/dataset/test_logs/elasticsearch/transform/default.json b/x-pack/test/ingest_manager_api_integration/apis/fixtures/test_packages/all_assets/0.1.0/dataset/test_logs/elasticsearch/transform/default.json new file mode 100644 index 0000000000000..27f75af131eed --- /dev/null +++ b/x-pack/test/ingest_manager_api_integration/apis/fixtures/test_packages/all_assets/0.1.0/dataset/test_logs/elasticsearch/transform/default.json @@ -0,0 +1,35 @@ +{ + "source": { + "index": "logs-all_assets.test_log-default*" + }, + "dest": { + "index": "logs-all_assets.test_log_current-default" + }, + "pivot": { + "group_by": { + "agent.id": { + "terms": { + "field": "agent.id" + } + } + }, + "aggregations": { + "HostDetails": { + "scripted_metric": { + "init_script": "state.timestamp_latest = 0L; state.last_doc=''", + "map_script": "def current_date = doc['@timestamp'].getValue().toInstant().toEpochMilli(); if (current_date \u003e state.timestamp_latest) {state.timestamp_latest = current_date;state.last_doc = new HashMap(params['_source']);}", + "combine_script": "return state", + "reduce_script": "def last_doc = '';def timestamp_latest = 0L; for (s in states) {if (s.timestamp_latest \u003e (timestamp_latest)) {timestamp_latest = s.timestamp_latest; last_doc = s.last_doc;}} return last_doc" + } + } + } + }, + "description": "collapse and update the latest document for each host", + "frequency": "1m", + "sync": { + "time": { + "field": "event.ingested", + "delay": "60s" + } + } +} diff --git a/x-pack/test/ingest_manager_api_integration/config.ts b/x-pack/test/ingest_manager_api_integration/config.ts index 08d5da148b51e..94fbee0593d3e 100644 --- a/x-pack/test/ingest_manager_api_integration/config.ts +++ b/x-pack/test/ingest_manager_api_integration/config.ts @@ -12,7 +12,7 @@ import { defineDockerServersConfig } from '@kbn/test'; // Docker image to use for Ingest Manager API integration tests. // This hash comes from the commit hash here: https://github.com/elastic/package-storage/commit export const dockerImage = - 'docker.elastic.co/package-registry/distribution:f6b01daec8cfe355101e366de9941d35a4c3763e'; + 'docker.elastic.co/package-registry/distribution:5e0e12ce1bc2cb0c2f67f2e07d11b9a6043bcf25'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { const xPackAPITestsConfig = await readConfigFile(require.resolve('../api_integration/config.ts')); diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts index c9385bf9cebf2..ebd5ff0afee77 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts @@ -6,7 +6,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; -import { deleteMetadataStream } from '../../../security_solution_endpoint_api_int/apis/data_stream_helper'; + +import { + deleteMetadataCurrentStream, + deleteMetadataStream, +} from '../../../security_solution_endpoint_api_int/apis/data_stream_helper'; + export default ({ getPageObjects, getService }: FtrProviderContext) => { const pageObjects = getPageObjects(['common', 'endpoint', 'header', 'endpointPageUtils']); const esArchiver = getService('esArchiver'); @@ -23,6 +28,16 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { 'Version', 'Last Active', ], + [ + 'rezzani-7.example.com', + 'Error', + 'Default', + 'Failure', + 'windows 10.0', + '10.101.149.26, 2606:a000:ffc0:39:11ef:37b9:3371:578c', + '6.8.0', + 'Jan 24, 2020 @ 16:06:09.541', + ], [ 'cadmann-4.example.com', 'Error', @@ -43,16 +58,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { '6.0.0', 'Jan 24, 2020 @ 16:06:09.541', ], - [ - 'rezzani-7.example.com', - 'Error', - 'Default', - 'Failure', - 'windows 10.0', - '10.101.149.26, 2606:a000:ffc0:39:11ef:37b9:3371:578c', - '6.8.0', - 'Jan 24, 2020 @ 16:06:09.541', - ], ]; describe('endpoint list', function () { @@ -61,10 +66,13 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('when initially navigating to page', () => { before(async () => { + await deleteMetadataStream(getService); + await deleteMetadataCurrentStream(getService); await pageObjects.endpoint.navigateToEndpointList(); }); after(async () => { await deleteMetadataStream(getService); + await deleteMetadataCurrentStream(getService); }); it('finds no data in list and prompts onboarding to add policy', async () => { @@ -73,7 +81,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { it('finds data after load and polling', async () => { await esArchiver.load('endpoint/metadata/api_feature', { useCreate: true }); - await pageObjects.endpoint.waitForTableToHaveData('endpointListTable', 10000); + await pageObjects.endpoint.waitForTableToHaveData('endpointListTable', 120000); const tableData = await pageObjects.endpointPageUtils.tableData('endpointListTable'); expect(tableData).to.eql(expectedData); }); @@ -82,10 +90,12 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('when there is data,', () => { before(async () => { await esArchiver.load('endpoint/metadata/api_feature', { useCreate: true }); + await sleep(120000); await pageObjects.endpoint.navigateToEndpointList(); }); after(async () => { await deleteMetadataStream(getService); + await deleteMetadataCurrentStream(getService); }); it('finds page title', async () => { @@ -202,10 +212,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); - describe('when there is no data,', () => { + describe.skip('when there is no data,', () => { before(async () => { // clear out the data and reload the page await deleteMetadataStream(getService); + await deleteMetadataCurrentStream(getService); await pageObjects.endpoint.navigateToEndpointList(); }); it('displays empty Policy Table page.', async () => { diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/data_stream_helper.ts b/x-pack/test/security_solution_endpoint_api_int/apis/data_stream_helper.ts index b16da16b3137f..be25f26532d9c 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/data_stream_helper.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/data_stream_helper.ts @@ -10,6 +10,7 @@ import { eventsIndexPattern, alertsIndexPattern, policyIndexPattern, + metadataCurrentIndexPattern, } from '../../../plugins/security_solution/common/endpoint/constants'; export async function deleteDataStream(getService: (serviceName: 'es') => Client, index: string) { @@ -25,10 +26,44 @@ export async function deleteDataStream(getService: (serviceName: 'es') => Client ); } +export async function deleteAllDocsFromIndex( + getService: (serviceName: 'es') => Client, + index: string +) { + const client = getService('es'); + await client.deleteByQuery( + { + body: { + query: { + match_all: {}, + }, + }, + index: `${index}`, + }, + { + ignore: [404], + } + ); +} + export async function deleteMetadataStream(getService: (serviceName: 'es') => Client) { await deleteDataStream(getService, metadataIndexPattern); } +export async function deleteMetadataCurrentStream(getService: (serviceName: 'es') => Client) { + await deleteDataStream(getService, metadataCurrentIndexPattern); +} + +export async function deleteAllDocsFromMetadataIndex(getService: (serviceName: 'es') => Client) { + await deleteAllDocsFromIndex(getService, metadataIndexPattern); +} + +export async function deleteAllDocsFromMetadataCurrentIndex( + getService: (serviceName: 'es') => Client +) { + await deleteAllDocsFromIndex(getService, metadataCurrentIndexPattern); +} + export async function deleteEventsStream(getService: (serviceName: 'es') => Client) { await deleteDataStream(getService, eventsIndexPattern); } diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts index 3afa9f397a2ea..2286320ed7a88 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts @@ -5,7 +5,12 @@ */ import expect from '@kbn/expect/expect.js'; import { FtrProviderContext } from '../ftr_provider_context'; -import { deleteMetadataStream } from './data_stream_helper'; +import { + deleteAllDocsFromMetadataCurrentIndex, + deleteMetadataCurrentStream, + deleteAllDocsFromMetadataIndex, + deleteMetadataStream, +} from './data_stream_helper'; /** * The number of host documents in the es archive. @@ -15,12 +20,14 @@ const numberOfHostsInFixture = 3; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const supertest = getService('supertest'); + describe('test metadata api', () => { describe('POST /api/endpoint/metadata when index is empty', () => { it('metadata api should return empty result when index is empty', async () => { - // the endpoint uses data streams and es archiver does not support deleting them at the moment so we need - // to do it manually await deleteMetadataStream(getService); + await deleteAllDocsFromMetadataIndex(getService); + await deleteMetadataCurrentStream(getService); + await deleteAllDocsFromMetadataCurrentIndex(getService); const { body } = await supertest .post('/api/endpoint/metadata') .set('kbn-xsrf', 'xxx') @@ -34,12 +41,19 @@ export default function ({ getService }: FtrProviderContext) { }); describe('POST /api/endpoint/metadata when index is not empty', () => { - before( - async () => await esArchiver.load('endpoint/metadata/api_feature', { useCreate: true }) - ); + before(async () => { + await esArchiver.load('endpoint/metadata/api_feature', { useCreate: true }); + // wait for transform + await new Promise((r) => setTimeout(r, 120000)); + }); // the endpoint uses data streams and es archiver does not support deleting them at the moment so we need // to do it manually - after(async () => await deleteMetadataStream(getService)); + after(async () => { + await deleteMetadataStream(getService); + await deleteAllDocsFromMetadataIndex(getService); + await deleteMetadataCurrentStream(getService); + await deleteAllDocsFromMetadataCurrentIndex(getService); + }); it('metadata api should return one entry for each host with default paging', async () => { const { body } = await supertest .post('/api/endpoint/metadata') @@ -121,7 +135,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'xxx') .send({ filters: { - kql: 'not host.ip:10.46.229.234', + kql: 'not HostDetails.host.ip:10.46.229.234', }, }) .expect(200); @@ -146,7 +160,7 @@ export default function ({ getService }: FtrProviderContext) { }, ], filters: { - kql: `not host.ip:${notIncludedIp}`, + kql: `not HostDetails.host.ip:${notIncludedIp}`, }, }) .expect(200); @@ -154,12 +168,14 @@ export default function ({ getService }: FtrProviderContext) { const resultIps: string[] = [].concat( ...body.hosts.map((hostInfo: Record) => hostInfo.metadata.host.ip) ); - expect(resultIps).to.eql([ - '10.192.213.130', - '10.70.28.129', - '10.101.149.26', - '2606:a000:ffc0:39:11ef:37b9:3371:578c', - ]); + expect(resultIps.sort()).to.eql( + [ + '10.192.213.130', + '10.70.28.129', + '10.101.149.26', + '2606:a000:ffc0:39:11ef:37b9:3371:578c', + ].sort() + ); expect(resultIps).not.include.eql(notIncludedIp); expect(body.hosts.length).to.eql(2); expect(body.request_page_size).to.eql(10); @@ -173,7 +189,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'xxx') .send({ filters: { - kql: `host.os.Ext.variant:${variantValue}`, + kql: `HostDetails.host.os.Ext.variant:${variantValue}`, }, }) .expect(200); @@ -194,7 +210,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'xxx') .send({ filters: { - kql: `host.ip:${targetEndpointIp}`, + kql: `HostDetails.host.ip:${targetEndpointIp}`, }, }) .expect(200); @@ -215,7 +231,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'xxx') .send({ filters: { - kql: `not Endpoint.policy.applied.status:success`, + kql: `not HostDetails.Endpoint.policy.applied.status:success`, }, }) .expect(200); @@ -236,7 +252,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'xxx') .send({ filters: { - kql: `elastic.agent.id:${targetElasticAgentId}`, + kql: `HostDetails.elastic.agent.id:${targetElasticAgentId}`, }, }) .expect(200); From 8ef31f66843e9cbb976beb5b0221b2a2fd7d0006 Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Tue, 8 Sep 2020 19:36:41 -0700 Subject: [PATCH 43/58] docs: fix link to APM Server (#77002) --- docs/apm/troubleshooting.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/apm/troubleshooting.asciidoc b/docs/apm/troubleshooting.asciidoc index 65f7a378ec244..e00a67f6c78a4 100644 --- a/docs/apm/troubleshooting.asciidoc +++ b/docs/apm/troubleshooting.asciidoc @@ -49,7 +49,7 @@ GET /_template/apm-{version} *Using Logstash, Kafka, etc.* If you're not outputting data directly from APM Server to Elasticsearch (perhaps you're using Logstash or Kafka), then the index template will not be set up automatically. Instead, you'll need to -{apm-server-ref}/_manually_loading_template_configuration.html[load the template manually]. +{apm-server-ref}/configuration-template.html[load the template manually]. *Using a custom index names* This problem can also occur if you've customized the index name that you write APM data to. From e3a322d65f4f98fd86f296ac3df21db0dea539c1 Mon Sep 17 00:00:00 2001 From: gchaps <33642766+gchaps@users.noreply.github.com> Date: Tue, 8 Sep 2020 23:19:12 -0700 Subject: [PATCH 44/58] [DOCS] Adds timelion deprecation to new visualize docs structure (#76959) --- docs/user/dashboard/dashboard.asciidoc | 124 ++++++++++++++++--------- 1 file changed, 78 insertions(+), 46 deletions(-) diff --git a/docs/user/dashboard/dashboard.asciidoc b/docs/user/dashboard/dashboard.asciidoc index 0c0151cc3ace2..d88a3eb5092df 100644 --- a/docs/user/dashboard/dashboard.asciidoc +++ b/docs/user/dashboard/dashboard.asciidoc @@ -4,9 +4,9 @@ [partintro] -- -A _dashboard_ is a collection of panels that you use to analyze your data. On a dashboard, you can add a variety of panels that -you can rearrange and tell a story about your data. Panels contain everything you need, including visualizations, -interactive controls, markdown, and more. +A _dashboard_ is a collection of panels that you use to analyze your data. On a dashboard, you can add a variety of panels that +you can rearrange and tell a story about your data. Panels contain everything you need, including visualizations, +interactive controls, markdown, and more. With *Dashboard*s, you can: @@ -18,7 +18,7 @@ With *Dashboard*s, you can: * Create and apply filters to focus on the data you want to display. -* Control who can use your data, and share the dashboard with a small or large audience. +* Control who can use your data, and share the dashboard with a small or large audience. * Generate reports based on your findings. @@ -42,7 +42,7 @@ image::images/dashboard-read-only-badge.png[Example of Dashboard read only acces [[types-of-panels]] == Types of panels -Panels contain everything you need to tell a story about you data, including visualizations, +Panels contain everything you need to tell a story about you data, including visualizations, interactive controls, Markdown, and more. [cols="50, 50"] @@ -50,30 +50,30 @@ interactive controls, Markdown, and more. a| *Area* -Displays data points, connected by a line, where the area between the line and axes are shaded. +Displays data points, connected by a line, where the area between the line and axes are shaded. Use area charts to compare two or more categories over time, and display the magnitude of trends. | image:images/area.png[Area chart] a| *Stacked area* -Displays the evolution of the value of several data groups. The values of each group are displayed -on top of each other. Use stacked area charts to visualize part-to-whole relationships, and to show +Displays the evolution of the value of several data groups. The values of each group are displayed +on top of each other. Use stacked area charts to visualize part-to-whole relationships, and to show how each category contributes to the cumulative total. | image:images/stacked_area.png[Stacked area chart] a| *Bar* -Displays bars side-by-side where each bar represents a category. Use bar charts to compare data across a -large number of categories, display data that includes categories with negative values, and easily identify +Displays bars side-by-side where each bar represents a category. Use bar charts to compare data across a +large number of categories, display data that includes categories with negative values, and easily identify the categories that represent the highest and lowest values. Kibana also supports horizontal bar charts. | image:images/bar.png[Bar chart] a| *Stacked bar* -Displays numeric values across two or more categories. Use stacked bar charts to compare numeric values between +Displays numeric values across two or more categories. Use stacked bar charts to compare numeric values between levels of a categorical value. Kibana also supports stacked horizontal bar charts. | image:images/stacked_bar.png[Stacked area chart] @@ -81,15 +81,15 @@ levels of a categorical value. Kibana also supports stacked horizontal bar chart a| *Line* -Displays data points that are connected by a line. Use line charts to visualize a sequence of values, discover +Displays data points that are connected by a line. Use line charts to visualize a sequence of values, discover trends over time, and forecast future values. | image:images/line.png[Line chart] a| *Pie* -Displays slices that represent a data category, where the slice size is proportional to the quantity it represents. -Use pie charts to show comparisons between multiple categories, illustrate the dominance of one category over others, +Displays slices that represent a data category, where the slice size is proportional to the quantity it represents. +Use pie charts to show comparisons between multiple categories, illustrate the dominance of one category over others, and show percentage or proportional data. | image:images/pie.png[Pie chart] @@ -103,7 +103,7 @@ Similar to the pie chart, but the central circle is removed. Use donut charts wh a| *Tree map* -Relates different segments of your data to the whole. Each rectangle is subdivided into smaller rectangles, or sub branches, based on +Relates different segments of your data to the whole. Each rectangle is subdivided into smaller rectangles, or sub branches, based on its proportion to the whole. Use treemaps to make efficient use of space to show percent total for each category. | image:images/treemap.png[Tree map] @@ -111,7 +111,7 @@ its proportion to the whole. Use treemaps to make efficient use of space to show a| *Heat map* -Displays graphical representations of data where the individual values are represented by colors. Use heat maps when your data set includes +Displays graphical representations of data where the individual values are represented by colors. Use heat maps when your data set includes categorical data. For example, use a heat map to see the flights of origin countries compared to destination countries using the sample flight data. | image:images/heat_map.png[Heat map] @@ -125,7 +125,7 @@ Displays how your metric progresses toward a fixed goal. Use the goal to display a| *Gauge* -Displays your data along a scale that changes color according to where your data falls on the expected scale. Use the gauge to show how metric +Displays your data along a scale that changes color according to where your data falls on the expected scale. Use the gauge to show how metric values relate to reference threshold values, or determine how a specified field is performing versus how it is expected to perform. | image:images/gauge.png[Gauge] @@ -133,7 +133,7 @@ values relate to reference threshold values, or determine how a specified field a| *Metric* -Displays a single numeric value for an aggregation. Use the metric visualization when you have a numeric value that is powerful enough to tell +Displays a single numeric value for an aggregation. Use the metric visualization when you have a numeric value that is powerful enough to tell a story about your data. | image:images/metric.png[Metric] @@ -141,7 +141,7 @@ a story about your data. a| *Data table* -Displays your raw data or aggregation results in a tabular format. Use data tables to display server configuration details, track counts, min, +Displays your raw data or aggregation results in a tabular format. Use data tables to display server configuration details, track counts, min, or max values for a specific field, and monitor the status of key services. | image:images/data_table.png[Data table] @@ -149,7 +149,7 @@ or max values for a specific field, and monitor the status of key services. a| *Tag cloud* -Graphical representations of how frequently a word appears in the source text. Use tag clouds to easily produce a summary of large documents and +Graphical representations of how frequently a word appears in the source text. Use tag clouds to easily produce a summary of large documents and create visual art for a specific topic. | image:images/tag_cloud.png[Tag cloud] @@ -168,16 +168,16 @@ For all your mapping needs, use <>. [[create-panels]] == Create panels -To create a panel, make sure you have {ref}/getting-started-index.html[data indexed into {es}] and an <> -to retrieve the data from {es}. If you aren’t ready to use your own data, {kib} comes with several pre-built dashboards that you can test out. For more information, +To create a panel, make sure you have {ref}/getting-started-index.html[data indexed into {es}] and an <> +to retrieve the data from {es}. If you aren’t ready to use your own data, {kib} comes with several pre-built dashboards that you can test out. For more information, refer to <>. -To begin, click *Create new*, then choose one of the following options on the +To begin, click *Create new*, then choose one of the following options on the *New Visualization* window: -* Click on the type of panel you want to create, then configure the options. +* Click on the type of panel you want to create, then configure the options. -* Select an editor to help you create the panel. +* Select an editor to help you create the panel. [role="screenshot"] image:images/Dashboard_add_new_visualization.png[Example add new visualization to dashboard] @@ -188,19 +188,19 @@ image:images/Dashboard_add_new_visualization.png[Example add new visualization t [[lens]] === Create panels with Lens -*Lens* is the simplest and fastest way to create powerful visualizations of your data. To use *Lens*, you drag and drop as many data fields +*Lens* is the simplest and fastest way to create powerful visualizations of your data. To use *Lens*, you drag and drop as many data fields as you want onto the visualization builder pane, and *Lens* uses heuristics to decide how to apply each field to the visualization. With *Lens*, you can: * Use the automatically generated suggestions to change the visualization type. -* Create visualizations with multiple layers and indices. +* Create visualizations with multiple layers and indices. * Change the aggregation and labels to customize the data. [role="screenshot"] image::images/lens_drag_drop.gif[Drag and drop] -TIP: Drag-and-drop capabilities are available only when *Lens* knows how to use the data. If *Lens* is unable to automatically generate a +TIP: Drag-and-drop capabilities are available only when *Lens* knows how to use the data. If *Lens* is unable to automatically generate a visualization, configure the customization options for your visualization. [float] @@ -220,7 +220,7 @@ To filter the data fields: [[view-data-summaries]] ==== View data summaries -To help you decide exactly the data you want to display, get a quick summary of each field. The summary shows the distribution of +To help you decide exactly the data you want to display, get a quick summary of each field. The summary shows the distribution of values within the specified time range. To view the data field summary information, navigate to the field, then click *i*. @@ -250,10 +250,10 @@ When there is an exclamation point (!) next to a visualization type, *Lens* is u [[customize-the-data]] ==== Customize the data -For each visualization type, you can customize the aggregation and labels. The options available depend on the selected visualization type. +For each visualization type, you can customize the aggregation and labels. The options available depend on the selected visualization type. . Click a data field name in the editor, or click *Drop a field here*. -. Change the options that appear. +. Change the options that appear. + [role="screenshot"] image::images/lens_aggregation_labels.png[Quick function options] @@ -262,7 +262,7 @@ image::images/lens_aggregation_labels.png[Quick function options] [[add-layers-and-indices]] ==== Add layers and indices -To compare and analyze data from different sources, you can visualize multiple data layers and indices. Multiple layers and indices are +To compare and analyze data from different sources, you can visualize multiple data layers and indices. Multiple layers and indices are supported in area, line, and bar charts. To add a layer, click *+*, then drag and drop the data fields for the new layer. @@ -281,7 +281,7 @@ Ready to try out *Lens*? Refer to the <>. [[tsvb]] === Create panels with TSVB -*TSVB* is a time series data visualizer that allows you to use the full power of the Elasticsearch aggregation framework. To use *TSVB*, +*TSVB* is a time series data visualizer that allows you to use the full power of the Elasticsearch aggregation framework. To use *TSVB*, you can combine an infinite number of <> to display your data. With *TSVB*, you can: @@ -295,15 +295,15 @@ image::images/tsvb.png[TSVB UI] [float] [[configure-the-data]] -==== Configure the data +==== Configure the data -With *TSVB*, you can add and display multiple data sets to compare and analyze. {kib} uses many types of <> that you can use to build +With *TSVB*, you can add and display multiple data sets to compare and analyze. {kib} uses many types of <> that you can use to build complex summaries of that data. . Select *Data*. If you are using *Table*, select *Columns*. -. From the *Aggregation* drop down, select the aggregation you want to visualize. +. From the *Aggregation* drop down, select the aggregation you want to visualize. + -If you don’t see any data, change the <>. +If you don’t see any data, change the <>. + To add multiple aggregations, click *+*. . From the *Group by* drop down, select how you want to group or split the data. @@ -315,14 +315,14 @@ When you have more than one aggregation, the last value is displayed, which is i [[change-the-data-display]] ==== Change the data display -To find the best way to display your data, *TSVB* supports several types of panels and charts. +To find the best way to display your data, *TSVB* supports several types of panels and charts. To change the *Time Series* chart type: . Click *Data > Options*. . Select the *Chart type*. -To change the panel type, click on the panel options: +To change the panel type, click on the panel options: [role="screenshot"] image::images/tsvb_change_display.gif[TSVB change the panel type] @@ -331,7 +331,7 @@ image::images/tsvb_change_display.gif[TSVB change the panel type] [[custommize-the-data]] ==== Customize the data -View data in a different <>, and change the data label name and colors. The options available depend on the panel type. +View data in a different <>, and change the data label name and colors. The options available depend on the panel type. To change the index pattern, click *Panel options*, then enter the new *Index Pattern*. @@ -361,7 +361,7 @@ image::images/tsvb_annotations.png[TSVB annotations] [[filter-the-panel]] ==== Filter the panel -The data that displays on the panel is based on the <> and <>. +The data that displays on the panel is based on the <> and <>. You can filter the data on the panels using the <>. Click *Panel options*, then enter the syntax in the *Panel Filter* field. @@ -372,7 +372,7 @@ If you want to ignore filters from all of {kib}, select *Yes* for *Ignore global [[vega]] === Create custom panels with Vega -Build custom visualizations using *Vega* and *Vega-Lite*, backed by one or more data sources including {es}, Elastic Map Service, +Build custom visualizations using *Vega* and *Vega-Lite*, backed by one or more data sources including {es}, Elastic Map Service, URL, or static data. Use the {kib} extensions to embed *Vega* in your dashboard, and add interactive tools. Use *Vega* and *Vega-Lite* when you want to create a visualization for: @@ -405,7 +405,7 @@ For more information about *Vega* and *Vega-Lite*, refer to: [[timelion]] === Create panels with Timelion -*Timelion* is a time series data visualizer that enables you to combine independent data sources within a single visualization. +*Timelion* is a time series data visualizer that enables you to combine independent data sources within a single visualization. *Timelion* is driven by a simple expression language that you use to: @@ -422,9 +422,41 @@ Ready to try out Timelion? For step-by-step tutorials, refer to: * <> * <> +[float] +[[timelion-deprecation]] +==== Timelion app deprecation + +Deprecated since 7.0, the Timelion app will be removed in 8.0. If you have any Timelion worksheets, you must migrate them to a dashboard. + +NOTE: Only the Timelion app is deprecated. {kib} continues to support Timelion +visualizations on dashboards and in Visualize and Canvas. + +To migrate a Timelion worksheet to a dashboard: + +. Open the menu, click **Dashboard**, then click **Create dashboard**. + +. On the dashboard, click **Create New**, then select the Timelion visualization. + +. On a new tab, open the Timelion app, select the chart you want to copy, and copy its expression. ++ +[role="screenshot"] +image::images/timelion-copy-expression.png[] + +. Return to the other tab and paste the copied expression to the *Timelion Expression* field and click **Update**. ++ +[role="screenshot"] +image::images/timelion-vis-paste-expression.png[] + +. Save the new visualization, give it a name, and click **Save and Return**. ++ +Your Timelion visualization will appear on the dashboard. Repeat this for all your charts on each worksheet. ++ +[role="screenshot"] +image::images/timelion-dashboard.png[] + [float] [[save-panels]] -=== Save panels +== Save panels When you’ve finished making changes, save the panels. @@ -436,7 +468,7 @@ When you’ve finished making changes, save the panels. [[add-existing-panels]] == Add existing panels -Add panels that you’ve already created to your dashboard. +Add panels that you’ve already created to your dashboard. On the dashboard, click *Add an existing*, then select the panel you want to add. @@ -445,7 +477,7 @@ When a panel contains a stored query, both queries are applied. [role="screenshot"] image:images/Dashboard_add_visualization.png[Example add visualization to dashboard] -To make changes to the panel, put the dashboard in *Edit* mode, then select the edit option from the panel menu. +To make changes to the panel, put the dashboard in *Edit* mode, then select the edit option from the panel menu. The changes you make appear in every dashboard that uses the panel, except if you edit the panel title. Changes to the panel title appear only on the dashboard where you made the change. [float] From 52c12eac321ea62c4eec7e88ede8bde039d4cf9c Mon Sep 17 00:00:00 2001 From: Liza Katz Date: Wed, 9 Sep 2020 10:06:45 +0300 Subject: [PATCH 45/58] [Search] Add a new advanced setting searchTimeout (#75728) * Add new x-pack advanced setting searchTimeout and use it in the EnhancedSearchInterceptor * docs * Rely on server timeout in OSS (?) Use UI setting in xpack. * Rename function * doc * Remove esShard from client * cleanup request parameters from FE * doc * doc * Align request parameters on server, Remove leftover parameters from client Shim responses for search and msearch routes * docs Stop using toSnakeCase Updates jest tests * add management docs * docs * Remove import * Break circular dep + fix msearch test * Remove deleted type * Fix jest * Bring toSnakeCase back * docs * fix jest * Fix merge * Fix types * Allow timeout to be undefined * Fix jest test * Upldate docs * Fix msearch jest * docs * Fix rollup search merge * docs Co-authored-by: Lukas Olson Co-authored-by: Elastic Machine --- ...-data-public.getsearchparamsfromrequest.md | 3 +- ...-public.searchinterceptor._constructor_.md | 5 +- ...n-plugins-data-public.searchinterceptor.md | 5 +- ...public.searchinterceptor.requesttimeout.md | 11 -- ...data-public.searchinterceptor.runsearch.md | 24 --- ...ta-public.searchinterceptor.setuptimers.md | 28 ---- ...-plugin-plugins-data-public.ui_settings.md | 1 + ...gins-data-server.getdefaultsearchparams.md | 20 +-- ...gin-plugins-data-server.getshardtimeout.md | 30 ++++ .../kibana-plugin-plugins-data-server.md | 4 +- ...plugin-plugins-data-server.plugin.start.md | 4 +- ...-plugin-plugins-data-server.tosnakecase.md | 22 +++ ...-plugin-plugins-data-server.ui_settings.md | 1 + docs/management/advanced-options.asciidoc | 1 + .../core_plugins/elasticsearch/index.js | 15 -- src/plugins/data/common/constants.ts | 1 + .../data/common/search/es_search/index.ts | 8 +- .../data/common/search/es_search/types.ts | 3 + src/plugins/data/common/search/index.ts | 9 +- src/plugins/data/public/public.api.md | 15 +- .../search/fetch/get_search_params.test.ts | 44 +----- .../public/search/fetch/get_search_params.ts | 26 +-- src/plugins/data/public/search/fetch/index.ts | 9 +- .../public/search/legacy/call_client.test.ts | 1 - .../public/search/search_interceptor.test.ts | 15 +- .../data/public/search/search_interceptor.ts | 47 ++++-- .../data/public/search/search_service.ts | 23 +-- .../create_search_source.test.ts | 1 - .../data/public/search/search_source/mocks.ts | 1 - .../search_source/search_source.test.ts | 1 - .../search/search_source/search_source.ts | 4 +- src/plugins/data/server/index.ts | 3 + .../es_search/es_search_strategy.test.ts | 18 ++- .../search/es_search/es_search_strategy.ts | 13 +- .../es_search/get_default_search_params.ts | 24 ++- .../data/server/search/es_search/index.ts | 6 +- .../server/search/es_search/to_snake_case.ts | 24 +++ src/plugins/data/server/search/index.ts | 4 +- .../data/server/search/routes/index.ts | 1 + .../data/server/search/routes/msearch.test.ts | 4 +- .../data/server/search/routes/msearch.ts | 36 +++-- .../data/server/search/routes/search.ts | 14 +- .../search/routes}/shim_hits_total.test.ts | 19 ++- .../server/search/routes/shim_hits_total.ts | 33 ++++ src/plugins/data/server/server.api.md | 80 +++++++--- .../public/data_model/search_api.ts | 3 - src/plugins/vis_type_vega/public/plugin.ts | 1 - src/plugins/vis_type_vega/public/services.ts | 1 - .../public/vega_visualization.test.js | 1 - x-pack/plugins/data_enhanced/common/index.ts | 1 - .../data_enhanced/common/search/index.ts | 1 - .../data_enhanced/common/search/types.ts | 8 +- x-pack/plugins/data_enhanced/public/plugin.ts | 25 +-- .../public/search/search_interceptor.test.ts | 28 ++-- .../public/search/search_interceptor.ts | 37 +++-- x-pack/plugins/data_enhanced/server/plugin.ts | 3 + .../server/search/es_search_strategy.test.ts | 17 +- .../server/search/es_search_strategy.ts | 149 +++++++++--------- .../server/search/shim_hits_total.ts | 18 --- .../data_enhanced/server/ui_settings.ts | 28 ++++ 60 files changed, 539 insertions(+), 443 deletions(-) delete mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.requesttimeout.md delete mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.runsearch.md delete mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.setuptimers.md create mode 100644 docs/development/plugins/data/server/kibana-plugin-plugins-data-server.getshardtimeout.md create mode 100644 docs/development/plugins/data/server/kibana-plugin-plugins-data-server.tosnakecase.md create mode 100644 src/plugins/data/server/search/es_search/to_snake_case.ts rename {x-pack/plugins/data_enhanced/server/search => src/plugins/data/server/search/routes}/shim_hits_total.test.ts (54%) create mode 100644 src/plugins/data/server/search/routes/shim_hits_total.ts delete mode 100644 x-pack/plugins/data_enhanced/server/search/shim_hits_total.ts create mode 100644 x-pack/plugins/data_enhanced/server/ui_settings.ts diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.getsearchparamsfromrequest.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.getsearchparamsfromrequest.md index 337b4b3302cc3..d32e9a955f890 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.getsearchparamsfromrequest.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.getsearchparamsfromrequest.md @@ -9,7 +9,6 @@ ```typescript export declare function getSearchParamsFromRequest(searchRequest: SearchRequest, dependencies: { - esShardTimeout: number; getConfig: GetConfigFn; }): ISearchRequestParams; ``` @@ -19,7 +18,7 @@ export declare function getSearchParamsFromRequest(searchRequest: SearchRequest, | Parameter | Type | Description | | --- | --- | --- | | searchRequest | SearchRequest | | -| dependencies | {
esShardTimeout: number;
getConfig: GetConfigFn;
} | | +| dependencies | {
getConfig: GetConfigFn;
} | | Returns: diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor._constructor_.md index 6f5dd1076fb40..4c67639300883 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor._constructor_.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor._constructor_.md @@ -4,12 +4,12 @@ ## SearchInterceptor.(constructor) -This class should be instantiated with a `requestTimeout` corresponding with how many ms after requests are initiated that they should automatically cancel. +Constructs a new instance of the `SearchInterceptor` class Signature: ```typescript -constructor(deps: SearchInterceptorDeps, requestTimeout?: number | undefined); +constructor(deps: SearchInterceptorDeps); ``` ## Parameters @@ -17,5 +17,4 @@ constructor(deps: SearchInterceptorDeps, requestTimeout?: number | undefined); | Parameter | Type | Description | | --- | --- | --- | | deps | SearchInterceptorDeps | | -| requestTimeout | number | undefined | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.md index 32954927504ae..fd9f23a7f0052 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.md @@ -14,21 +14,18 @@ export declare class SearchInterceptor | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(deps, requestTimeout)](./kibana-plugin-plugins-data-public.searchinterceptor._constructor_.md) | | This class should be instantiated with a requestTimeout corresponding with how many ms after requests are initiated that they should automatically cancel. | +| [(constructor)(deps)](./kibana-plugin-plugins-data-public.searchinterceptor._constructor_.md) | | Constructs a new instance of the SearchInterceptor class | ## Properties | Property | Modifiers | Type | Description | | --- | --- | --- | --- | | [deps](./kibana-plugin-plugins-data-public.searchinterceptor.deps.md) | | SearchInterceptorDeps | | -| [requestTimeout](./kibana-plugin-plugins-data-public.searchinterceptor.requesttimeout.md) | | number | undefined | | ## Methods | Method | Modifiers | Description | | --- | --- | --- | | [getPendingCount$()](./kibana-plugin-plugins-data-public.searchinterceptor.getpendingcount_.md) | | Returns an Observable over the current number of pending searches. This could mean that one of the search requests is still in flight, or that it has only received partial responses. | -| [runSearch(request, signal, strategy)](./kibana-plugin-plugins-data-public.searchinterceptor.runsearch.md) | | | | [search(request, options)](./kibana-plugin-plugins-data-public.searchinterceptor.search.md) | | Searches using the given search method. Overrides the AbortSignal with one that will abort either when cancelPending is called, when the request times out, or when the original AbortSignal is aborted. Updates pendingCount$ when the request is started/finalized. | -| [setupTimers(options)](./kibana-plugin-plugins-data-public.searchinterceptor.setuptimers.md) | | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.requesttimeout.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.requesttimeout.md deleted file mode 100644 index 3123433762991..0000000000000 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.requesttimeout.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [SearchInterceptor](./kibana-plugin-plugins-data-public.searchinterceptor.md) > [requestTimeout](./kibana-plugin-plugins-data-public.searchinterceptor.requesttimeout.md) - -## SearchInterceptor.requestTimeout property - -Signature: - -```typescript -protected readonly requestTimeout?: number | undefined; -``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.runsearch.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.runsearch.md deleted file mode 100644 index ad1d1dcb59d7b..0000000000000 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.runsearch.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [SearchInterceptor](./kibana-plugin-plugins-data-public.searchinterceptor.md) > [runSearch](./kibana-plugin-plugins-data-public.searchinterceptor.runsearch.md) - -## SearchInterceptor.runSearch() method - -Signature: - -```typescript -protected runSearch(request: IEsSearchRequest, signal: AbortSignal, strategy?: string): Observable; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| request | IEsSearchRequest | | -| signal | AbortSignal | | -| strategy | string | | - -Returns: - -`Observable` - diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.setuptimers.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.setuptimers.md deleted file mode 100644 index fe35655258b4c..0000000000000 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchinterceptor.setuptimers.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [SearchInterceptor](./kibana-plugin-plugins-data-public.searchinterceptor.md) > [setupTimers](./kibana-plugin-plugins-data-public.searchinterceptor.setuptimers.md) - -## SearchInterceptor.setupTimers() method - -Signature: - -```typescript -protected setupTimers(options?: ISearchOptions): { - combinedSignal: AbortSignal; - cleanup: () => void; - }; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| options | ISearchOptions | | - -Returns: - -`{ - combinedSignal: AbortSignal; - cleanup: () => void; - }` - diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ui_settings.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ui_settings.md index e515c3513df6c..6ed20beb396f1 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ui_settings.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ui_settings.md @@ -20,6 +20,7 @@ UI_SETTINGS: { readonly COURIER_MAX_CONCURRENT_SHARD_REQUESTS: "courier:maxConcurrentShardRequests"; readonly COURIER_BATCH_SEARCHES: "courier:batchSearches"; readonly SEARCH_INCLUDE_FROZEN: "search:includeFrozen"; + readonly SEARCH_TIMEOUT: "search:timeout"; readonly HISTOGRAM_BAR_TARGET: "histogram:barTarget"; readonly HISTOGRAM_MAX_BARS: "histogram:maxBars"; readonly HISTORY_LIMIT: "history:limit"; diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.getdefaultsearchparams.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.getdefaultsearchparams.md index 9de005c1fd0dd..e718ca42ca30f 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.getdefaultsearchparams.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.getdefaultsearchparams.md @@ -7,24 +7,26 @@ Signature: ```typescript -export declare function getDefaultSearchParams(config: SharedGlobalConfig): { - timeout: string; +export declare function getDefaultSearchParams(uiSettingsClient: IUiSettingsClient): Promise<{ + maxConcurrentShardRequests: number | undefined; + ignoreThrottled: boolean; ignoreUnavailable: boolean; - restTotalHitsAsInt: boolean; -}; + trackTotalHits: boolean; +}>; ``` ## Parameters | Parameter | Type | Description | | --- | --- | --- | -| config | SharedGlobalConfig | | +| uiSettingsClient | IUiSettingsClient | | Returns: -`{ - timeout: string; +`Promise<{ + maxConcurrentShardRequests: number | undefined; + ignoreThrottled: boolean; ignoreUnavailable: boolean; - restTotalHitsAsInt: boolean; -}` + trackTotalHits: boolean; +}>` diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.getshardtimeout.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.getshardtimeout.md new file mode 100644 index 0000000000000..d7e2a597ff33d --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.getshardtimeout.md @@ -0,0 +1,30 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [getShardTimeout](./kibana-plugin-plugins-data-server.getshardtimeout.md) + +## getShardTimeout() function + +Signature: + +```typescript +export declare function getShardTimeout(config: SharedGlobalConfig): { + timeout: string; +} | { + timeout?: undefined; +}; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| config | SharedGlobalConfig | | + +Returns: + +`{ + timeout: string; +} | { + timeout?: undefined; +}` + diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md index 70c32adeab9fd..f5b587d86b349 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md @@ -26,11 +26,13 @@ | Function | Description | | --- | --- | -| [getDefaultSearchParams(config)](./kibana-plugin-plugins-data-server.getdefaultsearchparams.md) | | +| [getDefaultSearchParams(uiSettingsClient)](./kibana-plugin-plugins-data-server.getdefaultsearchparams.md) | | +| [getShardTimeout(config)](./kibana-plugin-plugins-data-server.getshardtimeout.md) | | | [getTime(indexPattern, timeRange, options)](./kibana-plugin-plugins-data-server.gettime.md) | | | [parseInterval(interval)](./kibana-plugin-plugins-data-server.parseinterval.md) | | | [plugin(initializerContext)](./kibana-plugin-plugins-data-server.plugin.md) | Static code to be shared externally | | [shouldReadFieldFromDocValues(aggregatable, esType)](./kibana-plugin-plugins-data-server.shouldreadfieldfromdocvalues.md) | | +| [toSnakeCase(obj)](./kibana-plugin-plugins-data-server.tosnakecase.md) | | | [usageProvider(core)](./kibana-plugin-plugins-data-server.usageprovider.md) | | ## Interfaces diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md index 2d9104ef894bc..455c5ecdd8195 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md @@ -8,7 +8,7 @@ ```typescript start(core: CoreStart): { - search: ISearchStart>; + search: ISearchStart>; fieldFormats: { fieldFormatServiceFactory: (uiSettings: import("../../../core/server").IUiSettingsClient) => Promise; }; @@ -27,7 +27,7 @@ start(core: CoreStart): { Returns: `{ - search: ISearchStart>; + search: ISearchStart>; fieldFormats: { fieldFormatServiceFactory: (uiSettings: import("../../../core/server").IUiSettingsClient) => Promise; }; diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.tosnakecase.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.tosnakecase.md new file mode 100644 index 0000000000000..eda9e9c312e59 --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.tosnakecase.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [toSnakeCase](./kibana-plugin-plugins-data-server.tosnakecase.md) + +## toSnakeCase() function + +Signature: + +```typescript +export declare function toSnakeCase(obj: Record): import("lodash").Dictionary; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| obj | Record<string, any> | | + +Returns: + +`import("lodash").Dictionary` + diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.ui_settings.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.ui_settings.md index e419b64cd43aa..2d4ce75b956df 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.ui_settings.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.ui_settings.md @@ -20,6 +20,7 @@ UI_SETTINGS: { readonly COURIER_MAX_CONCURRENT_SHARD_REQUESTS: "courier:maxConcurrentShardRequests"; readonly COURIER_BATCH_SEARCHES: "courier:batchSearches"; readonly SEARCH_INCLUDE_FROZEN: "search:includeFrozen"; + readonly SEARCH_TIMEOUT: "search:timeout"; readonly HISTOGRAM_BAR_TARGET: "histogram:barTarget"; readonly HISTOGRAM_MAX_BARS: "histogram:maxBars"; readonly HISTORY_LIMIT: "history:limit"; diff --git a/docs/management/advanced-options.asciidoc b/docs/management/advanced-options.asciidoc index a64a0330ae43f..ed20166c87f29 100644 --- a/docs/management/advanced-options.asciidoc +++ b/docs/management/advanced-options.asciidoc @@ -225,6 +225,7 @@ be inconsistent because different shards might be in different refresh states. `search:includeFrozen`:: Includes {ref}/frozen-indices.html[frozen indices] in results. Searching through frozen indices might increase the search time. This setting is off by default. Users must opt-in to include frozen indices. +`search:timeout`:: Change the maximum timeout for a search session or set to 0 to disable the timeout and allow queries to run to completion. [float] [[kibana-siem-settings]] diff --git a/src/legacy/core_plugins/elasticsearch/index.js b/src/legacy/core_plugins/elasticsearch/index.js index 599886788604b..f90f490d68035 100644 --- a/src/legacy/core_plugins/elasticsearch/index.js +++ b/src/legacy/core_plugins/elasticsearch/index.js @@ -16,18 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -import { first } from 'rxjs/operators'; import { Cluster } from './server/lib/cluster'; import { createProxy } from './server/lib/create_proxy'; export default function (kibana) { - let defaultVars; - return new kibana.Plugin({ require: [], - uiExports: { injectDefaultVars: () => defaultVars }, - async init(server) { // All methods that ES plugin exposes are synchronous so we should get the first // value from all observables here to be able to synchronously return and create @@ -36,16 +31,6 @@ export default function (kibana) { const adminCluster = new Cluster(client); const dataCluster = new Cluster(client); - const esConfig = await server.newPlatform.__internals.elasticsearch.legacy.config$ - .pipe(first()) - .toPromise(); - - defaultVars = { - esRequestTimeout: esConfig.requestTimeout.asMilliseconds(), - esShardTimeout: esConfig.shardTimeout.asMilliseconds(), - esApiVersion: esConfig.apiVersion, - }; - const clusters = new Map(); server.expose('getCluster', (name) => { if (name === 'admin') { diff --git a/src/plugins/data/common/constants.ts b/src/plugins/data/common/constants.ts index 22db1552e4303..43120583bd3a4 100644 --- a/src/plugins/data/common/constants.ts +++ b/src/plugins/data/common/constants.ts @@ -32,6 +32,7 @@ export const UI_SETTINGS = { COURIER_MAX_CONCURRENT_SHARD_REQUESTS: 'courier:maxConcurrentShardRequests', COURIER_BATCH_SEARCHES: 'courier:batchSearches', SEARCH_INCLUDE_FROZEN: 'search:includeFrozen', + SEARCH_TIMEOUT: 'search:timeout', HISTOGRAM_BAR_TARGET: 'histogram:barTarget', HISTOGRAM_MAX_BARS: 'histogram:maxBars', HISTORY_LIMIT: 'history:limit', diff --git a/src/plugins/data/common/search/es_search/index.ts b/src/plugins/data/common/search/es_search/index.ts index 54757b53b8665..d8f7b5091eb8f 100644 --- a/src/plugins/data/common/search/es_search/index.ts +++ b/src/plugins/data/common/search/es_search/index.ts @@ -17,10 +17,4 @@ * under the License. */ -export { - ISearchRequestParams, - IEsSearchRequest, - IEsSearchResponse, - ES_SEARCH_STRATEGY, - ISearchOptions, -} from './types'; +export * from './types'; diff --git a/src/plugins/data/common/search/es_search/types.ts b/src/plugins/data/common/search/es_search/types.ts index 89faa5b7119c8..81124c1e095f7 100644 --- a/src/plugins/data/common/search/es_search/types.ts +++ b/src/plugins/data/common/search/es_search/types.ts @@ -53,3 +53,6 @@ export interface IEsSearchResponse extends IKibanaSearchResponse { isPartial?: boolean; rawResponse: SearchResponse; } + +export const isEsResponse = (response: any): response is IEsSearchResponse => + response && response.rawResponse; diff --git a/src/plugins/data/common/search/index.ts b/src/plugins/data/common/search/index.ts index 3bfb0ddb89aa9..061974d860246 100644 --- a/src/plugins/data/common/search/index.ts +++ b/src/plugins/data/common/search/index.ts @@ -22,11 +22,4 @@ export * from './es_search'; export * from './expressions'; export * from './tabify'; export * from './types'; - -export { - IEsSearchRequest, - IEsSearchResponse, - ES_SEARCH_STRATEGY, - ISearchRequestParams, - ISearchOptions, -} from './es_search'; +export * from './es_search'; diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index e76f3c669fae1..27d4ea49f9eb1 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -693,7 +693,6 @@ export const getKbnTypeNames: () => string[]; // // @public (undocumented) export function getSearchParamsFromRequest(searchRequest: SearchRequest, dependencies: { - esShardTimeout: number; getConfig: GetConfigFn; }): ISearchRequestParams; @@ -1726,7 +1725,7 @@ export interface SearchError { // // @public (undocumented) export class SearchInterceptor { - constructor(deps: SearchInterceptorDeps, requestTimeout?: number | undefined); + constructor(deps: SearchInterceptorDeps); // @internal protected abortController: AbortController; // @internal (undocumented) @@ -1740,13 +1739,14 @@ export class SearchInterceptor { protected longRunningToast?: Toast; // @internal protected pendingCount$: BehaviorSubject; - // (undocumented) - protected readonly requestTimeout?: number | undefined; - // (undocumented) + // @internal (undocumented) protected runSearch(request: IEsSearchRequest, signal: AbortSignal, strategy?: string): Observable; search(request: IEsSearchRequest, options?: ISearchOptions): Observable; - // (undocumented) - protected setupTimers(options?: ISearchOptions): { + // @internal (undocumented) + protected setupAbortSignal({ abortSignal, timeout, }: { + abortSignal?: AbortSignal; + timeout?: number; + }): { combinedSignal: AbortSignal; cleanup: () => void; }; @@ -1917,6 +1917,7 @@ export const UI_SETTINGS: { readonly COURIER_MAX_CONCURRENT_SHARD_REQUESTS: "courier:maxConcurrentShardRequests"; readonly COURIER_BATCH_SEARCHES: "courier:batchSearches"; readonly SEARCH_INCLUDE_FROZEN: "search:includeFrozen"; + readonly SEARCH_TIMEOUT: "search:timeout"; readonly HISTOGRAM_BAR_TARGET: "histogram:barTarget"; readonly HISTOGRAM_MAX_BARS: "histogram:maxBars"; readonly HISTORY_LIMIT: "history:limit"; diff --git a/src/plugins/data/public/search/fetch/get_search_params.test.ts b/src/plugins/data/public/search/fetch/get_search_params.test.ts index 1ecb879b1602d..5e83e1f57bb6d 100644 --- a/src/plugins/data/public/search/fetch/get_search_params.test.ts +++ b/src/plugins/data/public/search/fetch/get_search_params.test.ts @@ -25,44 +25,12 @@ function getConfigStub(config: any = {}): GetConfigFn { } describe('getSearchParams', () => { - test('includes rest_total_hits_as_int', () => { - const config = getConfigStub(); + test('includes custom preference', () => { + const config = getConfigStub({ + [UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE]: 'custom', + [UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE]: 'aaa', + }); const searchParams = getSearchParams(config); - expect(searchParams.rest_total_hits_as_int).toBe(true); - }); - - test('includes ignore_unavailable', () => { - const config = getConfigStub(); - const searchParams = getSearchParams(config); - expect(searchParams.ignore_unavailable).toBe(true); - }); - - test('includes ignore_throttled according to search:includeFrozen', () => { - let config = getConfigStub({ [UI_SETTINGS.SEARCH_INCLUDE_FROZEN]: true }); - let searchParams = getSearchParams(config); - expect(searchParams.ignore_throttled).toBe(false); - - config = getConfigStub({ [UI_SETTINGS.SEARCH_INCLUDE_FROZEN]: false }); - searchParams = getSearchParams(config); - expect(searchParams.ignore_throttled).toBe(true); - }); - - test('includes max_concurrent_shard_requests according to courier:maxConcurrentShardRequests', () => { - let config = getConfigStub({ [UI_SETTINGS.COURIER_MAX_CONCURRENT_SHARD_REQUESTS]: 0 }); - let searchParams = getSearchParams(config); - expect(searchParams.max_concurrent_shard_requests).toBe(undefined); - - config = getConfigStub({ [UI_SETTINGS.COURIER_MAX_CONCURRENT_SHARD_REQUESTS]: 5 }); - searchParams = getSearchParams(config); - expect(searchParams.max_concurrent_shard_requests).toBe(5); - }); - - test('includes timeout according to esShardTimeout if greater than 0', () => { - const config = getConfigStub(); - let searchParams = getSearchParams(config, 0); - expect(searchParams.timeout).toBe(undefined); - - searchParams = getSearchParams(config, 100); - expect(searchParams.timeout).toBe('100ms'); + expect(searchParams.preference).toBe('aaa'); }); }); diff --git a/src/plugins/data/public/search/fetch/get_search_params.ts b/src/plugins/data/public/search/fetch/get_search_params.ts index 5e0395189f647..ed87c4813951c 100644 --- a/src/plugins/data/public/search/fetch/get_search_params.ts +++ b/src/plugins/data/public/search/fetch/get_search_params.ts @@ -22,26 +22,12 @@ import { SearchRequest } from './types'; const sessionId = Date.now(); -export function getSearchParams(getConfig: GetConfigFn, esShardTimeout: number = 0) { +export function getSearchParams(getConfig: GetConfigFn) { return { - rest_total_hits_as_int: true, - ignore_unavailable: true, - ignore_throttled: getIgnoreThrottled(getConfig), - max_concurrent_shard_requests: getMaxConcurrentShardRequests(getConfig), preference: getPreference(getConfig), - timeout: getTimeout(esShardTimeout), }; } -export function getIgnoreThrottled(getConfig: GetConfigFn) { - return !getConfig(UI_SETTINGS.SEARCH_INCLUDE_FROZEN); -} - -export function getMaxConcurrentShardRequests(getConfig: GetConfigFn) { - const maxConcurrentShardRequests = getConfig(UI_SETTINGS.COURIER_MAX_CONCURRENT_SHARD_REQUESTS); - return maxConcurrentShardRequests > 0 ? maxConcurrentShardRequests : undefined; -} - export function getPreference(getConfig: GetConfigFn) { const setRequestPreference = getConfig(UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE); if (setRequestPreference === 'sessionId') return sessionId; @@ -50,19 +36,15 @@ export function getPreference(getConfig: GetConfigFn) { : undefined; } -export function getTimeout(esShardTimeout: number) { - return esShardTimeout > 0 ? `${esShardTimeout}ms` : undefined; -} - /** @public */ // TODO: Could provide this on runtime contract with dependencies // already wired up. export function getSearchParamsFromRequest( searchRequest: SearchRequest, - dependencies: { esShardTimeout: number; getConfig: GetConfigFn } + dependencies: { getConfig: GetConfigFn } ): ISearchRequestParams { - const { esShardTimeout, getConfig } = dependencies; - const searchParams = getSearchParams(getConfig, esShardTimeout); + const { getConfig } = dependencies; + const searchParams = getSearchParams(getConfig); return { index: searchRequest.index.title || searchRequest.index, diff --git a/src/plugins/data/public/search/fetch/index.ts b/src/plugins/data/public/search/fetch/index.ts index 79cdad1897f9c..4b8511edfc26f 100644 --- a/src/plugins/data/public/search/fetch/index.ts +++ b/src/plugins/data/public/search/fetch/index.ts @@ -18,14 +18,7 @@ */ export * from './types'; -export { - getSearchParams, - getSearchParamsFromRequest, - getPreference, - getTimeout, - getIgnoreThrottled, - getMaxConcurrentShardRequests, -} from './get_search_params'; +export { getSearchParams, getSearchParamsFromRequest, getPreference } from './get_search_params'; export { RequestFailure } from './request_error'; export { handleResponse } from './handle_response'; diff --git a/src/plugins/data/public/search/legacy/call_client.test.ts b/src/plugins/data/public/search/legacy/call_client.test.ts index 38f3ab200da90..943a02d22088d 100644 --- a/src/plugins/data/public/search/legacy/call_client.test.ts +++ b/src/plugins/data/public/search/legacy/call_client.test.ts @@ -60,7 +60,6 @@ describe('callClient', () => { http: coreMock.createStart().http, legacySearchService: {}, config: { get: jest.fn() }, - esShardTimeout: 0, loadingCount$: new BehaviorSubject(0), } as FetchHandlers; diff --git a/src/plugins/data/public/search/search_interceptor.test.ts b/src/plugins/data/public/search/search_interceptor.test.ts index da60f39b522ac..84db69a83a005 100644 --- a/src/plugins/data/public/search/search_interceptor.test.ts +++ b/src/plugins/data/public/search/search_interceptor.test.ts @@ -32,15 +32,12 @@ jest.useFakeTimers(); describe('SearchInterceptor', () => { beforeEach(() => { mockCoreSetup = coreMock.createSetup(); - searchInterceptor = new SearchInterceptor( - { - toasts: mockCoreSetup.notifications.toasts, - startServices: mockCoreSetup.getStartServices(), - uiSettings: mockCoreSetup.uiSettings, - http: mockCoreSetup.http, - }, - 1000 - ); + searchInterceptor = new SearchInterceptor({ + toasts: mockCoreSetup.notifications.toasts, + startServices: mockCoreSetup.getStartServices(), + uiSettings: mockCoreSetup.uiSettings, + http: mockCoreSetup.http, + }); }); describe('search', () => { diff --git a/src/plugins/data/public/search/search_interceptor.ts b/src/plugins/data/public/search/search_interceptor.ts index c6c03267163c9..0a6d60afed2f7 100644 --- a/src/plugins/data/public/search/search_interceptor.ts +++ b/src/plugins/data/public/search/search_interceptor.ts @@ -18,7 +18,16 @@ */ import { trimEnd } from 'lodash'; -import { BehaviorSubject, throwError, timer, Subscription, defer, from, Observable } from 'rxjs'; +import { + BehaviorSubject, + throwError, + timer, + Subscription, + defer, + from, + Observable, + NEVER, +} from 'rxjs'; import { finalize, filter } from 'rxjs/operators'; import { Toast, CoreStart, ToastsSetup, CoreSetup } from 'kibana/public'; import { getCombinedSignal, AbortError } from '../../common/utils'; @@ -71,17 +80,10 @@ export class SearchInterceptor { */ protected application!: CoreStart['application']; - /** - * This class should be instantiated with a `requestTimeout` corresponding with how many ms after - * requests are initiated that they should automatically cancel. - * @param toasts The `core.notifications.toasts` service - * @param application The `core.application` service - * @param requestTimeout Usually config value `elasticsearch.requestTimeout` + /* + * @internal */ - constructor( - protected readonly deps: SearchInterceptorDeps, - protected readonly requestTimeout?: number - ) { + constructor(protected readonly deps: SearchInterceptorDeps) { this.deps.http.addLoadingCountSource(this.pendingCount$); this.deps.startServices.then(([coreStart]) => { @@ -94,7 +96,6 @@ export class SearchInterceptor { .pipe(filter((count) => count === 0)) .subscribe(this.hideToast); } - /** * Returns an `Observable` over the current number of pending searches. This could mean that one * of the search requests is still in flight, or that it has only received partial responses. @@ -103,6 +104,9 @@ export class SearchInterceptor { return this.pendingCount$.asObservable(); } + /** + * @internal + */ protected runSearch( request: IEsSearchRequest, signal: AbortSignal, @@ -136,7 +140,9 @@ export class SearchInterceptor { return throwError(new AbortError()); } - const { combinedSignal, cleanup } = this.setupTimers(options); + const { combinedSignal, cleanup } = this.setupAbortSignal({ + abortSignal: options?.abortSignal, + }); this.pendingCount$.next(this.pendingCount$.getValue() + 1); return this.runSearch(request, combinedSignal, options?.strategy).pipe( @@ -148,11 +154,20 @@ export class SearchInterceptor { }); } - protected setupTimers(options?: ISearchOptions) { + /** + * @internal + */ + protected setupAbortSignal({ + abortSignal, + timeout, + }: { + abortSignal?: AbortSignal; + timeout?: number; + }) { // Schedule this request to automatically timeout after some interval const timeoutController = new AbortController(); const { signal: timeoutSignal } = timeoutController; - const timeout$ = timer(this.requestTimeout); + const timeout$ = timeout ? timer(timeout) : NEVER; const subscription = timeout$.subscribe(() => { timeoutController.abort(); }); @@ -168,7 +183,7 @@ export class SearchInterceptor { const signals = [ this.abortController.signal, timeoutSignal, - ...(options?.abortSignal ? [options.abortSignal] : []), + ...(abortSignal ? [abortSignal] : []), ]; const combinedSignal = getCombinedSignal(signals); diff --git a/src/plugins/data/public/search/search_service.ts b/src/plugins/data/public/search/search_service.ts index a49d2ef0956ff..f8f4acbe43dfd 100644 --- a/src/plugins/data/public/search/search_service.ts +++ b/src/plugins/data/public/search/search_service.ts @@ -52,26 +52,19 @@ export class SearchService implements Plugin { { http, getStartServices, injectedMetadata, notifications, uiSettings }: CoreSetup, { expressions, usageCollection }: SearchServiceSetupDependencies ): ISearchSetup { - const esRequestTimeout = injectedMetadata.getInjectedVar('esRequestTimeout') as number; - this.usageCollector = createUsageCollector(getStartServices, usageCollection); /** * A global object that intercepts all searches and provides convenience methods for cancelling * all pending search requests, as well as getting the number of pending search requests. - * TODO: Make this modular so that apps can opt in/out of search collection, or even provide - * their own search collector instances */ - this.searchInterceptor = new SearchInterceptor( - { - toasts: notifications.toasts, - http, - uiSettings, - startServices: getStartServices(), - usageCollector: this.usageCollector!, - }, - esRequestTimeout - ); + this.searchInterceptor = new SearchInterceptor({ + toasts: notifications.toasts, + http, + uiSettings, + startServices: getStartServices(), + usageCollector: this.usageCollector!, + }); expressions.registerFunction(esdsl); expressions.registerType(esRawResponse); @@ -101,8 +94,6 @@ export class SearchService implements Plugin { const searchSourceDependencies: SearchSourceDependencies = { getConfig: uiSettings.get.bind(uiSettings), - // TODO: we don't need this, apply on the server - esShardTimeout: injectedMetadata.getInjectedVar('esShardTimeout') as number, search, http, loadingCount$, diff --git a/src/plugins/data/public/search/search_source/create_search_source.test.ts b/src/plugins/data/public/search/search_source/create_search_source.test.ts index 2820aab67ea3a..bc1c7c06c8806 100644 --- a/src/plugins/data/public/search/search_source/create_search_source.test.ts +++ b/src/plugins/data/public/search/search_source/create_search_source.test.ts @@ -35,7 +35,6 @@ describe('createSearchSource', () => { dependencies = { getConfig: jest.fn(), search: jest.fn(), - esShardTimeout: 30000, http: coreMock.createStart().http, loadingCount$: new BehaviorSubject(0), }; diff --git a/src/plugins/data/public/search/search_source/mocks.ts b/src/plugins/data/public/search/search_source/mocks.ts index bc3e287d9fe80..adf53bee33fe1 100644 --- a/src/plugins/data/public/search/search_source/mocks.ts +++ b/src/plugins/data/public/search/search_source/mocks.ts @@ -53,7 +53,6 @@ export const searchSourceMock = { export const createSearchSourceMock = (fields?: SearchSourceFields) => new SearchSource(fields, { getConfig: uiSettingsServiceMock.createStartContract().get, - esShardTimeout: 30000, search: jest.fn(), http: httpServiceMock.createStartContract(), loadingCount$: new BehaviorSubject(0), diff --git a/src/plugins/data/public/search/search_source/search_source.test.ts b/src/plugins/data/public/search/search_source/search_source.test.ts index a8baed9faa84d..282a33e6d01f7 100644 --- a/src/plugins/data/public/search/search_source/search_source.test.ts +++ b/src/plugins/data/public/search/search_source/search_source.test.ts @@ -68,7 +68,6 @@ describe('SearchSource', () => { searchSourceDependencies = { getConfig: jest.fn(), search: mockSearchMethod, - esShardTimeout: 30000, http: coreMock.createStart().http, loadingCount$: new BehaviorSubject(0), }; diff --git a/src/plugins/data/public/search/search_source/search_source.ts b/src/plugins/data/public/search/search_source/search_source.ts index eec2d9b50eafe..68c7b663b3628 100644 --- a/src/plugins/data/public/search/search_source/search_source.ts +++ b/src/plugins/data/public/search/search_source/search_source.ts @@ -118,7 +118,6 @@ export interface SearchSourceDependencies { getConfig: GetConfigFn; search: ISearchGeneric; http: HttpStart; - esShardTimeout: number; loadingCount$: BehaviorSubject; } @@ -233,10 +232,9 @@ export class SearchSource { * @return {Observable>} */ private fetch$(searchRequest: SearchRequest, options: ISearchOptions) { - const { search, esShardTimeout, getConfig } = this.dependencies; + const { search, getConfig } = this.dependencies; const params = getSearchParamsFromRequest(searchRequest, { - esShardTimeout, getConfig, }); diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts index 71ed83290e697..03baff4910309 100644 --- a/src/plugins/data/server/index.ts +++ b/src/plugins/data/server/index.ts @@ -212,8 +212,11 @@ export { ISearchStrategy, ISearchSetup, ISearchStart, + toSnakeCase, getDefaultSearchParams, + getShardTimeout, getTotalLoaded, + shimHitsTotal, usageProvider, SearchUsage, } from './search'; diff --git a/src/plugins/data/server/search/es_search/es_search_strategy.test.ts b/src/plugins/data/server/search/es_search/es_search_strategy.test.ts index c34c3a310814c..504ce728481f0 100644 --- a/src/plugins/data/server/search/es_search/es_search_strategy.test.ts +++ b/src/plugins/data/server/search/es_search/es_search_strategy.test.ts @@ -36,7 +36,14 @@ describe('ES search strategy', () => { }, }); const mockContext = { - core: { elasticsearch: { client: { asCurrentUser: { search: mockApiCaller } } } }, + core: { + uiSettings: { + client: { + get: () => {}, + }, + }, + elasticsearch: { client: { asCurrentUser: { search: mockApiCaller } } }, + }, }; const mockConfig$ = pluginInitializerContextConfigMock({}).legacy.globalConfig$; @@ -59,14 +66,13 @@ describe('ES search strategy', () => { expect(mockApiCaller).toBeCalled(); expect(mockApiCaller.mock.calls[0][0]).toEqual({ ...params, - timeout: '0ms', - ignoreUnavailable: true, - restTotalHitsAsInt: true, + ignore_unavailable: true, + track_total_hits: true, }); }); it('calls the API caller with overridden defaults', async () => { - const params = { index: 'logstash-*', ignoreUnavailable: false, timeout: '1000ms' }; + const params = { index: 'logstash-*', ignore_unavailable: false, timeout: '1000ms' }; const esSearch = await esSearchStrategyProvider(mockConfig$, mockLogger); await esSearch.search((mockContext as unknown) as RequestHandlerContext, { params }); @@ -74,7 +80,7 @@ describe('ES search strategy', () => { expect(mockApiCaller).toBeCalled(); expect(mockApiCaller.mock.calls[0][0]).toEqual({ ...params, - restTotalHitsAsInt: true, + track_total_hits: true, }); }); diff --git a/src/plugins/data/server/search/es_search/es_search_strategy.ts b/src/plugins/data/server/search/es_search/es_search_strategy.ts index eabbf3e3e2600..106f974ed3457 100644 --- a/src/plugins/data/server/search/es_search/es_search_strategy.ts +++ b/src/plugins/data/server/search/es_search/es_search_strategy.ts @@ -22,7 +22,8 @@ import { SearchResponse } from 'elasticsearch'; import { Observable } from 'rxjs'; import { ApiResponse } from '@elastic/elasticsearch'; import { SearchUsage } from '../collectors/usage'; -import { ISearchStrategy, getDefaultSearchParams, getTotalLoaded } from '..'; +import { toSnakeCase } from './to_snake_case'; +import { ISearchStrategy, getDefaultSearchParams, getTotalLoaded, getShardTimeout } from '..'; export const esSearchStrategyProvider = ( config$: Observable, @@ -33,7 +34,7 @@ export const esSearchStrategyProvider = ( search: async (context, request, options) => { logger.debug(`search ${request.params?.index}`); const config = await config$.pipe(first()).toPromise(); - const defaultParams = getDefaultSearchParams(config); + const uiSettingsClient = await context.core.uiSettings.client; // Only default index pattern type is supported here. // See data_enhanced for other type support. @@ -41,10 +42,14 @@ export const esSearchStrategyProvider = ( throw new Error(`Unsupported index pattern type ${request.indexType}`); } - const params = { + // ignoreThrottled is not supported in OSS + const { ignoreThrottled, ...defaultParams } = await getDefaultSearchParams(uiSettingsClient); + + const params = toSnakeCase({ ...defaultParams, + ...getShardTimeout(config), ...request.params, - }; + }); try { const esResponse = (await context.core.elasticsearch.client.asCurrentUser.search( diff --git a/src/plugins/data/server/search/es_search/get_default_search_params.ts b/src/plugins/data/server/search/es_search/get_default_search_params.ts index b2341ccc0f3c8..13607fce51670 100644 --- a/src/plugins/data/server/search/es_search/get_default_search_params.ts +++ b/src/plugins/data/server/search/es_search/get_default_search_params.ts @@ -17,12 +17,28 @@ * under the License. */ -import { SharedGlobalConfig } from '../../../../../core/server'; +import { SharedGlobalConfig, IUiSettingsClient } from '../../../../../core/server'; +import { UI_SETTINGS } from '../../../common/constants'; -export function getDefaultSearchParams(config: SharedGlobalConfig) { +export function getShardTimeout(config: SharedGlobalConfig) { + const timeout = config.elasticsearch.shardTimeout.asMilliseconds(); + return timeout + ? { + timeout: `${timeout}ms`, + } + : {}; +} + +export async function getDefaultSearchParams(uiSettingsClient: IUiSettingsClient) { + const ignoreThrottled = !(await uiSettingsClient.get(UI_SETTINGS.SEARCH_INCLUDE_FROZEN)); + const maxConcurrentShardRequests = await uiSettingsClient.get( + UI_SETTINGS.COURIER_MAX_CONCURRENT_SHARD_REQUESTS + ); return { - timeout: `${config.elasticsearch.shardTimeout.asMilliseconds()}ms`, + maxConcurrentShardRequests: + maxConcurrentShardRequests > 0 ? maxConcurrentShardRequests : undefined, + ignoreThrottled, ignoreUnavailable: true, // Don't fail if the index/indices don't exist - restTotalHitsAsInt: true, // Get the number of hits as an int rather than a range + trackTotalHits: true, }; } diff --git a/src/plugins/data/server/search/es_search/index.ts b/src/plugins/data/server/search/es_search/index.ts index 20006b70730d8..1bd17fc986168 100644 --- a/src/plugins/data/server/search/es_search/index.ts +++ b/src/plugins/data/server/search/es_search/index.ts @@ -17,7 +17,9 @@ * under the License. */ -export { ES_SEARCH_STRATEGY, IEsSearchRequest, IEsSearchResponse } from '../../../common/search'; export { esSearchStrategyProvider } from './es_search_strategy'; -export { getDefaultSearchParams } from './get_default_search_params'; +export * from './get_default_search_params'; export { getTotalLoaded } from './get_total_loaded'; +export * from './to_snake_case'; + +export { ES_SEARCH_STRATEGY, IEsSearchRequest, IEsSearchResponse } from '../../../common'; diff --git a/src/plugins/data/server/search/es_search/to_snake_case.ts b/src/plugins/data/server/search/es_search/to_snake_case.ts new file mode 100644 index 0000000000000..74f156274cbc6 --- /dev/null +++ b/src/plugins/data/server/search/es_search/to_snake_case.ts @@ -0,0 +1,24 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { mapKeys, snakeCase } from 'lodash'; + +export function toSnakeCase(obj: Record) { + return mapKeys(obj, (value, key) => snakeCase(key)); +} diff --git a/src/plugins/data/server/search/index.ts b/src/plugins/data/server/search/index.ts index 8a74c51f52f51..b671ed806510b 100644 --- a/src/plugins/data/server/search/index.ts +++ b/src/plugins/data/server/search/index.ts @@ -19,8 +19,10 @@ export { ISearchStrategy, ISearchSetup, ISearchStart, SearchEnhancements } from './types'; -export { getDefaultSearchParams, getTotalLoaded } from './es_search'; +export * from './es_search'; export { usageProvider, SearchUsage } from './collectors'; export * from './aggs'; + +export { shimHitsTotal } from './routes'; diff --git a/src/plugins/data/server/search/routes/index.ts b/src/plugins/data/server/search/routes/index.ts index 2217890ff778e..a290f08f9b843 100644 --- a/src/plugins/data/server/search/routes/index.ts +++ b/src/plugins/data/server/search/routes/index.ts @@ -19,3 +19,4 @@ export * from './msearch'; export * from './search'; +export * from './shim_hits_total'; diff --git a/src/plugins/data/server/search/routes/msearch.test.ts b/src/plugins/data/server/search/routes/msearch.test.ts index 0a52cf23c5472..3a7d67c31b8be 100644 --- a/src/plugins/data/server/search/routes/msearch.test.ts +++ b/src/plugins/data/server/search/routes/msearch.test.ts @@ -48,7 +48,7 @@ describe('msearch route', () => { }); it('handler calls /_msearch with the given request', async () => { - const response = { id: 'yay' }; + const response = { id: 'yay', body: { responses: [{ hits: { total: 5 } }] } }; const mockClient = { transport: { request: jest.fn().mockResolvedValue(response) } }; const mockContext = { core: { @@ -73,7 +73,7 @@ describe('msearch route', () => { expect(mockClient.transport.request.mock.calls[0][0].method).toBe('GET'); expect(mockClient.transport.request.mock.calls[0][0].path).toBe('/_msearch'); expect(mockClient.transport.request.mock.calls[0][0].body).toEqual( - convertRequestBody(mockBody as any, { timeout: '0ms' }) + convertRequestBody(mockBody as any, {}) ); expect(mockResponse.ok).toBeCalled(); expect(mockResponse.ok.mock.calls[0][0]).toEqual({ diff --git a/src/plugins/data/server/search/routes/msearch.ts b/src/plugins/data/server/search/routes/msearch.ts index efb40edd90d58..e1ddb06e4fb6f 100644 --- a/src/plugins/data/server/search/routes/msearch.ts +++ b/src/plugins/data/server/search/routes/msearch.ts @@ -20,10 +20,11 @@ import { first } from 'rxjs/operators'; import { schema } from '@kbn/config-schema'; +import { SearchResponse } from 'elasticsearch'; import { IRouter } from 'src/core/server'; -import { UI_SETTINGS } from '../../../common'; import { SearchRouteDependencies } from '../search_service'; -import { getDefaultSearchParams } from '..'; +import { shimHitsTotal } from './shim_hits_total'; +import { getShardTimeout, getDefaultSearchParams, toSnakeCase } from '..'; interface MsearchHeaders { index: string; @@ -96,30 +97,31 @@ export function registerMsearchRoute(router: IRouter, deps: SearchRouteDependenc // get shardTimeout const config = await deps.globalConfig$.pipe(first()).toPromise(); - const { timeout } = getDefaultSearchParams(config); + const timeout = getShardTimeout(config); - const body = convertRequestBody(request.body, { timeout }); + const body = convertRequestBody(request.body, timeout); + + // trackTotalHits is not supported by msearch + const { trackTotalHits, ...defaultParams } = await getDefaultSearchParams( + context.core.uiSettings.client + ); try { - const ignoreThrottled = !(await context.core.uiSettings.client.get( - UI_SETTINGS.SEARCH_INCLUDE_FROZEN - )); - const maxConcurrentShardRequests = await context.core.uiSettings.client.get( - UI_SETTINGS.COURIER_MAX_CONCURRENT_SHARD_REQUESTS - ); const response = await client.transport.request({ method: 'GET', path: '/_msearch', body, - querystring: { - rest_total_hits_as_int: true, - ignore_throttled: ignoreThrottled, - max_concurrent_shard_requests: - maxConcurrentShardRequests > 0 ? maxConcurrentShardRequests : undefined, - }, + querystring: toSnakeCase(defaultParams), }); - return res.ok({ body: response }); + return res.ok({ + body: { + ...response, + body: { + responses: response.body.responses?.map((r: SearchResponse) => shimHitsTotal(r)), + }, + }, + }); } catch (err) { return res.customError({ statusCode: err.statusCode || 500, diff --git a/src/plugins/data/server/search/routes/search.ts b/src/plugins/data/server/search/routes/search.ts index 4340285583489..b5d5ec283767d 100644 --- a/src/plugins/data/server/search/routes/search.ts +++ b/src/plugins/data/server/search/routes/search.ts @@ -21,6 +21,8 @@ import { schema } from '@kbn/config-schema'; import { IRouter } from 'src/core/server'; import { getRequestAbortedSignal } from '../../lib'; import { SearchRouteDependencies } from '../search_service'; +import { shimHitsTotal } from './shim_hits_total'; +import { isEsResponse } from '../../../common'; export function registerSearchRoute( router: IRouter, @@ -56,7 +58,17 @@ export function registerSearchRoute( strategy, } ); - return res.ok({ body: response }); + + return res.ok({ + body: { + ...response, + ...(isEsResponse(response) + ? { + rawResponse: shimHitsTotal(response.rawResponse), + } + : {}), + }, + }); } catch (err) { return res.customError({ statusCode: err.statusCode || 500, diff --git a/x-pack/plugins/data_enhanced/server/search/shim_hits_total.test.ts b/src/plugins/data/server/search/routes/shim_hits_total.test.ts similarity index 54% rename from x-pack/plugins/data_enhanced/server/search/shim_hits_total.test.ts rename to src/plugins/data/server/search/routes/shim_hits_total.test.ts index 61740b97299da..0f24735386121 100644 --- a/x-pack/plugins/data_enhanced/server/search/shim_hits_total.test.ts +++ b/src/plugins/data/server/search/routes/shim_hits_total.test.ts @@ -1,7 +1,20 @@ /* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. */ import { shimHitsTotal } from './shim_hits_total'; diff --git a/src/plugins/data/server/search/routes/shim_hits_total.ts b/src/plugins/data/server/search/routes/shim_hits_total.ts new file mode 100644 index 0000000000000..5f95b21358978 --- /dev/null +++ b/src/plugins/data/server/search/routes/shim_hits_total.ts @@ -0,0 +1,33 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { SearchResponse } from 'elasticsearch'; + +/** + * Temporary workaround until https://github.com/elastic/kibana/issues/26356 is addressed. + * Since we are setting `track_total_hits` in the request, `hits.total` will be an object + * containing the `value`. + * + * @internal + */ +export function shimHitsTotal(response: SearchResponse) { + const total = (response.hits?.total as any)?.value ?? response.hits?.total; + const hits = { ...response.hits, total }; + return { ...response, hits }; +} diff --git a/src/plugins/data/server/server.api.md b/src/plugins/data/server/server.api.md index a4f5f590e1774..cd0369a5c4551 100644 --- a/src/plugins/data/server/server.api.md +++ b/src/plugins/data/server/server.api.md @@ -446,14 +446,25 @@ export interface Filter { query?: any; } -// Warning: (ae-forgotten-export) The symbol "SharedGlobalConfig" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "IUiSettingsClient" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "getDefaultSearchParams" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export function getDefaultSearchParams(config: SharedGlobalConfig): { - timeout: string; +export function getDefaultSearchParams(uiSettingsClient: IUiSettingsClient): Promise<{ + maxConcurrentShardRequests: number | undefined; + ignoreThrottled: boolean; ignoreUnavailable: boolean; - restTotalHitsAsInt: boolean; + trackTotalHits: boolean; +}>; + +// Warning: (ae-forgotten-export) The symbol "SharedGlobalConfig" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "getShardTimeout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function getShardTimeout(config: SharedGlobalConfig): { + timeout: string; +} | { + timeout?: undefined; }; // Warning: (ae-missing-release-tag) "getTime" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -873,7 +884,7 @@ export class Plugin implements Plugin_2>; + search: ISearchStart>; fieldFormats: { fieldFormatServiceFactory: (uiSettings: import("../../../core/server").IUiSettingsClient) => Promise; }; @@ -989,6 +1000,33 @@ export interface SearchUsage { trackSuccess(duration: number): Promise; } +// @internal +export function shimHitsTotal(response: SearchResponse): { + hits: { + total: any; + max_score: number; + hits: { + _index: string; + _type: string; + _id: string; + _score: number; + _source: any; + _version?: number | undefined; + _explanation?: import("elasticsearch").Explanation | undefined; + fields?: any; + highlight?: any; + inner_hits?: any; + matched_queries?: string[] | undefined; + sort?: string[] | undefined; + }[]; + }; + took: number; + timed_out: boolean; + _scroll_id?: string | undefined; + _shards: import("elasticsearch").ShardsResponse; + aggregations?: any; +}; + // Warning: (ae-missing-release-tag) "shouldReadFieldFromDocValues" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -1027,6 +1065,11 @@ export interface TimeRange { to: string; } +// Warning: (ae-missing-release-tag) "toSnakeCase" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function toSnakeCase(obj: Record): import("lodash").Dictionary; + // Warning: (ae-missing-release-tag) "UI_SETTINGS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -1043,6 +1086,7 @@ export const UI_SETTINGS: { readonly COURIER_MAX_CONCURRENT_SHARD_REQUESTS: "courier:maxConcurrentShardRequests"; readonly COURIER_BATCH_SEARCHES: "courier:batchSearches"; readonly SEARCH_INCLUDE_FROZEN: "search:includeFrozen"; + readonly SEARCH_TIMEOUT: "search:timeout"; readonly HISTOGRAM_BAR_TARGET: "histogram:barTarget"; readonly HISTOGRAM_MAX_BARS: "histogram:maxBars"; readonly HISTORY_LIMIT: "history:limit"; @@ -1091,19 +1135,19 @@ export function usageProvider(core: CoreSetup_2): SearchUsage; // src/plugins/data/server/index.ts:101:26 - (ae-forgotten-export) The symbol "TruncateFormat" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index.ts:127:27 - (ae-forgotten-export) The symbol "isFilterable" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index.ts:127:27 - (ae-forgotten-export) The symbol "isNestedField" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:224:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:225:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:234:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:235:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:236:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:240:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:241:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:245:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts -// src/plugins/data/server/index.ts:248:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:225:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:225:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:225:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:225:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:227:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:228:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:237:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:238:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:239:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:243:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:244:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:248:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/index.ts:251:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts // src/plugins/data/server/plugin.ts:88:66 - (ae-forgotten-export) The symbol "DataEnhancements" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/src/plugins/vis_type_vega/public/data_model/search_api.ts b/src/plugins/vis_type_vega/public/data_model/search_api.ts index 8a1541ecae0d4..4ea25af549249 100644 --- a/src/plugins/vis_type_vega/public/data_model/search_api.ts +++ b/src/plugins/vis_type_vega/public/data_model/search_api.ts @@ -51,9 +51,6 @@ export class SearchAPI { searchRequests.map((request) => { const requestId = request.name; const params = getSearchParamsFromRequest(request, { - esShardTimeout: this.dependencies.injectedMetadata.getInjectedVar( - 'esShardTimeout' - ) as number, getConfig: this.dependencies.uiSettings.get.bind(this.dependencies.uiSettings), }); diff --git a/src/plugins/vis_type_vega/public/plugin.ts b/src/plugins/vis_type_vega/public/plugin.ts index 00c6b2e3c8d5b..4b8ff8e2cb43a 100644 --- a/src/plugins/vis_type_vega/public/plugin.ts +++ b/src/plugins/vis_type_vega/public/plugin.ts @@ -78,7 +78,6 @@ export class VegaPlugin implements Plugin, void> { ) { setInjectedVars({ enableExternalUrls: this.initializerContext.config.get().enableExternalUrls, - esShardTimeout: core.injectedMetadata.getInjectedVar('esShardTimeout') as number, emsTileLayerId: core.injectedMetadata.getInjectedVar('emsTileLayerId', true), }); setUISettings(core.uiSettings); diff --git a/src/plugins/vis_type_vega/public/services.ts b/src/plugins/vis_type_vega/public/services.ts index acd02a6dd42f8..dfb2c96e9f894 100644 --- a/src/plugins/vis_type_vega/public/services.ts +++ b/src/plugins/vis_type_vega/public/services.ts @@ -48,7 +48,6 @@ export const [getSavedObjects, setSavedObjects] = createGetterSetter('InjectedVars'); diff --git a/src/plugins/vis_type_vega/public/vega_visualization.test.js b/src/plugins/vis_type_vega/public/vega_visualization.test.js index 0912edf9503a6..1bf625af76207 100644 --- a/src/plugins/vis_type_vega/public/vega_visualization.test.js +++ b/src/plugins/vis_type_vega/public/vega_visualization.test.js @@ -82,7 +82,6 @@ describe('VegaVisualizations', () => { setInjectedVars({ emsTileLayerId: {}, enableExternalUrls: true, - esShardTimeout: 10000, }); setData(dataPluginStart); setSavedObjects(coreStart.savedObjects); diff --git a/x-pack/plugins/data_enhanced/common/index.ts b/x-pack/plugins/data_enhanced/common/index.ts index d6a3c73aaf363..012f1204da46a 100644 --- a/x-pack/plugins/data_enhanced/common/index.ts +++ b/x-pack/plugins/data_enhanced/common/index.ts @@ -5,7 +5,6 @@ */ export { - EnhancedSearchParams, IEnhancedEsSearchRequest, IAsyncSearchRequest, ENHANCED_ES_SEARCH_STRATEGY, diff --git a/x-pack/plugins/data_enhanced/common/search/index.ts b/x-pack/plugins/data_enhanced/common/search/index.ts index 2ae422bd6b7d7..696938a403e89 100644 --- a/x-pack/plugins/data_enhanced/common/search/index.ts +++ b/x-pack/plugins/data_enhanced/common/search/index.ts @@ -5,7 +5,6 @@ */ export { - EnhancedSearchParams, IEnhancedEsSearchRequest, IAsyncSearchRequest, ENHANCED_ES_SEARCH_STRATEGY, diff --git a/x-pack/plugins/data_enhanced/common/search/types.ts b/x-pack/plugins/data_enhanced/common/search/types.ts index 0d3d3a69e1e57..24d459ade4bf9 100644 --- a/x-pack/plugins/data_enhanced/common/search/types.ts +++ b/x-pack/plugins/data_enhanced/common/search/types.ts @@ -4,21 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ -import { IEsSearchRequest, ISearchRequestParams } from '../../../../../src/plugins/data/common'; +import { IEsSearchRequest } from '../../../../../src/plugins/data/common'; export const ENHANCED_ES_SEARCH_STRATEGY = 'ese'; -export interface EnhancedSearchParams extends ISearchRequestParams { - ignoreThrottled: boolean; -} - export interface IAsyncSearchRequest extends IEsSearchRequest { /** * The ID received from the response from the initial request */ id?: string; - - params?: EnhancedSearchParams; } export interface IEnhancedEsSearchRequest extends IEsSearchRequest { diff --git a/x-pack/plugins/data_enhanced/public/plugin.ts b/x-pack/plugins/data_enhanced/public/plugin.ts index 7f6e3feac0671..ccc93316482c2 100644 --- a/x-pack/plugins/data_enhanced/public/plugin.ts +++ b/x-pack/plugins/data_enhanced/public/plugin.ts @@ -23,6 +23,8 @@ export type DataEnhancedStart = ReturnType; export class DataEnhancedPlugin implements Plugin { + private enhancedSearchInterceptor!: EnhancedSearchInterceptor; + public setup( core: CoreSetup, { data }: DataEnhancedSetupDependencies @@ -32,20 +34,17 @@ export class DataEnhancedPlugin setupKqlQuerySuggestionProvider(core) ); - const enhancedSearchInterceptor = new EnhancedSearchInterceptor( - { - toasts: core.notifications.toasts, - http: core.http, - uiSettings: core.uiSettings, - startServices: core.getStartServices(), - usageCollector: data.search.usageCollector, - }, - core.injectedMetadata.getInjectedVar('esRequestTimeout') as number - ); + this.enhancedSearchInterceptor = new EnhancedSearchInterceptor({ + toasts: core.notifications.toasts, + http: core.http, + uiSettings: core.uiSettings, + startServices: core.getStartServices(), + usageCollector: data.search.usageCollector, + }); data.__enhance({ search: { - searchInterceptor: enhancedSearchInterceptor, + searchInterceptor: this.enhancedSearchInterceptor, }, }); } @@ -53,4 +52,8 @@ export class DataEnhancedPlugin public start(core: CoreStart, plugins: DataEnhancedStartDependencies) { setAutocompleteService(plugins.data.autocomplete); } + + public stop() { + this.enhancedSearchInterceptor.stop(); + } } diff --git a/x-pack/plugins/data_enhanced/public/search/search_interceptor.test.ts b/x-pack/plugins/data_enhanced/public/search/search_interceptor.test.ts index 1e2c7987b7041..261e03887acdb 100644 --- a/x-pack/plugins/data_enhanced/public/search/search_interceptor.test.ts +++ b/x-pack/plugins/data_enhanced/public/search/search_interceptor.test.ts @@ -7,7 +7,7 @@ import { coreMock } from '../../../../../src/core/public/mocks'; import { EnhancedSearchInterceptor } from './search_interceptor'; import { CoreSetup, CoreStart } from 'kibana/public'; -import { AbortError } from '../../../../../src/plugins/data/common'; +import { AbortError, UI_SETTINGS } from '../../../../../src/plugins/data/common'; const timeTravel = (msToRun = 0) => { jest.advanceTimersByTime(msToRun); @@ -43,6 +43,15 @@ describe('EnhancedSearchInterceptor', () => { mockCoreSetup = coreMock.createSetup(); mockCoreStart = coreMock.createStart(); + mockCoreSetup.uiSettings.get.mockImplementation((name: string) => { + switch (name) { + case UI_SETTINGS.SEARCH_TIMEOUT: + return 1000; + default: + return; + } + }); + next.mockClear(); error.mockClear(); complete.mockClear(); @@ -64,16 +73,13 @@ describe('EnhancedSearchInterceptor', () => { ]); }); - searchInterceptor = new EnhancedSearchInterceptor( - { - toasts: mockCoreSetup.notifications.toasts, - startServices: mockPromise as any, - http: mockCoreSetup.http, - uiSettings: mockCoreSetup.uiSettings, - usageCollector: mockUsageCollector, - }, - 1000 - ); + searchInterceptor = new EnhancedSearchInterceptor({ + toasts: mockCoreSetup.notifications.toasts, + startServices: mockPromise as any, + http: mockCoreSetup.http, + uiSettings: mockCoreSetup.uiSettings, + usageCollector: mockUsageCollector, + }); }); describe('search', () => { diff --git a/x-pack/plugins/data_enhanced/public/search/search_interceptor.ts b/x-pack/plugins/data_enhanced/public/search/search_interceptor.ts index 6f7899d1188b4..61cf579d3136b 100644 --- a/x-pack/plugins/data_enhanced/public/search/search_interceptor.ts +++ b/x-pack/plugins/data_enhanced/public/search/search_interceptor.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { throwError, EMPTY, timer, from } from 'rxjs'; +import { throwError, EMPTY, timer, from, Subscription } from 'rxjs'; import { mergeMap, expand, takeUntil, finalize, tap } from 'rxjs/operators'; import { getLongQueryNotification } from './long_query_notification'; import { @@ -17,14 +17,25 @@ import { IAsyncSearchOptions } from '.'; import { IAsyncSearchRequest, ENHANCED_ES_SEARCH_STRATEGY } from '../../common'; export class EnhancedSearchInterceptor extends SearchInterceptor { + private uiSettingsSub: Subscription; + private searchTimeout: number; + /** - * This class should be instantiated with a `requestTimeout` corresponding with how many ms after - * requests are initiated that they should automatically cancel. - * @param deps `SearchInterceptorDeps` - * @param requestTimeout Usually config value `elasticsearch.requestTimeout` + * @internal */ - constructor(deps: SearchInterceptorDeps, requestTimeout?: number) { - super(deps, requestTimeout); + constructor(deps: SearchInterceptorDeps) { + super(deps); + this.searchTimeout = deps.uiSettings.get(UI_SETTINGS.SEARCH_TIMEOUT); + + this.uiSettingsSub = deps.uiSettings + .get$(UI_SETTINGS.SEARCH_TIMEOUT) + .subscribe((timeout: number) => { + this.searchTimeout = timeout; + }); + } + + public stop() { + this.uiSettingsSub.unsubscribe(); } /** @@ -69,12 +80,10 @@ export class EnhancedSearchInterceptor extends SearchInterceptor { ) { let { id } = request; - request.params = { - ignoreThrottled: !this.deps.uiSettings.get(UI_SETTINGS.SEARCH_INCLUDE_FROZEN), - ...request.params, - }; - - const { combinedSignal, cleanup } = this.setupTimers(options); + const { combinedSignal, cleanup } = this.setupAbortSignal({ + abortSignal: options.abortSignal, + timeout: this.searchTimeout, + }); const aborted$ = from(toPromise(combinedSignal)); const strategy = options?.strategy || ENHANCED_ES_SEARCH_STRATEGY; @@ -108,7 +117,7 @@ export class EnhancedSearchInterceptor extends SearchInterceptor { // we don't need to send a follow-up request to delete this search. Otherwise, we // send the follow-up request to delete this search, then throw an abort error. if (id !== undefined) { - this.deps.http.delete(`/internal/search/es/${id}`); + this.deps.http.delete(`/internal/search/${strategy}/${id}`); } }, }), diff --git a/x-pack/plugins/data_enhanced/server/plugin.ts b/x-pack/plugins/data_enhanced/server/plugin.ts index f9b6fd4e9ad64..3b05e83d208b7 100644 --- a/x-pack/plugins/data_enhanced/server/plugin.ts +++ b/x-pack/plugins/data_enhanced/server/plugin.ts @@ -19,6 +19,7 @@ import { import { enhancedEsSearchStrategyProvider } from './search'; import { UsageCollectionSetup } from '../../../../src/plugins/usage_collection/server'; import { ENHANCED_ES_SEARCH_STRATEGY } from '../common'; +import { getUiSettings } from './ui_settings'; interface SetupDependencies { data: DataPluginSetup; @@ -35,6 +36,8 @@ export class EnhancedDataServerPlugin implements Plugin, deps: SetupDependencies) { const usage = deps.usageCollection ? usageProvider(core) : undefined; + core.uiSettings.register(getUiSettings()); + deps.data.search.registerSearchStrategy( ENHANCED_ES_SEARCH_STRATEGY, enhancedEsSearchStrategyProvider( diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts index a287f72ca9161..f4f3d894a4576 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.test.ts @@ -5,8 +5,8 @@ */ import { RequestHandlerContext } from '../../../../../src/core/server'; -import { pluginInitializerContextConfigMock } from '../../../../../src/core/server/mocks'; import { enhancedEsSearchStrategyProvider } from './es_search_strategy'; +import { BehaviorSubject } from 'rxjs'; const mockAsyncResponse = { body: { @@ -42,6 +42,11 @@ describe('ES search strategy', () => { }; const mockContext = { core: { + uiSettings: { + client: { + get: jest.fn(), + }, + }, elasticsearch: { client: { asCurrentUser: { @@ -55,7 +60,15 @@ describe('ES search strategy', () => { }, }, }; - const mockConfig$ = pluginInitializerContextConfigMock({}).legacy.globalConfig$; + const mockConfig$ = new BehaviorSubject({ + elasticsearch: { + shardTimeout: { + asMilliseconds: () => { + return 100; + }, + }, + }, + }); beforeEach(() => { mockApiCaller.mockClear(); diff --git a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts index 4ace1c4c5385b..eda6178dc8e5b 100644 --- a/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts +++ b/x-pack/plugins/data_enhanced/server/search/es_search_strategy.ts @@ -5,23 +5,19 @@ */ import { first } from 'rxjs/operators'; -import { mapKeys, snakeCase } from 'lodash'; -import { Observable } from 'rxjs'; import { SearchResponse } from 'elasticsearch'; +import { Observable } from 'rxjs'; +import { SharedGlobalConfig, RequestHandlerContext, Logger } from '../../../../../src/core/server'; import { - SharedGlobalConfig, - RequestHandlerContext, - ElasticsearchClient, - Logger, -} from '../../../../../src/core/server'; -import { - getDefaultSearchParams, getTotalLoaded, ISearchStrategy, SearchUsage, + getDefaultSearchParams, + getShardTimeout, + toSnakeCase, + shimHitsTotal, } from '../../../../../src/plugins/data/server'; import { IEnhancedEsSearchRequest } from '../../common'; -import { shimHitsTotal } from './shim_hits_total'; import { ISearchOptions, IEsSearchResponse } from '../../../../../src/plugins/data/common/search'; function isEnhancedEsSearchResponse(response: any): response is IEsSearchResponse { @@ -39,17 +35,13 @@ export const enhancedEsSearchStrategyProvider = ( options?: ISearchOptions ) => { logger.debug(`search ${JSON.stringify(request.params) || request.id}`); - const config = await config$.pipe(first()).toPromise(); - const client = context.core.elasticsearch.client.asCurrentUser; - const defaultParams = getDefaultSearchParams(config); - const params = { ...defaultParams, ...request.params }; const isAsync = request.indexType !== 'rollup'; try { const response = isAsync - ? await asyncSearch(client, { ...request, params }, options) - : await rollupSearch(client, { ...request, params }, options); + ? await asyncSearch(context, request) + : await rollupSearch(context, request); if ( usage && @@ -75,72 +67,75 @@ export const enhancedEsSearchStrategyProvider = ( }); }; - return { search, cancel }; -}; - -async function asyncSearch( - client: ElasticsearchClient, - request: IEnhancedEsSearchRequest, - options?: ISearchOptions -): Promise { - let esResponse; + async function asyncSearch( + context: RequestHandlerContext, + request: IEnhancedEsSearchRequest + ): Promise { + let esResponse; + const esClient = context.core.elasticsearch.client.asCurrentUser; + const uiSettingsClient = await context.core.uiSettings.client; + + const asyncOptions = { + waitForCompletionTimeout: '100ms', // Wait up to 100ms for the response to return + keepAlive: '1m', // Extend the TTL for this search request by one minute + }; + + // If we have an ID, then just poll for that ID, otherwise send the entire request body + if (!request.id) { + const submitOptions = toSnakeCase({ + batchedReduceSize: 64, // Only report partial results every 64 shards; this should be reduced when we actually display partial results + ...(await getDefaultSearchParams(uiSettingsClient)), + ...asyncOptions, + ...request.params, + }); + + esResponse = await esClient.asyncSearch.submit(submitOptions); + } else { + esResponse = await esClient.asyncSearch.get({ + id: request.id, + ...toSnakeCase(asyncOptions), + }); + } - const asyncOptions = { - waitForCompletionTimeout: '100ms', // Wait up to 100ms for the response to return - keepAlive: '1m', // Extend the TTL for this search request by one minute - }; + const { id, response, is_partial: isPartial, is_running: isRunning } = esResponse.body; + return { + id, + isPartial, + isRunning, + rawResponse: shimHitsTotal(response), + ...getTotalLoaded(response._shards), + }; + } - // If we have an ID, then just poll for that ID, otherwise send the entire request body - if (!request.id) { - const submitOptions = toSnakeCase({ - batchedReduceSize: 64, // Only report partial results every 64 shards; this should be reduced when we actually display partial results - trackTotalHits: true, // Get the exact count of hits - ...asyncOptions, - ...request.params, + const rollupSearch = async function ( + context: RequestHandlerContext, + request: IEnhancedEsSearchRequest + ): Promise { + const esClient = context.core.elasticsearch.client.asCurrentUser; + const uiSettingsClient = await context.core.uiSettings.client; + const config = await config$.pipe(first()).toPromise(); + const { body, index, ...params } = request.params!; + const method = 'POST'; + const path = encodeURI(`/${index}/_rollup_search`); + const querystring = toSnakeCase({ + ...getShardTimeout(config), + ...(await getDefaultSearchParams(uiSettingsClient)), + ...params, }); - esResponse = await client.asyncSearch.submit(submitOptions); - } else { - esResponse = await client.asyncSearch.get({ - id: request.id, - ...toSnakeCase(asyncOptions), + const esResponse = await esClient.transport.request({ + method, + path, + body, + querystring, }); - } - - const { id, response, is_partial: isPartial, is_running: isRunning } = esResponse.body; - return { - id, - isPartial, - isRunning, - rawResponse: shimHitsTotal(response), - ...getTotalLoaded(response._shards), - }; -} -async function rollupSearch( - client: ElasticsearchClient, - request: IEnhancedEsSearchRequest, - options?: ISearchOptions -): Promise { - const { body, index, ...params } = request.params!; - const method = 'POST'; - const path = encodeURI(`/${index}/_rollup_search`); - const querystring = toSnakeCase(params); - - const esResponse = await client.transport.request({ - method, - path, - body, - querystring, - }); - - const response = esResponse.body as SearchResponse; - return { - rawResponse: shimHitsTotal(response), - ...getTotalLoaded(response._shards), + const response = esResponse.body as SearchResponse; + return { + rawResponse: response, + ...getTotalLoaded(response._shards), + }; }; -} -function toSnakeCase(obj: Record) { - return mapKeys(obj, (value, key) => snakeCase(key)); -} + return { search, cancel }; +}; diff --git a/x-pack/plugins/data_enhanced/server/search/shim_hits_total.ts b/x-pack/plugins/data_enhanced/server/search/shim_hits_total.ts deleted file mode 100644 index 10d45be01563a..0000000000000 --- a/x-pack/plugins/data_enhanced/server/search/shim_hits_total.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { SearchResponse } from 'elasticsearch'; - -/** - * Temporary workaround until https://github.com/elastic/kibana/issues/26356 is addressed. - * Since we are setting `track_total_hits` in the request, `hits.total` will be an object - * containing the `value`. - */ -export function shimHitsTotal(response: SearchResponse) { - const total = (response.hits?.total as any)?.value ?? response.hits?.total; - const hits = { ...response.hits, total }; - return { ...response, hits }; -} diff --git a/x-pack/plugins/data_enhanced/server/ui_settings.ts b/x-pack/plugins/data_enhanced/server/ui_settings.ts new file mode 100644 index 0000000000000..f2842da8b8337 --- /dev/null +++ b/x-pack/plugins/data_enhanced/server/ui_settings.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; +import { schema } from '@kbn/config-schema'; +import { UiSettingsParams } from 'kibana/server'; +import { UI_SETTINGS } from '../../../../src/plugins/data/server'; + +export function getUiSettings(): Record> { + return { + [UI_SETTINGS.SEARCH_TIMEOUT]: { + name: i18n.translate('xpack.data.advancedSettings.searchTimeout', { + defaultMessage: 'Search Timeout', + }), + value: 600000, + description: i18n.translate('xpack.data.advancedSettings.searchTimeoutDesc', { + defaultMessage: + 'Change the maximum timeout for a search session or set to 0 to disable the timeout and allow queries to run to completion.', + }), + type: 'number', + category: ['search'], + schema: schema.number(), + }, + }; +} From 23e1b74de06838366ee8489fc9b04ad9b98cb725 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 9 Sep 2020 09:12:55 +0200 Subject: [PATCH 46/58] [RUM Dashboard] Visitor breakdown usability (#76834) --- .../app/RumDashboard/ChartWrapper/index.tsx | 11 +- .../Charts/VisitorBreakdownChart.tsx | 100 ++++++++---------- .../app/RumDashboard/ClientMetrics/index.tsx | 6 +- .../app/RumDashboard/RumDashboard.tsx | 17 +-- .../RumDashboard/VisitorBreakdown/index.tsx | 27 +++-- .../app/RumDashboard/translations.ts | 9 ++ 6 files changed, 87 insertions(+), 83 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/ChartWrapper/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/ChartWrapper/index.tsx index 970365779a0a2..f27a3d56aab55 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/ChartWrapper/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/ChartWrapper/index.tsx @@ -26,11 +26,14 @@ interface Props { * aria-label for accessibility */ 'aria-label'?: string; + + maxWidth?: string; } export function ChartWrapper({ loading = false, height = '100%', + maxWidth, children, ...rest }: Props) { @@ -43,6 +46,7 @@ export function ChartWrapper({ height, opacity, transition: 'opacity 0.2s', + ...(maxWidth ? { maxWidth } : {}), }} {...(rest as HTMLAttributes)} > @@ -52,7 +56,12 @@ export function ChartWrapper({ diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/Charts/VisitorBreakdownChart.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/Charts/VisitorBreakdownChart.tsx index 9f9ffdf7168b8..213126ba4bf81 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/Charts/VisitorBreakdownChart.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/Charts/VisitorBreakdownChart.tsx @@ -14,7 +14,7 @@ import { PartitionLayout, Settings, } from '@elastic/charts'; -import euiLightVars from '@elastic/eui/dist/eui_theme_light.json'; +import styled from 'styled-components'; import { EUI_CHARTS_THEME_DARK, EUI_CHARTS_THEME_LIGHT, @@ -22,6 +22,10 @@ import { import { useUiSetting$ } from '../../../../../../../../src/plugins/kibana_react/public'; import { ChartWrapper } from '../ChartWrapper'; +const StyleChart = styled.div` + height: 100%; +`; + interface Props { options?: Array<{ count: number; @@ -32,65 +36,47 @@ interface Props { export function VisitorBreakdownChart({ options }: Props) { const [darkMode] = useUiSetting$('theme:darkMode'); + const euiChartTheme = darkMode + ? EUI_CHARTS_THEME_DARK + : EUI_CHARTS_THEME_LIGHT; + return ( - - - - d.count as number} - valueGetter="percent" - percentFormatter={(d: number) => - `${Math.round((d + Number.EPSILON) * 100) / 100}%` - } - layers={[ - { - groupByRollup: (d: Datum) => d.name, - nodeLabel: (d: Datum) => d, - // fillLabel: { textInvertible: true }, - shape: { - fillColor: (d) => { - const clrs = [ - euiLightVars.euiColorVis1_behindText, - euiLightVars.euiColorVis0_behindText, - euiLightVars.euiColorVis2_behindText, - euiLightVars.euiColorVis3_behindText, - euiLightVars.euiColorVis4_behindText, - euiLightVars.euiColorVis5_behindText, - euiLightVars.euiColorVis6_behindText, - euiLightVars.euiColorVis7_behindText, - euiLightVars.euiColorVis8_behindText, - euiLightVars.euiColorVis9_behindText, - ]; - return clrs[d.sortIndex]; + + + + + d.count as number} + valueGetter="percent" + percentFormatter={(d: number) => + `${Math.round((d + Number.EPSILON) * 100) / 100}%` + } + layers={[ + { + groupByRollup: (d: Datum) => d.name, + shape: { + fillColor: (d) => + euiChartTheme.theme.colors?.vizColors?.[d.sortIndex]!, }, }, - }, - ]} - config={{ - partitionLayout: PartitionLayout.sunburst, - linkLabel: { - maxCount: 32, - fontSize: 14, - }, - fontFamily: 'Arial', - margin: { top: 0, bottom: 0, left: 0, right: 0 }, - minFontSize: 1, - idealFontSizeJump: 1.1, - outerSizeRatio: 0.9, // - 0.5 * Math.random(), - emptySizeRatio: 0, - circlePadding: 4, - }} - /> - + ]} + config={{ + partitionLayout: PartitionLayout.sunburst, + linkLabel: { maximumSection: Infinity, maxCount: 0 }, + margin: { top: 0, bottom: 0, left: 0, right: 0 }, + outerSizeRatio: 1, // - 0.5 * Math.random(), + circlePadding: 4, + clockwiseSectors: false, + }} + /> + + ); } diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx index b2132c50dc6bc..f54a54211359c 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/ClientMetrics/index.tsx @@ -45,7 +45,7 @@ export function ClientMetrics() { <>{numeral(data?.pageViews?.value).format('0 a') ?? '-'} diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/RumDashboard.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/RumDashboard.tsx index d23e16b3a5b38..f05c07e8512ac 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/RumDashboard.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/RumDashboard.tsx @@ -49,15 +49,18 @@ export function RumDashboard() { - - - + + + - + + + + - - - + + + diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdown/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdown/index.tsx index c19e2cd4a3742..e18875f32ff72 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdown/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/VisitorBreakdown/index.tsx @@ -5,9 +5,9 @@ */ import React from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiTitle, EuiSpacer } from '@elastic/eui'; import { VisitorBreakdownChart } from '../Charts/VisitorBreakdownChart'; -import { VisitorBreakdownLabel } from '../translations'; +import { I18LABELS, VisitorBreakdownLabel } from '../translations'; import { useFetcher } from '../../../../hooks/useFetcher'; import { useUrlParams } from '../../../../hooks/useUrlParams'; @@ -37,27 +37,24 @@ export function VisitorBreakdown() { return ( <> - +

{VisitorBreakdownLabel}

+ - - -

Browser

-
-
- - - -

Operating System

+ +

{I18LABELS.browser}

+ +
- - -

Device

+ +

{I18LABELS.operatingSystem}

+ +
diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts b/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts index 042e138793f11..660ed5a92a0e6 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts @@ -55,6 +55,15 @@ export const I18LABELS = { coreWebVitals: i18n.translate('xpack.apm.rum.filterGroup.coreWebVitals', { defaultMessage: 'Core web vitals', }), + browser: i18n.translate('xpack.apm.rum.visitorBreakdown.browser', { + defaultMessage: 'Browser', + }), + operatingSystem: i18n.translate( + 'xpack.apm.rum.visitorBreakdown.operatingSystem', + { + defaultMessage: 'Operating system', + } + ), }; export const VisitorBreakdownLabel = i18n.translate( From b6731b42d1ab94eb7c4f6f76c1f4be4b3df4b649 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 9 Sep 2020 09:20:24 +0200 Subject: [PATCH 47/58] Bump http-proxy from 1.17.0 to 1.18.1 (#76924) --- yarn.lock | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 95066c9fa8cda..bb3f8baea9692 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12295,11 +12295,6 @@ eventemitter2@~0.4.13: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== - eventemitter3@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" @@ -15524,11 +15519,11 @@ http-proxy-middleware@0.19.1: micromatch "^3.1.10" http-proxy@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: - eventemitter3 "^3.0.0" + eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" From 7ba33abee6dddc70a557b4149bd06b44905a3ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Kopyci=C5=84ski?= Date: Wed, 9 Sep 2020 11:13:50 +0200 Subject: [PATCH 48/58] [Security Solution] Fix redirect properly old SIEM App routes (#76868) --- .../integration/url_compatibility.spec.ts | 3 +- .../security_solution/public/helpers.test.ts | 55 +++++++++++++++++++ .../security_solution/public/helpers.ts | 38 +++++++++++-- 3 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/helpers.test.ts diff --git a/x-pack/plugins/security_solution/cypress/integration/url_compatibility.spec.ts b/x-pack/plugins/security_solution/cypress/integration/url_compatibility.spec.ts index d55a8faae021d..5b42897b065e3 100644 --- a/x-pack/plugins/security_solution/cypress/integration/url_compatibility.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/url_compatibility.spec.ts @@ -18,8 +18,7 @@ const ABSOLUTE_DATE = { startTime: '2019-08-01T20:03:29.186Z', }; -// FLAKY: https://github.com/elastic/kibana/issues/75697 -describe.skip('URL compatibility', () => { +describe('URL compatibility', () => { it('Redirects to Detection alerts from old Detections URL', () => { loginAndWaitForPage(DETECTIONS); diff --git a/x-pack/plugins/security_solution/public/helpers.test.ts b/x-pack/plugins/security_solution/public/helpers.test.ts new file mode 100644 index 0000000000000..9244452a23e6d --- /dev/null +++ b/x-pack/plugins/security_solution/public/helpers.test.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { parseRoute } from './helpers'; + +describe('public helpers parseRoute', () => { + it('should properly parse hash route', () => { + const hashSearch = + '?timerange=(global:(linkTo:!(timeline),timerange:(from:%272020-09-06T11:43:55.814Z%27,fromStr:now-24h,kind:relative,to:%272020-09-07T11:43:55.814Z%27,toStr:now)),timeline:(linkTo:!(global),timerange:(from:%272020-09-06T11:43:55.814Z%27,fromStr:now-24h,kind:relative,to:%272020-09-07T11:43:55.814Z%27,toStr:now)))'; + const hashLocation = { + hash: `#/detections/rules/id/78acc090-bbaa-4a86-916b-ea44784324ae/edit${hashSearch}`, + pathname: '/app/siem', + search: '', + }; + + expect(parseRoute(hashLocation)).toEqual({ + pageName: 'detections', + path: `/rules/id/78acc090-bbaa-4a86-916b-ea44784324ae/edit${hashSearch}`, + search: hashSearch, + }); + }); + + it('should properly parse non-hash route', () => { + const nonHashLocation = { + hash: '', + pathname: '/app/security/detections/rules/id/78acc090-bbaa-4a86-916b-ea44784324ae/edit', + search: + '?timerange=(global:(linkTo:!(timeline),timerange:(from:%272020-09-06T11:43:55.814Z%27,fromStr:now-24h,kind:relative,to:%272020-09-07T11:43:55.814Z%27,toStr:now)),timeline:(linkTo:!(global),timerange:(from:%272020-09-06T11:43:55.814Z%27,fromStr:now-24h,kind:relative,to:%272020-09-07T11:43:55.814Z%27,toStr:now)))', + }; + + expect(parseRoute(nonHashLocation)).toEqual({ + pageName: 'detections', + path: `/rules/id/78acc090-bbaa-4a86-916b-ea44784324ae/edit${nonHashLocation.search}`, + search: nonHashLocation.search, + }); + }); + + it('should properly parse non-hash subplugin route', () => { + const nonHashLocation = { + hash: '', + pathname: '/app/security/detections', + search: + '?timerange=(global:(linkTo:!(timeline),timerange:(from:%272020-09-06T11:43:55.814Z%27,fromStr:now-24h,kind:relative,to:%272020-09-07T11:43:55.814Z%27,toStr:now)),timeline:(linkTo:!(global),timerange:(from:%272020-09-06T11:43:55.814Z%27,fromStr:now-24h,kind:relative,to:%272020-09-07T11:43:55.814Z%27,toStr:now)))', + }; + + expect(parseRoute(nonHashLocation)).toEqual({ + pageName: 'detections', + path: `${nonHashLocation.search}`, + search: nonHashLocation.search, + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/helpers.ts b/x-pack/plugins/security_solution/public/helpers.ts index 63c3f3ea81d98..92f3d23907559 100644 --- a/x-pack/plugins/security_solution/public/helpers.ts +++ b/x-pack/plugins/security_solution/public/helpers.ts @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import { isEmpty } from 'lodash/fp'; + import { CoreStart } from '../../../../src/core/public'; import { APP_ID } from '../common/constants'; import { @@ -13,13 +15,37 @@ import { import { SecurityPageName } from './app/types'; import { InspectResponse } from './types'; +export const parseRoute = (location: Pick) => { + if (!isEmpty(location.hash)) { + const hashPath = location.hash.split('?'); + const search = hashPath.length >= 1 ? `?${hashPath[1]}` : ''; + const pageRoute = hashPath.length > 0 ? hashPath[0].split('/') : []; + const pageName = pageRoute.length >= 1 ? pageRoute[1] : ''; + const path = `/${pageRoute.slice(2).join('/') ?? ''}${search}`; + + return { + pageName, + path, + search, + }; + } + + const search = location.search; + const pageRoute = location.pathname.split('/'); + const pageName = pageRoute[3]; + const subpluginPath = pageRoute.length > 4 ? `/${pageRoute.slice(4).join('/')}` : ''; + const path = `${subpluginPath}${search}`; + + return { + pageName, + path, + search, + }; +}; + export const manageOldSiemRoutes = async (coreStart: CoreStart) => { const { application } = coreStart; - const hashPath = window.location.hash.split('?'); - const search = hashPath.length >= 1 ? hashPath[1] : ''; - const pageRoute = hashPath.length > 0 ? hashPath[0].split('/') : []; - const pageName = pageRoute.length >= 1 ? pageRoute[1] : ''; - const path = `/${pageRoute.slice(2).join('/') ?? ''}?${search}`; + const { pageName, path, search } = parseRoute(window.location); switch (pageName) { case SecurityPageName.overview: @@ -73,7 +99,7 @@ export const manageOldSiemRoutes = async (coreStart: CoreStart) => { default: application.navigateToApp(`${APP_ID}:${SecurityPageName.overview}`, { replace: true, - path: `?${search}`, + path: `${search}`, }); break; } From a127766d320cf98eac6e5aa2a5e22dac3eb4015b Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 9 Sep 2020 11:17:53 +0200 Subject: [PATCH 49/58] Correct field for rum page url (#76916) --- .../common/__snapshots__/elasticsearch_fieldnames.test.ts.snap | 2 +- x-pack/plugins/apm/common/elasticsearch_fieldnames.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap b/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap index f93df9a01dea2..8218eefe738f0 100644 --- a/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap +++ b/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap @@ -478,7 +478,7 @@ exports[`Transaction TRANSACTION_TIME_TO_FIRST_BYTE 1`] = `undefined`; exports[`Transaction TRANSACTION_TYPE 1`] = `"transaction type"`; -exports[`Transaction TRANSACTION_URL 1`] = `undefined`; +exports[`Transaction TRANSACTION_URL 1`] = `"http://www.elastic.co"`; exports[`Transaction URL_FULL 1`] = `"http://www.elastic.co"`; diff --git a/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts b/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts index b322abeb3d597..e1a279714d308 100644 --- a/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts +++ b/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts @@ -97,7 +97,7 @@ export const POD_NAME = 'kubernetes.pod.name'; export const CLIENT_GEO_COUNTRY_ISO_CODE = 'client.geo.country_iso_code'; // RUM Labels -export const TRANSACTION_URL = 'transaction.page.url'; +export const TRANSACTION_URL = 'url.full'; export const CLIENT_GEO = 'client.geo'; export const USER_AGENT_DEVICE = 'user_agent.device.name'; export const USER_AGENT_OS = 'user_agent.os.name'; From 87380f59172e37c117621b6a798708507bbba376 Mon Sep 17 00:00:00 2001 From: Bohdan Tsymbala Date: Wed, 9 Sep 2020 11:43:26 +0200 Subject: [PATCH 50/58] [ENDPOINT] First version of the trusted apps list. (#76304) * First version of the trusted apps list. * Added proper visualisation of OS and Date Created columns. * Small change in naming in middleware. * Renamed function to avoid naming confusion. * Migrated to usage of selectors and memo in list component. * Added explicit return types. * Changed to use server schema for service parameter. * Removed some over generalisation in types. * Renamed types and properties related to trusted apps page state. * Renamed types and properties related to trusted apps page state. * Renamed the action type to be namespaced to trusted apps. * Merged the exports and declarations in reducer and used constants for defaults. * Memoization of pagination data structure. * Used a shared constant for REST API path. * Improvements and consistency on pagination across tabs. * Added a bit more typing and used Partial<> * Made constants readonly and added some useMemo usages. * Fixed extracting page index from URI. * Fixed the case of infinite refreshes when there is loading failure (need to rethink a bit conditions when to refresh). * Resetting state to initial when we navigate away from trusted apps list. * Fixed mapping page index to the table pagination. * Changed to using AppAction in reducer. * Made ServerApiError a default error type for data binding. * Renamed all types related to data binding to resource state. * Created index file for state types. * Fixed parameter extracting code to meet expectations of endpoints list behavior. * Updated snapshot. * Changed middleware to only use selectors. * Added tests for routing. * Added documentation to the types in async resource state module. * Added tests for async resource state module. * Added tests for store selectors. * Added tests for reducer. * Moved around imports. * Added tests for the middleware. * Added list component tests. * Removed a redundant function. * Commiting snapshots. --- .../public/common/store/actions.ts | 8 +- .../public/common/store/routing/action.ts | 2 +- .../public/management/common/constants.ts | 6 + .../public/management/common/routing.test.ts | 111 + .../public/management/common/routing.ts | 62 +- .../public/management/index.ts | 4 +- .../pages/endpoint_hosts/store/selectors.ts | 36 +- .../pages/endpoint_hosts/view/index.tsx | 4 +- .../pages/trusted_apps/service/index.ts | 26 + .../state/async_resource_state.test.ts | 242 + .../state/async_resource_state.ts | 138 + .../pages/trusted_apps/state/index.ts | 8 + .../state/trusted_apps_list_page_state.ts | 27 + .../pages/trusted_apps/store/action.ts | 16 + .../trusted_apps/store/middleware.test.ts | 130 + .../pages/trusted_apps/store/middleware.ts | 99 + .../pages/trusted_apps/store/reducer.test.ts | 95 + .../pages/trusted_apps/store/reducer.ts | 96 + .../trusted_apps/store/selectors.test.ts | 179 + .../pages/trusted_apps/store/selectors.ts | 76 + .../pages/trusted_apps/test_utils/index.ts | 135 + .../trusted_apps_list.test.tsx.snap | 5530 +++++++++++++++++ .../trusted_apps_page.test.tsx.snap | 4 +- .../pages/trusted_apps/view/hooks.ts | 22 + .../view/trusted_apps_list.test.tsx | 123 + .../trusted_apps/view/trusted_apps_list.tsx | 126 + .../trusted_apps/view/trusted_apps_page.tsx | 13 +- .../public/management/store/middleware.ts | 29 +- .../public/management/store/reducer.ts | 7 + .../public/management/types.ts | 2 + 30 files changed, 7310 insertions(+), 46 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/management/common/routing.test.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/index.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/async_resource_state.test.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/async_resource_state.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/index.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/trusted_apps_list_page_state.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/action.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/middleware.test.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/middleware.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/reducer.test.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/reducer.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/selectors.test.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/selectors.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/test_utils/index.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_list.test.tsx.snap create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/hooks.ts create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.test.tsx create mode 100644 x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.tsx diff --git a/x-pack/plugins/security_solution/public/common/store/actions.ts b/x-pack/plugins/security_solution/public/common/store/actions.ts index cd8836e38bfef..6b446ab6692d9 100644 --- a/x-pack/plugins/security_solution/public/common/store/actions.ts +++ b/x-pack/plugins/security_solution/public/common/store/actions.ts @@ -7,10 +7,16 @@ import { EndpointAction } from '../../management/pages/endpoint_hosts/store/action'; import { PolicyListAction } from '../../management/pages/policy/store/policy_list'; import { PolicyDetailsAction } from '../../management/pages/policy/store/policy_details'; +import { TrustedAppsPageAction } from '../../management/pages/trusted_apps/store/action'; export { appActions } from './app'; export { dragAndDropActions } from './drag_and_drop'; export { inputsActions } from './inputs'; import { RoutingAction } from './routing'; -export type AppAction = EndpointAction | RoutingAction | PolicyListAction | PolicyDetailsAction; +export type AppAction = + | EndpointAction + | RoutingAction + | PolicyListAction + | PolicyDetailsAction + | TrustedAppsPageAction; diff --git a/x-pack/plugins/security_solution/public/common/store/routing/action.ts b/x-pack/plugins/security_solution/public/common/store/routing/action.ts index ae5e4eb32d476..d0cc38970ca21 100644 --- a/x-pack/plugins/security_solution/public/common/store/routing/action.ts +++ b/x-pack/plugins/security_solution/public/common/store/routing/action.ts @@ -6,7 +6,7 @@ import { AppLocation, Immutable } from '../../../../common/endpoint/types'; -interface UserChangedUrl { +export interface UserChangedUrl { readonly type: 'userChangedUrl'; readonly payload: Immutable; } diff --git a/x-pack/plugins/security_solution/public/management/common/constants.ts b/x-pack/plugins/security_solution/public/management/common/constants.ts index 06f0f09bcf54d..cd4ce743bb701 100644 --- a/x-pack/plugins/security_solution/public/management/common/constants.ts +++ b/x-pack/plugins/security_solution/public/management/common/constants.ts @@ -24,6 +24,12 @@ export const MANAGEMENT_STORE_POLICY_LIST_NAMESPACE = 'policyList'; export const MANAGEMENT_STORE_POLICY_DETAILS_NAMESPACE = 'policyDetails'; /** Namespace within the Management state where endpoint-host state is maintained */ export const MANAGEMENT_STORE_ENDPOINTS_NAMESPACE = 'endpoints'; +/** Namespace within the Management state where trusted apps page state is maintained */ +export const MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE = 'trustedApps'; + +export const MANAGEMENT_PAGE_SIZE_OPTIONS: readonly number[] = [10, 20, 50]; +export const MANAGEMENT_DEFAULT_PAGE = 0; +export const MANAGEMENT_DEFAULT_PAGE_SIZE = 10; // --[ DEFAULTS ]--------------------------------------------------------------------------- /** The default polling interval to start all polling pages */ diff --git a/x-pack/plugins/security_solution/public/management/common/routing.test.ts b/x-pack/plugins/security_solution/public/management/common/routing.test.ts new file mode 100644 index 0000000000000..7a36654dcffc3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/common/routing.test.ts @@ -0,0 +1,111 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { extractListPaginationParams, getTrustedAppsListPath } from './routing'; +import { MANAGEMENT_DEFAULT_PAGE, MANAGEMENT_DEFAULT_PAGE_SIZE } from './constants'; + +describe('routing', () => { + describe('extractListPaginationParams()', () => { + it('extracts default page index when not provided', () => { + expect(extractListPaginationParams({}).page_index).toBe(MANAGEMENT_DEFAULT_PAGE); + }); + + it('extracts default page index when too small value provided', () => { + expect(extractListPaginationParams({ page_index: '-1' }).page_index).toBe( + MANAGEMENT_DEFAULT_PAGE + ); + }); + + it('extracts default page index when not a number provided', () => { + expect(extractListPaginationParams({ page_index: 'a' }).page_index).toBe( + MANAGEMENT_DEFAULT_PAGE + ); + }); + + it('extracts only last page index when multiple values provided', () => { + expect(extractListPaginationParams({ page_index: ['1', '2'] }).page_index).toBe(2); + }); + + it('extracts proper page index when single valid value provided', () => { + expect(extractListPaginationParams({ page_index: '2' }).page_index).toBe(2); + }); + + it('extracts default page size when not provided', () => { + expect(extractListPaginationParams({}).page_size).toBe(MANAGEMENT_DEFAULT_PAGE_SIZE); + }); + + it('extracts default page size when invalid option provided', () => { + expect(extractListPaginationParams({ page_size: '25' }).page_size).toBe( + MANAGEMENT_DEFAULT_PAGE_SIZE + ); + }); + + it('extracts default page size when not a number provided', () => { + expect(extractListPaginationParams({ page_size: 'a' }).page_size).toBe( + MANAGEMENT_DEFAULT_PAGE_SIZE + ); + }); + + it('extracts only last page size when multiple values provided', () => { + expect(extractListPaginationParams({ page_size: ['10', '20'] }).page_size).toBe(20); + }); + + it('extracts proper page size when single valid value provided', () => { + expect(extractListPaginationParams({ page_size: '20' }).page_size).toBe(20); + }); + }); + + describe('getTrustedAppsListPath()', () => { + it('builds proper path when no parameters provided', () => { + expect(getTrustedAppsListPath()).toEqual('/trusted_apps'); + }); + + it('builds proper path when empty parameters provided', () => { + expect(getTrustedAppsListPath({})).toEqual('/trusted_apps'); + }); + + it('builds proper path when no page index provided', () => { + expect(getTrustedAppsListPath({ page_size: 20 })).toEqual('/trusted_apps?page_size=20'); + }); + + it('builds proper path when no page size provided', () => { + expect(getTrustedAppsListPath({ page_index: 2 })).toEqual('/trusted_apps?page_index=2'); + }); + + it('builds proper path when both page index and size provided', () => { + expect(getTrustedAppsListPath({ page_index: 2, page_size: 20 })).toEqual( + '/trusted_apps?page_index=2&page_size=20' + ); + }); + + it('builds proper path when page index is equal to default', () => { + const path = getTrustedAppsListPath({ + page_index: MANAGEMENT_DEFAULT_PAGE, + page_size: 20, + }); + + expect(path).toEqual('/trusted_apps?page_size=20'); + }); + + it('builds proper path when page size is equal to default', () => { + const path = getTrustedAppsListPath({ + page_index: 2, + page_size: MANAGEMENT_DEFAULT_PAGE_SIZE, + }); + + expect(path).toEqual('/trusted_apps?page_index=2'); + }); + + it('builds proper path when both page index and size are equal to default', () => { + const path = getTrustedAppsListPath({ + page_index: MANAGEMENT_DEFAULT_PAGE, + page_size: MANAGEMENT_DEFAULT_PAGE_SIZE, + }); + + expect(path).toEqual('/trusted_apps'); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/common/routing.ts b/x-pack/plugins/security_solution/public/management/common/routing.ts index c5ced6f3bcf55..62f360df90192 100644 --- a/x-pack/plugins/security_solution/public/management/common/routing.ts +++ b/x-pack/plugins/security_solution/public/management/common/routing.ts @@ -10,6 +10,9 @@ import { generatePath } from 'react-router-dom'; import querystring from 'querystring'; import { + MANAGEMENT_DEFAULT_PAGE, + MANAGEMENT_DEFAULT_PAGE_SIZE, + MANAGEMENT_PAGE_SIZE_OPTIONS, MANAGEMENT_ROUTING_ENDPOINTS_PATH, MANAGEMENT_ROUTING_POLICIES_PATH, MANAGEMENT_ROUTING_POLICY_DETAILS_PATH, @@ -86,8 +89,61 @@ export const getPolicyDetailPath = (policyId: string, search?: string) => { })}${appendSearch(search)}`; }; -export const getTrustedAppsListPath = (search?: string) => { - return `${generatePath(MANAGEMENT_ROUTING_TRUSTED_APPS_PATH, { +interface ListPaginationParams { + page_index: number; + page_size: number; +} + +const isDefaultOrMissing = (value: number | undefined, defaultValue: number) => { + return value === undefined || value === defaultValue; +}; + +const normalizeListPaginationParams = ( + params?: Partial +): Partial => { + if (params) { + return { + ...(!isDefaultOrMissing(params.page_index, MANAGEMENT_DEFAULT_PAGE) + ? { page_index: params.page_index } + : {}), + ...(!isDefaultOrMissing(params.page_size, MANAGEMENT_DEFAULT_PAGE_SIZE) + ? { page_size: params.page_size } + : {}), + }; + } else { + return {}; + } +}; + +const extractFirstParamValue = (query: querystring.ParsedUrlQuery, key: string): string => { + const value = query[key]; + + return Array.isArray(value) ? value[value.length - 1] : value; +}; + +const extractPageIndex = (query: querystring.ParsedUrlQuery): number => { + const pageIndex = Number(extractFirstParamValue(query, 'page_index')); + + return !Number.isFinite(pageIndex) || pageIndex < 0 ? MANAGEMENT_DEFAULT_PAGE : pageIndex; +}; + +const extractPageSize = (query: querystring.ParsedUrlQuery): number => { + const pageSize = Number(extractFirstParamValue(query, 'page_size')); + + return MANAGEMENT_PAGE_SIZE_OPTIONS.includes(pageSize) ? pageSize : MANAGEMENT_DEFAULT_PAGE_SIZE; +}; + +export const extractListPaginationParams = ( + query: querystring.ParsedUrlQuery +): ListPaginationParams => ({ + page_index: extractPageIndex(query), + page_size: extractPageSize(query), +}); + +export const getTrustedAppsListPath = (params?: Partial): string => { + const path = generatePath(MANAGEMENT_ROUTING_TRUSTED_APPS_PATH, { tabName: AdministrationSubTab.trustedApps, - })}${appendSearch(search)}`; + }); + + return `${path}${appendSearch(querystring.stringify(normalizeListPaginationParams(params)))}`; }; diff --git a/x-pack/plugins/security_solution/public/management/index.ts b/x-pack/plugins/security_solution/public/management/index.ts index 902ed085bd369..4bd9ac495ada9 100644 --- a/x-pack/plugins/security_solution/public/management/index.ts +++ b/x-pack/plugins/security_solution/public/management/index.ts @@ -47,9 +47,7 @@ export class Management { * Cast the ImmutableReducer to a regular reducer for compatibility with * the subplugin architecture (which expects plain redux reducers.) */ - reducer: { - management: managementReducer, - } as ManagementPluginReducer, + reducer: { management: managementReducer } as ManagementPluginReducer, middleware: managementMiddlewareFactory(core, plugins), }, }; diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts index 68ba71b7bbc94..e8abe37cf0a88 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts @@ -15,9 +15,12 @@ import { HostPolicyResponseActionStatus, } from '../../../../../common/endpoint/types'; import { EndpointState, EndpointIndexUIQueryParams } from '../types'; -import { MANAGEMENT_ROUTING_ENDPOINTS_PATH } from '../../../common/constants'; - -const PAGE_SIZES = Object.freeze([10, 20, 50]); +import { extractListPaginationParams } from '../../../common/routing'; +import { + MANAGEMENT_DEFAULT_PAGE, + MANAGEMENT_DEFAULT_PAGE_SIZE, + MANAGEMENT_ROUTING_ENDPOINTS_PATH, +} from '../../../common/constants'; export const listData = (state: Immutable) => state.hosts; @@ -129,17 +132,17 @@ export const uiQueryParams: ( ) => Immutable = createSelector( (state: Immutable) => state.location, (location: Immutable['location']) => { - const data: EndpointIndexUIQueryParams = { page_index: '0', page_size: '10' }; + const data: EndpointIndexUIQueryParams = { + page_index: String(MANAGEMENT_DEFAULT_PAGE), + page_size: String(MANAGEMENT_DEFAULT_PAGE_SIZE), + }; + if (location) { // Removes the `?` from the beginning of query string if it exists const query = querystring.parse(location.search.slice(1)); + const paginationParams = extractListPaginationParams(query); - const keys: Array = [ - 'selected_endpoint', - 'page_size', - 'page_index', - 'show', - ]; + const keys: Array = ['selected_endpoint', 'show']; for (const key of keys) { const value: string | undefined = @@ -160,17 +163,10 @@ export const uiQueryParams: ( } } - // Check if page size is an expected size, otherwise default to 10 - if (!PAGE_SIZES.includes(Number(data.page_size))) { - data.page_size = '10'; - } - - // Check if page index is a valid positive integer, otherwise default to 0 - const pageIndexAsNumber = Number(data.page_index); - if (!Number.isFinite(pageIndexAsNumber) || pageIndexAsNumber < 0) { - data.page_index = '0'; - } + data.page_size = String(paginationParams.page_size); + data.page_index = String(paginationParams.page_index); } + return data; } ); diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx index 8d08ac4e59a87..a569c4f02604b 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx @@ -33,7 +33,7 @@ import { import { useNavigateByRouterEventHandler } from '../../../../common/hooks/endpoint/use_navigate_by_router_event_handler'; import { CreateStructuredSelector } from '../../../../common/store'; import { Immutable, HostInfo } from '../../../../../common/endpoint/types'; -import { DEFAULT_POLL_INTERVAL } from '../../../common/constants'; +import { DEFAULT_POLL_INTERVAL, MANAGEMENT_PAGE_SIZE_OPTIONS } from '../../../common/constants'; import { PolicyEmptyState, HostsEmptyState } from '../../../components/management_empty_state'; import { FormattedDate } from '../../../../common/components/formatted_date'; import { useNavigateToAppEventHandler } from '../../../../common/hooks/endpoint/use_navigate_to_app_event_handler'; @@ -99,7 +99,7 @@ export const EndpointList = () => { pageIndex, pageSize, totalItemCount, - pageSizeOptions: [10, 20, 50], + pageSizeOptions: [...MANAGEMENT_PAGE_SIZE_OPTIONS], hidePerPageOptions: false, }; }, [pageIndex, pageSize, totalItemCount]); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/index.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/index.ts new file mode 100644 index 0000000000000..9308c137cfb9c --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/index.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { HttpStart } from 'kibana/public'; +import { TRUSTED_APPS_LIST_API } from '../../../../../common/endpoint/constants'; +import { + GetTrustedListAppsResponse, + GetTrustedAppsListRequest, +} from '../../../../../common/endpoint/types/trusted_apps'; + +export interface TrustedAppsService { + getTrustedAppsList(request: GetTrustedAppsListRequest): Promise; +} + +export class TrustedAppsHttpService implements TrustedAppsService { + constructor(private http: HttpStart) {} + + async getTrustedAppsList(request: GetTrustedAppsListRequest) { + return this.http.get(TRUSTED_APPS_LIST_API, { + query: request, + }); + } +} diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/async_resource_state.test.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/async_resource_state.test.ts new file mode 100644 index 0000000000000..5e00d833981ed --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/async_resource_state.test.ts @@ -0,0 +1,242 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + UninitialisedResourceState, + LoadingResourceState, + LoadedResourceState, + FailedResourceState, + isUninitialisedResourceState, + isLoadingResourceState, + isLoadedResourceState, + isFailedResourceState, + getLastLoadedResourceState, + getCurrentResourceError, + isOutdatedResourceState, +} from './async_resource_state'; + +interface TestData { + property: string; +} + +const data: TestData = { property: 'value' }; + +const uninitialisedResourceState: UninitialisedResourceState = { + type: 'UninitialisedResourceState', +}; + +const loadedResourceState: LoadedResourceState = { + type: 'LoadedResourceState', + data, +}; + +const failedResourceStateInitially: FailedResourceState = { + type: 'FailedResourceState', + error: {}, +}; + +const failedResourceStateSubsequently: FailedResourceState = { + type: 'FailedResourceState', + error: {}, + lastLoadedState: loadedResourceState, +}; + +const loadingResourceStateInitially: LoadingResourceState = { + type: 'LoadingResourceState', + previousState: uninitialisedResourceState, +}; + +const loadingResourceStateAfterSuccess: LoadingResourceState = { + type: 'LoadingResourceState', + previousState: loadedResourceState, +}; + +const loadingResourceStateAfterInitialFailure: LoadingResourceState = { + type: 'LoadingResourceState', + previousState: failedResourceStateInitially, +}; + +const loadingResourceStateAfterSubsequentFailure: LoadingResourceState = { + type: 'LoadingResourceState', + previousState: failedResourceStateSubsequently, +}; + +describe('AsyncResourceState', () => { + describe('guards', () => { + describe('isUninitialisedResourceState()', () => { + it('returns true for UninitialisedResourceState', () => { + expect(isUninitialisedResourceState(uninitialisedResourceState)).toBe(true); + }); + + it('returns false for LoadingResourceState', () => { + expect(isUninitialisedResourceState(loadingResourceStateInitially)).toBe(false); + }); + + it('returns false for LoadedResourceState', () => { + expect(isUninitialisedResourceState(loadedResourceState)).toBe(false); + }); + + it('returns false for FailedResourceState', () => { + expect(isUninitialisedResourceState(failedResourceStateInitially)).toBe(false); + }); + }); + + describe('isLoadingResourceState()', () => { + it('returns false for UninitialisedResourceState', () => { + expect(isLoadingResourceState(uninitialisedResourceState)).toBe(false); + }); + + it('returns true for LoadingResourceState', () => { + expect(isLoadingResourceState(loadingResourceStateInitially)).toBe(true); + }); + + it('returns false for LoadedResourceState', () => { + expect(isLoadingResourceState(loadedResourceState)).toBe(false); + }); + + it('returns false for FailedResourceState', () => { + expect(isLoadingResourceState(failedResourceStateInitially)).toBe(false); + }); + }); + + describe('isLoadedResourceState()', () => { + it('returns false for UninitialisedResourceState', () => { + expect(isLoadedResourceState(uninitialisedResourceState)).toBe(false); + }); + + it('returns false for LoadingResourceState', () => { + expect(isLoadedResourceState(loadingResourceStateInitially)).toBe(false); + }); + + it('returns true for LoadedResourceState', () => { + expect(isLoadedResourceState(loadedResourceState)).toBe(true); + }); + + it('returns false for FailedResourceState', () => { + expect(isLoadedResourceState(failedResourceStateInitially)).toBe(false); + }); + }); + + describe('isFailedResourceState()', () => { + it('returns false for UninitialisedResourceState', () => { + expect(isFailedResourceState(uninitialisedResourceState)).toBe(false); + }); + + it('returns false for LoadingResourceState', () => { + expect(isFailedResourceState(loadingResourceStateInitially)).toBe(false); + }); + + it('returns false for LoadedResourceState', () => { + expect(isFailedResourceState(loadedResourceState)).toBe(false); + }); + + it('returns true for FailedResourceState', () => { + expect(isFailedResourceState(failedResourceStateInitially)).toBe(true); + }); + }); + }); + + describe('functions', () => { + describe('getLastLoadedResourceState()', () => { + it('returns undefined for UninitialisedResourceState', () => { + expect(getLastLoadedResourceState(uninitialisedResourceState)).toBeUndefined(); + }); + + it('returns current state for LoadedResourceState', () => { + expect(getLastLoadedResourceState(loadedResourceState)).toBe(loadedResourceState); + }); + + it('returns undefined for initial FailedResourceState', () => { + expect(getLastLoadedResourceState(failedResourceStateInitially)).toBeUndefined(); + }); + + it('returns last loaded state for subsequent FailedResourceState', () => { + expect(getLastLoadedResourceState(failedResourceStateSubsequently)).toBe( + loadedResourceState + ); + }); + + it('returns undefined for initial LoadingResourceState', () => { + expect(getLastLoadedResourceState(loadingResourceStateInitially)).toBeUndefined(); + }); + + it('returns previous state for LoadingResourceState after success', () => { + expect(getLastLoadedResourceState(loadingResourceStateAfterSuccess)).toBe( + loadedResourceState + ); + }); + + it('returns undefined for LoadingResourceState after initial failure', () => { + expect(getLastLoadedResourceState(loadingResourceStateAfterInitialFailure)).toBeUndefined(); + }); + + it('returns previous state for LoadingResourceState after subsequent failure', () => { + expect(getLastLoadedResourceState(loadingResourceStateAfterSubsequentFailure)).toBe( + loadedResourceState + ); + }); + }); + + describe('getCurrentResourceError()', () => { + it('returns undefined for UninitialisedResourceState', () => { + expect(getCurrentResourceError(uninitialisedResourceState)).toBeUndefined(); + }); + + it('returns undefined for LoadedResourceState', () => { + expect(getCurrentResourceError(loadedResourceState)).toBeUndefined(); + }); + + it('returns error for FailedResourceState', () => { + expect(getCurrentResourceError(failedResourceStateSubsequently)).toStrictEqual({}); + }); + + it('returns undefined for LoadingResourceState', () => { + expect(getCurrentResourceError(loadingResourceStateAfterSubsequentFailure)).toBeUndefined(); + }); + }); + + describe('isOutdatedResourceState()', () => { + const trueFreshnessTest = (testData: TestData) => true; + const falseFreshnessTest = (testData: TestData) => false; + + it('returns true for UninitialisedResourceState', () => { + expect(isOutdatedResourceState(uninitialisedResourceState, falseFreshnessTest)).toBe(true); + }); + + it('returns false for LoadingResourceState', () => { + expect(isOutdatedResourceState(loadingResourceStateAfterSuccess, falseFreshnessTest)).toBe( + false + ); + }); + + it('returns false for LoadedResourceState and fresh data', () => { + expect(isOutdatedResourceState(loadedResourceState, trueFreshnessTest)).toBe(false); + }); + + it('returns true for LoadedResourceState and outdated data', () => { + expect(isOutdatedResourceState(loadedResourceState, falseFreshnessTest)).toBe(true); + }); + + it('returns true for initial FailedResourceState', () => { + expect(isOutdatedResourceState(failedResourceStateInitially, falseFreshnessTest)).toBe( + true + ); + }); + + it('returns false for subsequent FailedResourceState and fresh data', () => { + expect(isOutdatedResourceState(failedResourceStateSubsequently, trueFreshnessTest)).toBe( + false + ); + }); + + it('returns true for subsequent FailedResourceState and outdated data', () => { + expect(isOutdatedResourceState(failedResourceStateSubsequently, falseFreshnessTest)).toBe( + true + ); + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/async_resource_state.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/async_resource_state.ts new file mode 100644 index 0000000000000..4639a50a61865 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/async_resource_state.ts @@ -0,0 +1,138 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +/* + * this file contains set of types to represent state of asynchronous resource. + * Resource is defined as a reference to potential data that is loaded/updated + * using asynchronous communication with data source (for example through REST API call). + * Asynchronous update implies that next to just having data: + * - there is moment in time when data is not loaded/initialised and not in process of loading/updating + * - process performing data update can take considerable time which needs to be communicated to user + * - update can fail due to multiple reasons and also needs to be communicated to the user + */ + +import { Immutable } from '../../../../../common/endpoint/types'; +import { ServerApiError } from '../../../../common/types'; + +/** + * Data type to represent uninitialised state of asynchronous resource. + * This state indicates that no actions to load the data has be taken. + */ +export interface UninitialisedResourceState { + type: 'UninitialisedResourceState'; +} + +/** + * Data type to represent loading state of asynchronous resource. Loading state + * should be used to indicate that data is in the process of loading/updating. + * It contains reference to previous stale state that can be used to present + * previous state of resource to the user (like show previous already loaded + * data or show previous failure). + * + * @param Data - type of the data that is referenced by resource state + * @param Error - type of the error that can happen during attempt to update data + */ +export interface LoadingResourceState { + type: 'LoadingResourceState'; + previousState: StaleResourceState; +} + +/** + * Data type to represent loaded state of asynchronous resource. Loaded state + * is characterised with reference to the loaded data. + * + * @param Data - type of the data that is referenced by resource state + */ +export interface LoadedResourceState { + type: 'LoadedResourceState'; + data: Data; +} + +/** + * Data type to represent failed state of asynchronous resource. Failed state + * is characterised with error and can reference last loaded state. Reference + * to last loaded state can be used to present previous successfully loaded data. + * + * @param Data - type of the data that is referenced by resource state + * @param Error - type of the error that can happen during attempt to update data + */ +export interface FailedResourceState { + type: 'FailedResourceState'; + error: Error; + lastLoadedState?: LoadedResourceState; +} + +/** + * Data type to represent stale (not loading) state of asynchronous resource. + * + * @param Data - type of the data that is referenced by resource state + * @param Error - type of the error that can happen during attempt to update data + */ +export type StaleResourceState = + | UninitialisedResourceState + | LoadedResourceState + | FailedResourceState; + +/** + * Data type to represent any state of asynchronous resource. + * + * @param Data - type of the data that is referenced by resource state + * @param Error - type of the error that can happen during attempt to update data + */ +export type AsyncResourceState = + | UninitialisedResourceState + | LoadingResourceState + | LoadedResourceState + | FailedResourceState; + +// Set of guards to narrow the type of AsyncResourceState that make further refactoring easier + +export const isUninitialisedResourceState = ( + state: Immutable> +): state is Immutable => state.type === 'UninitialisedResourceState'; + +export const isLoadingResourceState = ( + state: Immutable> +): state is Immutable> => state.type === 'LoadingResourceState'; + +export const isLoadedResourceState = ( + state: Immutable> +): state is Immutable> => state.type === 'LoadedResourceState'; + +export const isFailedResourceState = ( + state: Immutable> +): state is Immutable> => state.type === 'FailedResourceState'; + +// Set of functions to work with AsyncResourceState + +export const getLastLoadedResourceState = ( + state: Immutable> +): Immutable> | undefined => { + if (isLoadedResourceState(state)) { + return state; + } else if (isLoadingResourceState(state)) { + return getLastLoadedResourceState(state.previousState); + } else if (isFailedResourceState(state)) { + return state.lastLoadedState; + } else { + return undefined; + } +}; + +export const getCurrentResourceError = ( + state: Immutable> +): Immutable | undefined => { + return isFailedResourceState(state) ? state.error : undefined; +}; + +export const isOutdatedResourceState = ( + state: AsyncResourceState, + isFresh: (data: Data) => boolean +): boolean => + isUninitialisedResourceState(state) || + (isLoadedResourceState(state) && !isFresh(state.data)) || + (isFailedResourceState(state) && + (!state.lastLoadedState || !isFresh(state.lastLoadedState.data))); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/index.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/index.ts new file mode 100644 index 0000000000000..99bdac57da4be --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export * from './async_resource_state'; +export * from './trusted_apps_list_page_state'; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/trusted_apps_list_page_state.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/trusted_apps_list_page_state.ts new file mode 100644 index 0000000000000..23f4cfd576c56 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/state/trusted_apps_list_page_state.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { TrustedApp } from '../../../../../common/endpoint/types/trusted_apps'; +import { AsyncResourceState } from '.'; + +export interface PaginationInfo { + index: number; + size: number; +} + +export interface TrustedAppsListData { + items: TrustedApp[]; + totalItemsCount: number; + paginationInfo: PaginationInfo; +} + +export interface TrustedAppsListPageState { + listView: { + currentListResourceState: AsyncResourceState; + currentPaginationInfo: PaginationInfo; + }; + active: boolean; +} diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/action.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/action.ts new file mode 100644 index 0000000000000..2154a0eca462e --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/action.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { AsyncResourceState, TrustedAppsListData } from '../state'; + +export interface TrustedAppsListResourceStateChanged { + type: 'trustedAppsListResourceStateChanged'; + payload: { + newState: AsyncResourceState; + }; +} + +export type TrustedAppsPageAction = TrustedAppsListResourceStateChanged; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/middleware.test.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/middleware.test.ts new file mode 100644 index 0000000000000..c5abaae473486 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/middleware.test.ts @@ -0,0 +1,130 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { applyMiddleware, createStore } from 'redux'; + +import { createSpyMiddleware } from '../../../../common/store/test_utils'; + +import { + createFailedListViewWithPagination, + createLoadedListViewWithPagination, + createLoadingListViewWithPagination, + createSampleTrustedApps, + createServerApiError, + createUserChangedUrlAction, +} from '../test_utils'; + +import { TrustedAppsService } from '../service'; +import { PaginationInfo, TrustedAppsListPageState } from '../state'; +import { initialTrustedAppsPageState, trustedAppsPageReducer } from './reducer'; +import { createTrustedAppsPageMiddleware } from './middleware'; + +const createGetTrustedListAppsResponse = (pagination: PaginationInfo, totalItemsCount: number) => ({ + data: createSampleTrustedApps(pagination), + page: pagination.index, + per_page: pagination.size, + total: totalItemsCount, +}); + +const createTrustedAppsServiceMock = (): jest.Mocked => ({ + getTrustedAppsList: jest.fn(), +}); + +const createStoreSetup = (trustedAppsService: TrustedAppsService) => { + const spyMiddleware = createSpyMiddleware(); + + return { + spyMiddleware, + store: createStore( + trustedAppsPageReducer, + applyMiddleware( + createTrustedAppsPageMiddleware(trustedAppsService), + spyMiddleware.actionSpyMiddleware + ) + ), + }; +}; + +describe('middleware', () => { + describe('refreshing list resource state', () => { + it('sets initial state properly', async () => { + expect(createStoreSetup(createTrustedAppsServiceMock()).store.getState()).toStrictEqual( + initialTrustedAppsPageState + ); + }); + + it('refreshes the list when location changes and data gets outdated', async () => { + const pagination = { index: 2, size: 50 }; + const service = createTrustedAppsServiceMock(); + const { store, spyMiddleware } = createStoreSetup(service); + + service.getTrustedAppsList.mockResolvedValue( + createGetTrustedListAppsResponse(pagination, 500) + ); + + store.dispatch(createUserChangedUrlAction('/trusted_apps', '?page_index=2&page_size=50')); + + expect(store.getState()).toStrictEqual({ + listView: createLoadingListViewWithPagination(pagination), + active: true, + }); + + await spyMiddleware.waitForAction('trustedAppsListResourceStateChanged'); + + expect(store.getState()).toStrictEqual({ + listView: createLoadedListViewWithPagination(pagination, pagination, 500), + active: true, + }); + }); + + it('does not refresh the list when location changes and data does not get outdated', async () => { + const pagination = { index: 2, size: 50 }; + const service = createTrustedAppsServiceMock(); + const { store, spyMiddleware } = createStoreSetup(service); + + service.getTrustedAppsList.mockResolvedValue( + createGetTrustedListAppsResponse(pagination, 500) + ); + + store.dispatch(createUserChangedUrlAction('/trusted_apps', '?page_index=2&page_size=50')); + + await spyMiddleware.waitForAction('trustedAppsListResourceStateChanged'); + + store.dispatch(createUserChangedUrlAction('/trusted_apps', '?page_index=2&page_size=50')); + + expect(service.getTrustedAppsList).toBeCalledTimes(1); + expect(store.getState()).toStrictEqual({ + listView: createLoadedListViewWithPagination(pagination, pagination, 500), + active: true, + }); + }); + + it('set list resource state to faile when failing to load data', async () => { + const service = createTrustedAppsServiceMock(); + const { store, spyMiddleware } = createStoreSetup(service); + + service.getTrustedAppsList.mockRejectedValue(createServerApiError('Internal Server Error')); + + store.dispatch(createUserChangedUrlAction('/trusted_apps', '?page_index=2&page_size=50')); + + await spyMiddleware.waitForAction('trustedAppsListResourceStateChanged'); + + expect(store.getState()).toStrictEqual({ + listView: createFailedListViewWithPagination( + { index: 2, size: 50 }, + createServerApiError('Internal Server Error') + ), + active: true, + }); + + const infiniteLoopTest = async () => { + await spyMiddleware.waitForAction('trustedAppsListResourceStateChanged'); + }; + + await expect(infiniteLoopTest).rejects.not.toBeNull(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/middleware.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/middleware.ts new file mode 100644 index 0000000000000..31c301b8dbd2b --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/middleware.ts @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { Immutable } from '../../../../../common/endpoint/types'; +import { AppAction } from '../../../../common/store/actions'; +import { + ImmutableMiddleware, + ImmutableMiddlewareAPI, + ImmutableMiddlewareFactory, +} from '../../../../common/store'; + +import { TrustedAppsHttpService, TrustedAppsService } from '../service'; + +import { + AsyncResourceState, + StaleResourceState, + TrustedAppsListData, + TrustedAppsListPageState, +} from '../state'; + +import { TrustedAppsListResourceStateChanged } from './action'; + +import { + getCurrentListResourceState, + getLastLoadedListResourceState, + getListCurrentPageIndex, + getListCurrentPageSize, + needsRefreshOfListData, +} from './selectors'; + +const createTrustedAppsListResourceStateChangedAction = ( + newState: Immutable> +): Immutable => ({ + type: 'trustedAppsListResourceStateChanged', + payload: { newState }, +}); + +const refreshList = async ( + store: ImmutableMiddlewareAPI, + trustedAppsService: TrustedAppsService +) => { + store.dispatch( + createTrustedAppsListResourceStateChangedAction({ + type: 'LoadingResourceState', + // need to think on how to avoid the casting + previousState: getCurrentListResourceState(store.getState()) as Immutable< + StaleResourceState + >, + }) + ); + + try { + const pageIndex = getListCurrentPageIndex(store.getState()); + const pageSize = getListCurrentPageSize(store.getState()); + const response = await trustedAppsService.getTrustedAppsList({ + page: pageIndex + 1, + per_page: pageSize, + }); + + store.dispatch( + createTrustedAppsListResourceStateChangedAction({ + type: 'LoadedResourceState', + data: { + items: response.data, + totalItemsCount: response.total, + paginationInfo: { index: pageIndex, size: pageSize }, + }, + }) + ); + } catch (error) { + store.dispatch( + createTrustedAppsListResourceStateChangedAction({ + type: 'FailedResourceState', + error, + lastLoadedState: getLastLoadedListResourceState(store.getState()), + }) + ); + } +}; + +export const createTrustedAppsPageMiddleware = ( + trustedAppsService: TrustedAppsService +): ImmutableMiddleware => { + return (store) => (next) => async (action) => { + next(action); + + // TODO: need to think if failed state is a good condition to consider need for refresh + if (action.type === 'userChangedUrl' && needsRefreshOfListData(store.getState())) { + await refreshList(store, trustedAppsService); + } + }; +}; + +export const trustedAppsPageMiddlewareFactory: ImmutableMiddlewareFactory = ( + coreStart +) => createTrustedAppsPageMiddleware(new TrustedAppsHttpService(coreStart.http)); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/reducer.test.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/reducer.test.ts new file mode 100644 index 0000000000000..34325e0cf1398 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/reducer.test.ts @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { initialTrustedAppsPageState, trustedAppsPageReducer } from './reducer'; +import { + createListLoadedResourceState, + createLoadedListViewWithPagination, + createTrustedAppsListResourceStateChangedAction, + createUserChangedUrlAction, +} from '../test_utils'; + +describe('reducer', () => { + describe('UserChangedUrl', () => { + it('makes page state active and extracts pagination parameters', () => { + const result = trustedAppsPageReducer( + initialTrustedAppsPageState, + createUserChangedUrlAction('/trusted_apps', '?page_index=5&page_size=50') + ); + + expect(result).toStrictEqual({ + listView: { + ...initialTrustedAppsPageState.listView, + currentPaginationInfo: { index: 5, size: 50 }, + }, + active: true, + }); + }); + + it('extracts default pagination parameters when none provided', () => { + const result = trustedAppsPageReducer( + { + ...initialTrustedAppsPageState, + listView: { + ...initialTrustedAppsPageState.listView, + currentPaginationInfo: { index: 5, size: 50 }, + }, + }, + createUserChangedUrlAction('/trusted_apps', '?page_index=b&page_size=60') + ); + + expect(result).toStrictEqual({ + ...initialTrustedAppsPageState, + active: true, + }); + }); + + it('extracts default pagination parameters when invalid provided', () => { + const result = trustedAppsPageReducer( + { + ...initialTrustedAppsPageState, + listView: { + ...initialTrustedAppsPageState.listView, + currentPaginationInfo: { index: 5, size: 50 }, + }, + }, + createUserChangedUrlAction('/trusted_apps') + ); + + expect(result).toStrictEqual({ + ...initialTrustedAppsPageState, + active: true, + }); + }); + + it('makes page state inactive and resets list to uninitialised state when navigating away', () => { + const result = trustedAppsPageReducer( + { listView: createLoadedListViewWithPagination(), active: true }, + createUserChangedUrlAction('/endpoints') + ); + + expect(result).toStrictEqual(initialTrustedAppsPageState); + }); + }); + + describe('TrustedAppsListResourceStateChanged', () => { + it('sets the current list resource state', () => { + const listResourceState = createListLoadedResourceState({ index: 3, size: 50 }, 200); + const result = trustedAppsPageReducer( + initialTrustedAppsPageState, + createTrustedAppsListResourceStateChangedAction(listResourceState) + ); + + expect(result).toStrictEqual({ + ...initialTrustedAppsPageState, + listView: { + ...initialTrustedAppsPageState.listView, + currentListResourceState: listResourceState, + }, + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/reducer.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/reducer.ts new file mode 100644 index 0000000000000..4fdc6f90ef40c --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/reducer.ts @@ -0,0 +1,96 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +// eslint-disable-next-line import/no-nodejs-modules +import { parse } from 'querystring'; +import { matchPath } from 'react-router-dom'; +import { ImmutableReducer } from '../../../../common/store'; +import { AppLocation, Immutable } from '../../../../../common/endpoint/types'; +import { UserChangedUrl } from '../../../../common/store/routing/action'; +import { AppAction } from '../../../../common/store/actions'; +import { extractListPaginationParams } from '../../../common/routing'; +import { + MANAGEMENT_ROUTING_TRUSTED_APPS_PATH, + MANAGEMENT_DEFAULT_PAGE, + MANAGEMENT_DEFAULT_PAGE_SIZE, +} from '../../../common/constants'; + +import { TrustedAppsListResourceStateChanged } from './action'; +import { TrustedAppsListPageState } from '../state'; + +type StateReducer = ImmutableReducer; +type CaseReducer = ( + state: Immutable, + action: Immutable +) => Immutable; + +const isTrustedAppsPageLocation = (location: Immutable) => { + return ( + matchPath(location.pathname ?? '', { + path: MANAGEMENT_ROUTING_TRUSTED_APPS_PATH, + exact: true, + }) !== null + ); +}; + +const trustedAppsListResourceStateChanged: CaseReducer = ( + state, + action +) => { + return { + ...state, + listView: { + ...state.listView, + currentListResourceState: action.payload.newState, + }, + }; +}; + +const userChangedUrl: CaseReducer = (state, action) => { + if (isTrustedAppsPageLocation(action.payload)) { + const paginationParams = extractListPaginationParams(parse(action.payload.search.slice(1))); + + return { + ...state, + listView: { + ...state.listView, + currentPaginationInfo: { + index: paginationParams.page_index, + size: paginationParams.page_size, + }, + }, + active: true, + }; + } else { + return initialTrustedAppsPageState; + } +}; + +export const initialTrustedAppsPageState: TrustedAppsListPageState = { + listView: { + currentListResourceState: { type: 'UninitialisedResourceState' }, + currentPaginationInfo: { + index: MANAGEMENT_DEFAULT_PAGE, + size: MANAGEMENT_DEFAULT_PAGE_SIZE, + }, + }, + active: false, +}; + +export const trustedAppsPageReducer: StateReducer = ( + state = initialTrustedAppsPageState, + action +) => { + switch (action.type) { + case 'trustedAppsListResourceStateChanged': + return trustedAppsListResourceStateChanged(state, action); + + case 'userChangedUrl': + return userChangedUrl(state, action); + } + + return state; +}; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/selectors.test.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/selectors.test.ts new file mode 100644 index 0000000000000..a969e2dee4773 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/selectors.test.ts @@ -0,0 +1,179 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + getCurrentListResourceState, + getLastLoadedListResourceState, + getListCurrentPageIndex, + getListCurrentPageSize, + getListErrorMessage, + getListItems, + getListTotalItemsCount, + isListLoading, + needsRefreshOfListData, +} from './selectors'; + +import { + createDefaultListView, + createDefaultPaginationInfo, + createListComplexLoadingResourceState, + createListFailedResourceState, + createListLoadedResourceState, + createLoadedListViewWithPagination, + createSampleTrustedApps, + createUninitialisedResourceState, +} from '../test_utils'; + +describe('selectors', () => { + describe('needsRefreshOfListData()', () => { + it('returns false for outdated resource state and inactive state', () => { + expect(needsRefreshOfListData({ listView: createDefaultListView(), active: false })).toBe( + false + ); + }); + + it('returns true for outdated resource state and active state', () => { + expect(needsRefreshOfListData({ listView: createDefaultListView(), active: true })).toBe( + true + ); + }); + + it('returns true when current loaded page index is outdated', () => { + const listView = createLoadedListViewWithPagination({ index: 1, size: 20 }); + + expect(needsRefreshOfListData({ listView, active: true })).toBe(true); + }); + + it('returns true when current loaded page size is outdated', () => { + const listView = createLoadedListViewWithPagination({ index: 0, size: 50 }); + + expect(needsRefreshOfListData({ listView, active: true })).toBe(true); + }); + + it('returns false when current loaded data is up to date', () => { + const listView = createLoadedListViewWithPagination(); + + expect(needsRefreshOfListData({ listView, active: true })).toBe(false); + }); + }); + + describe('getCurrentListResourceState()', () => { + it('returns current list resource state', () => { + const listView = createDefaultListView(); + + expect(getCurrentListResourceState({ listView, active: false })).toStrictEqual( + createUninitialisedResourceState() + ); + }); + }); + + describe('getLastLoadedListResourceState()', () => { + it('returns last loaded list resource state', () => { + const listView = { + currentListResourceState: createListComplexLoadingResourceState( + createDefaultPaginationInfo(), + 200 + ), + currentPaginationInfo: createDefaultPaginationInfo(), + }; + + expect(getLastLoadedListResourceState({ listView, active: false })).toStrictEqual( + createListLoadedResourceState(createDefaultPaginationInfo(), 200) + ); + }); + }); + + describe('getListItems()', () => { + it('returns empty list when no valid data loaded', () => { + expect(getListItems({ listView: createDefaultListView(), active: false })).toStrictEqual([]); + }); + + it('returns last loaded list items', () => { + const listView = { + currentListResourceState: createListComplexLoadingResourceState( + createDefaultPaginationInfo(), + 200 + ), + currentPaginationInfo: createDefaultPaginationInfo(), + }; + + expect(getListItems({ listView, active: false })).toStrictEqual( + createSampleTrustedApps(createDefaultPaginationInfo()) + ); + }); + }); + + describe('getListTotalItemsCount()', () => { + it('returns 0 when no valid data loaded', () => { + expect(getListTotalItemsCount({ listView: createDefaultListView(), active: false })).toBe(0); + }); + + it('returns last loaded total items count', () => { + const listView = { + currentListResourceState: createListComplexLoadingResourceState( + createDefaultPaginationInfo(), + 200 + ), + currentPaginationInfo: createDefaultPaginationInfo(), + }; + + expect(getListTotalItemsCount({ listView, active: false })).toBe(200); + }); + }); + + describe('getListCurrentPageIndex()', () => { + it('returns page index', () => { + expect(getListCurrentPageIndex({ listView: createDefaultListView(), active: false })).toBe(0); + }); + }); + + describe('getListCurrentPageSize()', () => { + it('returns page index', () => { + expect(getListCurrentPageSize({ listView: createDefaultListView(), active: false })).toBe(20); + }); + }); + + describe('getListErrorMessage()', () => { + it('returns undefined when not in failed state', () => { + const listView = { + currentListResourceState: createListComplexLoadingResourceState( + createDefaultPaginationInfo(), + 200 + ), + currentPaginationInfo: createDefaultPaginationInfo(), + }; + + expect(getListErrorMessage({ listView, active: false })).toBeUndefined(); + }); + + it('returns message when not in failed state', () => { + const listView = { + currentListResourceState: createListFailedResourceState('Internal Server Error'), + currentPaginationInfo: createDefaultPaginationInfo(), + }; + + expect(getListErrorMessage({ listView, active: false })).toBe('Internal Server Error'); + }); + }); + + describe('isListLoading()', () => { + it('returns false when no loading is happening', () => { + expect(isListLoading({ listView: createDefaultListView(), active: false })).toBe(false); + }); + + it('returns true when loading is in progress', () => { + const listView = { + currentListResourceState: createListComplexLoadingResourceState( + createDefaultPaginationInfo(), + 200 + ), + currentPaginationInfo: createDefaultPaginationInfo(), + }; + + expect(isListLoading({ listView, active: false })).toBe(true); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/selectors.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/selectors.ts new file mode 100644 index 0000000000000..6fde779ac1cce --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/store/selectors.ts @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { Immutable, TrustedApp } from '../../../../../common/endpoint/types'; + +import { + AsyncResourceState, + getCurrentResourceError, + getLastLoadedResourceState, + isLoadingResourceState, + isOutdatedResourceState, + LoadedResourceState, + PaginationInfo, + TrustedAppsListData, + TrustedAppsListPageState, +} from '../state'; + +const pageInfosEqual = (pageInfo1: PaginationInfo, pageInfo2: PaginationInfo): boolean => + pageInfo1.index === pageInfo2.index && pageInfo1.size === pageInfo2.size; + +export const needsRefreshOfListData = (state: Immutable): boolean => { + const currentPageInfo = state.listView.currentPaginationInfo; + const currentPage = state.listView.currentListResourceState; + + return ( + state.active && + isOutdatedResourceState(currentPage, (data) => + pageInfosEqual(currentPageInfo, data.paginationInfo) + ) + ); +}; + +export const getCurrentListResourceState = ( + state: Immutable +): Immutable> | undefined => { + return state.listView.currentListResourceState; +}; + +export const getLastLoadedListResourceState = ( + state: Immutable +): Immutable> | undefined => { + return getLastLoadedResourceState(state.listView.currentListResourceState); +}; + +export const getListItems = ( + state: Immutable +): Immutable => { + return getLastLoadedResourceState(state.listView.currentListResourceState)?.data.items || []; +}; + +export const getListCurrentPageIndex = (state: Immutable): number => { + return state.listView.currentPaginationInfo.index; +}; + +export const getListCurrentPageSize = (state: Immutable): number => { + return state.listView.currentPaginationInfo.size; +}; + +export const getListTotalItemsCount = (state: Immutable): number => { + return ( + getLastLoadedResourceState(state.listView.currentListResourceState)?.data.totalItemsCount || 0 + ); +}; + +export const getListErrorMessage = ( + state: Immutable +): string | undefined => { + return getCurrentResourceError(state.listView.currentListResourceState)?.message; +}; + +export const isListLoading = (state: Immutable): boolean => { + return isLoadingResourceState(state.listView.currentListResourceState); +}; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/test_utils/index.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/test_utils/index.ts new file mode 100644 index 0000000000000..fab059a422a2a --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/test_utils/index.ts @@ -0,0 +1,135 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { ServerApiError } from '../../../../common/types'; +import { TrustedApp } from '../../../../../common/endpoint/types'; +import { RoutingAction } from '../../../../common/store/routing'; + +import { + AsyncResourceState, + FailedResourceState, + LoadedResourceState, + LoadingResourceState, + PaginationInfo, + StaleResourceState, + TrustedAppsListData, + TrustedAppsListPageState, + UninitialisedResourceState, +} from '../state'; + +import { TrustedAppsListResourceStateChanged } from '../store/action'; + +const OS_LIST: Array = ['windows', 'macos', 'linux']; + +export const createSampleTrustedApps = (paginationInfo: PaginationInfo): TrustedApp[] => { + return [...new Array(paginationInfo.size).keys()].map((i) => ({ + id: String(paginationInfo.index + i), + name: `trusted app ${paginationInfo.index + i}`, + description: `Trusted App ${paginationInfo.index + i}`, + created_at: '1 minute ago', + created_by: 'someone', + os: OS_LIST[i % 3], + entries: [], + })); +}; + +export const createTrustedAppsListData = ( + paginationInfo: PaginationInfo, + totalItemsCount: number +) => ({ + items: createSampleTrustedApps(paginationInfo), + totalItemsCount, + paginationInfo, +}); + +export const createServerApiError = (message: string) => ({ + statusCode: 500, + error: 'Internal Server Error', + message, +}); + +export const createUninitialisedResourceState = (): UninitialisedResourceState => ({ + type: 'UninitialisedResourceState', +}); + +export const createListLoadedResourceState = ( + paginationInfo: PaginationInfo, + totalItemsCount: number +): LoadedResourceState => ({ + type: 'LoadedResourceState', + data: createTrustedAppsListData(paginationInfo, totalItemsCount), +}); + +export const createListFailedResourceState = ( + message: string, + lastLoadedState?: LoadedResourceState +): FailedResourceState => ({ + type: 'FailedResourceState', + error: createServerApiError(message), + lastLoadedState, +}); + +export const createListLoadingResourceState = ( + previousState: StaleResourceState = createUninitialisedResourceState() +): LoadingResourceState => ({ + type: 'LoadingResourceState', + previousState, +}); + +export const createListComplexLoadingResourceState = ( + paginationInfo: PaginationInfo, + totalItemsCount: number +): LoadingResourceState => + createListLoadingResourceState( + createListFailedResourceState( + 'Internal Server Error', + createListLoadedResourceState(paginationInfo, totalItemsCount) + ) + ); + +export const createDefaultPaginationInfo = () => ({ index: 0, size: 20 }); + +export const createDefaultListView = () => ({ + currentListResourceState: createUninitialisedResourceState(), + currentPaginationInfo: createDefaultPaginationInfo(), +}); + +export const createLoadingListViewWithPagination = ( + currentPaginationInfo: PaginationInfo, + previousState: StaleResourceState = createUninitialisedResourceState() +): TrustedAppsListPageState['listView'] => ({ + currentListResourceState: { type: 'LoadingResourceState', previousState }, + currentPaginationInfo, +}); + +export const createLoadedListViewWithPagination = ( + paginationInfo: PaginationInfo = createDefaultPaginationInfo(), + currentPaginationInfo: PaginationInfo = createDefaultPaginationInfo(), + totalItemsCount: number = 200 +): TrustedAppsListPageState['listView'] => ({ + currentListResourceState: createListLoadedResourceState(paginationInfo, totalItemsCount), + currentPaginationInfo, +}); + +export const createFailedListViewWithPagination = ( + currentPaginationInfo: PaginationInfo, + error: ServerApiError, + lastLoadedState?: LoadedResourceState +): TrustedAppsListPageState['listView'] => ({ + currentListResourceState: { type: 'FailedResourceState', error, lastLoadedState }, + currentPaginationInfo, +}); + +export const createUserChangedUrlAction = (path: string, search: string = ''): RoutingAction => { + return { type: 'userChangedUrl', payload: { pathname: path, search, hash: '' } }; +}; + +export const createTrustedAppsListResourceStateChangedAction = ( + newState: AsyncResourceState +): TrustedAppsListResourceStateChanged => ({ + type: 'trustedAppsListResourceStateChanged', + payload: { newState }, +}); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_list.test.tsx.snap b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_list.test.tsx.snap new file mode 100644 index 0000000000000..e0f846f5950f7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_list.test.tsx.snap @@ -0,0 +1,5530 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`TrustedAppsList renders correctly initially 1`] = ` +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + +
+
+
+ + Name + +
+
+
+ + OS + +
+
+
+ + Date Created + +
+
+
+ + Created By + +
+
+
+ + No items found + +
+
+
+
+
+`; + +exports[`TrustedAppsList renders correctly when failed loading data for the first time 1`] = ` +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + +
+
+
+ + Name + +
+
+
+ + OS + +
+
+
+ + Date Created + +
+
+
+ + Created By + +
+
+
+ +
+ + Intenal Server Error + +
+
+
+
+
+`; + +exports[`TrustedAppsList renders correctly when failed loading data for the second time 1`] = ` +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + +
+
+
+ + Name + +
+
+
+ + OS + +
+
+
+ + Date Created + +
+
+
+ + Created By + +
+
+
+ +
+ + Intenal Server Error + +
+
+
+
+
+`; + +exports[`TrustedAppsList renders correctly when loaded data 1`] = ` +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + Name + +
+
+
+ + OS + +
+
+
+ + Date Created + +
+
+
+ + Created By + +
+
+
+ Name +
+
+ + trusted app 0 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 1 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 2 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 3 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 4 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 5 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 6 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 7 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 8 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 9 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 10 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 11 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 12 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 13 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 14 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 15 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 16 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 17 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 18 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 19 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+`; + +exports[`TrustedAppsList renders correctly when loading data for the first time 1`] = ` +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + +
+
+
+ + Name + +
+
+
+ + OS + +
+
+
+ + Date Created + +
+
+
+ + Created By + +
+
+
+ + No items found + +
+
+
+
+
+`; + +exports[`TrustedAppsList renders correctly when loading data for the second time 1`] = ` +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + Name + +
+
+
+ + OS + +
+
+
+ + Date Created + +
+
+
+ + Created By + +
+
+
+ Name +
+
+ + trusted app 0 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 1 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 2 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 3 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 4 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 5 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 6 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 7 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 8 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 9 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 10 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 11 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 12 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 13 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 14 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 15 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 16 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 17 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 18 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 19 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+`; + +exports[`TrustedAppsList renders correctly when new page and page sie set (not loading yet) 1`] = ` +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + Name + +
+
+
+ + OS + +
+
+
+ + Date Created + +
+
+
+ + Created By + +
+
+
+ Name +
+
+ + trusted app 0 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 1 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 2 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 3 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 4 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 5 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 6 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 7 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 8 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 9 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 10 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 11 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 12 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 13 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 14 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 15 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 16 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 17 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 18 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ Name +
+
+ + trusted app 19 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+`; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_page.test.tsx.snap b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_page.test.tsx.snap index 6f074f3809036..d6e9aee108cf6 100644 --- a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_page.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_page.test.tsx.snap @@ -17,5 +17,7 @@ exports[`TrustedAppsPage rendering 1`] = ` values={Object {}} /> } -/> +> + + `; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/hooks.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/hooks.ts new file mode 100644 index 0000000000000..62610610981e0 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/hooks.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useSelector } from 'react-redux'; + +import { State } from '../../../../common/store'; + +import { + MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE as TRUSTED_APPS_NS, + MANAGEMENT_STORE_GLOBAL_NAMESPACE as GLOBAL_NS, +} from '../../../common/constants'; + +import { TrustedAppsListPageState } from '../state'; + +export function useTrustedAppsSelector(selector: (state: TrustedAppsListPageState) => R): R { + return useSelector((state: State) => + selector(state[GLOBAL_NS][TRUSTED_APPS_NS] as TrustedAppsListPageState) + ); +} diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.test.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.test.tsx new file mode 100644 index 0000000000000..0362f5c7a9de6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.test.tsx @@ -0,0 +1,123 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { combineReducers, createStore } from 'redux'; +import { render } from '@testing-library/react'; +import React from 'react'; +import { Provider } from 'react-redux'; + +import { + MANAGEMENT_STORE_GLOBAL_NAMESPACE, + MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE, +} from '../../../common/constants'; +import { trustedAppsPageReducer } from '../store/reducer'; +import { TrustedAppsList } from './trusted_apps_list'; +import { + createListFailedResourceState, + createListLoadedResourceState, + createListLoadingResourceState, + createTrustedAppsListResourceStateChangedAction, + createUserChangedUrlAction, +} from '../test_utils'; + +jest.mock('@elastic/eui/lib/services/accessibility/html_id_generator', () => ({ + htmlIdGenerator: () => () => 'mockId', +})); + +const createStoreSetup = () => { + return createStore( + combineReducers({ + [MANAGEMENT_STORE_GLOBAL_NAMESPACE]: combineReducers({ + [MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE]: trustedAppsPageReducer, + }), + }) + ); +}; + +const renderList = (store: ReturnType) => { + const Wrapper: React.FC = ({ children }) => {children}; + + return render(, { wrapper: Wrapper }); +}; + +describe('TrustedAppsList', () => { + it('renders correctly initially', () => { + expect(renderList(createStoreSetup()).container).toMatchSnapshot(); + }); + + it('renders correctly when loading data for the first time', () => { + const store = createStoreSetup(); + + store.dispatch( + createTrustedAppsListResourceStateChangedAction(createListLoadingResourceState()) + ); + + expect(renderList(store).container).toMatchSnapshot(); + }); + + it('renders correctly when failed loading data for the first time', () => { + const store = createStoreSetup(); + + store.dispatch( + createTrustedAppsListResourceStateChangedAction( + createListFailedResourceState('Intenal Server Error') + ) + ); + + expect(renderList(store).container).toMatchSnapshot(); + }); + + it('renders correctly when loaded data', () => { + const store = createStoreSetup(); + + store.dispatch( + createTrustedAppsListResourceStateChangedAction( + createListLoadedResourceState({ index: 0, size: 20 }, 200) + ) + ); + + expect(renderList(store).container).toMatchSnapshot(); + }); + + it('renders correctly when new page and page sie set (not loading yet)', () => { + const store = createStoreSetup(); + + store.dispatch( + createTrustedAppsListResourceStateChangedAction( + createListLoadedResourceState({ index: 0, size: 20 }, 200) + ) + ); + store.dispatch(createUserChangedUrlAction('/trusted_apps', '?page_index=2&page_size=50')); + + expect(renderList(store).container).toMatchSnapshot(); + }); + + it('renders correctly when loading data for the second time', () => { + const store = createStoreSetup(); + + store.dispatch( + createTrustedAppsListResourceStateChangedAction( + createListLoadingResourceState(createListLoadedResourceState({ index: 0, size: 20 }, 200)) + ) + ); + + expect(renderList(store).container).toMatchSnapshot(); + }); + + it('renders correctly when failed loading data for the second time', () => { + const store = createStoreSetup(); + + store.dispatch( + createTrustedAppsListResourceStateChangedAction( + createListFailedResourceState( + 'Intenal Server Error', + createListLoadedResourceState({ index: 0, size: 20 }, 200) + ) + ) + ); + + expect(renderList(store).container).toMatchSnapshot(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.tsx new file mode 100644 index 0000000000000..a9077dd84913e --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.tsx @@ -0,0 +1,126 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { memo, useCallback, useMemo } from 'react'; +import { useHistory } from 'react-router-dom'; +import { EuiBasicTable, EuiBasicTableColumn } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { Immutable } from '../../../../../common/endpoint/types'; +import { TrustedApp } from '../../../../../common/endpoint/types/trusted_apps'; +import { MANAGEMENT_PAGE_SIZE_OPTIONS } from '../../../common/constants'; +import { getTrustedAppsListPath } from '../../../common/routing'; + +import { + getListCurrentPageIndex, + getListCurrentPageSize, + getListErrorMessage, + getListItems, + getListTotalItemsCount, + isListLoading, +} from '../store/selectors'; + +import { useTrustedAppsSelector } from './hooks'; + +import { FormattedDate } from '../../../../common/components/formatted_date'; + +const OS_TITLES: Readonly<{ [K in TrustedApp['os']]: string }> = { + windows: i18n.translate('xpack.securitySolution.trustedapps.os.windows', { + defaultMessage: 'Windows', + }), + macos: i18n.translate('xpack.securitySolution.trustedapps.os.macos', { + defaultMessage: 'Mac OS', + }), + linux: i18n.translate('xpack.securitySolution.trustedapps.os.linux', { + defaultMessage: 'Linux', + }), +}; + +const COLUMN_TITLES: Readonly<{ [K in keyof Omit]: string }> = { + name: i18n.translate('xpack.securitySolution.trustedapps.list.columns.name', { + defaultMessage: 'Name', + }), + os: i18n.translate('xpack.securitySolution.trustedapps.list.columns.os', { + defaultMessage: 'OS', + }), + created_at: i18n.translate('xpack.securitySolution.trustedapps.list.columns.createdAt', { + defaultMessage: 'Date Created', + }), + created_by: i18n.translate('xpack.securitySolution.trustedapps.list.columns.createdBy', { + defaultMessage: 'Created By', + }), +}; + +const getColumnDefinitions = (): Array>> => [ + { + field: 'name', + name: COLUMN_TITLES.name, + }, + { + field: 'os', + name: COLUMN_TITLES.os, + render(value: TrustedApp['os'], record: Immutable) { + return OS_TITLES[value]; + }, + }, + { + field: 'created_at', + name: COLUMN_TITLES.created_at, + render(value: TrustedApp['created_at'], record: Immutable) { + return ( + + ); + }, + }, + { + field: 'created_by', + name: COLUMN_TITLES.created_by, + }, +]; + +export const TrustedAppsList = memo(() => { + const pageIndex = useTrustedAppsSelector(getListCurrentPageIndex); + const pageSize = useTrustedAppsSelector(getListCurrentPageSize); + const totalItemCount = useTrustedAppsSelector(getListTotalItemsCount); + const listItems = useTrustedAppsSelector(getListItems); + const history = useHistory(); + + return ( + [...listItems], [listItems])} + error={useTrustedAppsSelector(getListErrorMessage)} + loading={useTrustedAppsSelector(isListLoading)} + pagination={useMemo( + () => ({ + pageIndex, + pageSize, + totalItemCount, + hidePerPageOptions: false, + pageSizeOptions: [...MANAGEMENT_PAGE_SIZE_OPTIONS], + }), + [pageIndex, pageSize, totalItemCount] + )} + onChange={useCallback( + ({ page }: { page: { index: number; size: number } }) => { + history.push( + getTrustedAppsListPath({ + page_index: page.index, + page_size: page.size, + }) + ); + }, + [history] + )} + /> + ); +}); + +TrustedAppsList.displayName = 'TrustedAppsList'; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_page.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_page.tsx index 7045fa49ffad3..c0d3b9cd699de 100644 --- a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_page.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_page.tsx @@ -3,11 +3,12 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import React from 'react'; +import React, { memo } from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; import { AdministrationListPage } from '../../../components/administration_list_page'; +import { TrustedAppsList } from './trusted_apps_list'; -export function TrustedAppsPage() { +export const TrustedAppsPage = memo(() => { return ( } - /> + > + + ); -} +}); + +TrustedAppsPage.displayName = 'TrustedAppsPage'; diff --git a/x-pack/plugins/security_solution/public/management/store/middleware.ts b/x-pack/plugins/security_solution/public/management/store/middleware.ts index c7a7d2cad0623..77d02262e93b7 100644 --- a/x-pack/plugins/security_solution/public/management/store/middleware.ts +++ b/x-pack/plugins/security_solution/public/management/store/middleware.ts @@ -9,22 +9,22 @@ import { SecuritySubPluginMiddlewareFactory, State, } from '../../common/store'; -import { policyListMiddlewareFactory } from '../pages/policy/store/policy_list'; -import { policyDetailsMiddlewareFactory } from '../pages/policy/store/policy_details'; import { MANAGEMENT_STORE_ENDPOINTS_NAMESPACE, MANAGEMENT_STORE_GLOBAL_NAMESPACE, MANAGEMENT_STORE_POLICY_DETAILS_NAMESPACE, MANAGEMENT_STORE_POLICY_LIST_NAMESPACE, + MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE, } from '../common/constants'; +import { policyListMiddlewareFactory } from '../pages/policy/store/policy_list'; +import { policyDetailsMiddlewareFactory } from '../pages/policy/store/policy_details'; import { endpointMiddlewareFactory } from '../pages/endpoint_hosts/store/middleware'; +import { trustedAppsPageMiddlewareFactory } from '../pages/trusted_apps/store/middleware'; + +type ManagementSubStateKey = keyof State[typeof MANAGEMENT_STORE_GLOBAL_NAMESPACE]; -const policyListSelector = (state: State) => - state[MANAGEMENT_STORE_GLOBAL_NAMESPACE][MANAGEMENT_STORE_POLICY_LIST_NAMESPACE]; -const policyDetailsSelector = (state: State) => - state[MANAGEMENT_STORE_GLOBAL_NAMESPACE][MANAGEMENT_STORE_POLICY_DETAILS_NAMESPACE]; -const endpointsSelector = (state: State) => - state[MANAGEMENT_STORE_GLOBAL_NAMESPACE][MANAGEMENT_STORE_ENDPOINTS_NAMESPACE]; +const createSubStateSelector = (namespace: K) => (state: State) => + state[MANAGEMENT_STORE_GLOBAL_NAMESPACE][namespace]; export const managementMiddlewareFactory: SecuritySubPluginMiddlewareFactory = ( coreStart, @@ -32,13 +32,20 @@ export const managementMiddlewareFactory: SecuritySubPluginMiddlewareFactory = ( ) => { return [ substateMiddlewareFactory( - policyListSelector, + createSubStateSelector(MANAGEMENT_STORE_POLICY_LIST_NAMESPACE), policyListMiddlewareFactory(coreStart, depsStart) ), substateMiddlewareFactory( - policyDetailsSelector, + createSubStateSelector(MANAGEMENT_STORE_POLICY_DETAILS_NAMESPACE), policyDetailsMiddlewareFactory(coreStart, depsStart) ), - substateMiddlewareFactory(endpointsSelector, endpointMiddlewareFactory(coreStart, depsStart)), + substateMiddlewareFactory( + createSubStateSelector(MANAGEMENT_STORE_ENDPOINTS_NAMESPACE), + endpointMiddlewareFactory(coreStart, depsStart) + ), + substateMiddlewareFactory( + createSubStateSelector(MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE), + trustedAppsPageMiddlewareFactory(coreStart, depsStart) + ), ]; }; diff --git a/x-pack/plugins/security_solution/public/management/store/reducer.ts b/x-pack/plugins/security_solution/public/management/store/reducer.ts index eafd69c875ff1..29eb2d289ae1c 100644 --- a/x-pack/plugins/security_solution/public/management/store/reducer.ts +++ b/x-pack/plugins/security_solution/public/management/store/reducer.ts @@ -17,6 +17,7 @@ import { MANAGEMENT_STORE_ENDPOINTS_NAMESPACE, MANAGEMENT_STORE_POLICY_DETAILS_NAMESPACE, MANAGEMENT_STORE_POLICY_LIST_NAMESPACE, + MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE, } from '../common/constants'; import { ImmutableCombineReducers } from '../../common/store'; import { Immutable } from '../../../common/endpoint/types'; @@ -25,6 +26,10 @@ import { endpointListReducer, initialEndpointListState, } from '../pages/endpoint_hosts/store/reducer'; +import { + initialTrustedAppsPageState, + trustedAppsPageReducer, +} from '../pages/trusted_apps/store/reducer'; const immutableCombineReducers: ImmutableCombineReducers = combineReducers; @@ -35,6 +40,7 @@ export const mockManagementState: Immutable = { [MANAGEMENT_STORE_POLICY_LIST_NAMESPACE]: initialPolicyListState(), [MANAGEMENT_STORE_POLICY_DETAILS_NAMESPACE]: initialPolicyDetailsState(), [MANAGEMENT_STORE_ENDPOINTS_NAMESPACE]: initialEndpointListState, + [MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE]: initialTrustedAppsPageState, }; /** @@ -44,4 +50,5 @@ export const managementReducer = immutableCombineReducers({ [MANAGEMENT_STORE_POLICY_LIST_NAMESPACE]: policyListReducer, [MANAGEMENT_STORE_POLICY_DETAILS_NAMESPACE]: policyDetailsReducer, [MANAGEMENT_STORE_ENDPOINTS_NAMESPACE]: endpointListReducer, + [MANAGEMENT_STORE_TRUSTED_APPS_NAMESPACE]: trustedAppsPageReducer, }); diff --git a/x-pack/plugins/security_solution/public/management/types.ts b/x-pack/plugins/security_solution/public/management/types.ts index 21214241d1981..8b53f4c1d8525 100644 --- a/x-pack/plugins/security_solution/public/management/types.ts +++ b/x-pack/plugins/security_solution/public/management/types.ts @@ -8,6 +8,7 @@ import { CombinedState } from 'redux'; import { SecurityPageName } from '../app/types'; import { PolicyListState, PolicyDetailsState } from './pages/policy/types'; import { EndpointState } from './pages/endpoint_hosts/types'; +import { TrustedAppsListPageState } from './pages/trusted_apps/state/trusted_apps_list_page_state'; /** * The type for the management store global namespace. Used mostly internally to reference @@ -19,6 +20,7 @@ export type ManagementState = CombinedState<{ policyList: PolicyListState; policyDetails: PolicyDetailsState; endpoints: EndpointState; + trustedApps: TrustedAppsListPageState; }>; /** From 2a451c9c3fdc7267bc43055d88de76eb58600086 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Wed, 9 Sep 2020 11:55:05 +0200 Subject: [PATCH 51/58] [APM] Script for creating functional test archive (#76926) * [APM] Script for creating functional test archive * Lock down variables; add documentation * Update tests --- .../updating_functional_tests_archives.md | 8 + .../aggregate-latency-metrics/index.ts | 48 +- .../create-functional-tests-archive.js | 18 + .../create-functional-tests-archive/index.ts | 179 + .../scripts/shared/create-or-update-index.ts | 4 +- .../apm/scripts/shared/get_es_client.ts | 42 + .../apm/scripts/shared/parse_index_url.ts | 17 + .../basic/archives_metadata.ts | 12 + .../es_archiver/apm_8.0.0/data.json.gz | Bin 0 -> 1268812 bytes .../es_archiver/apm_8.0.0/mappings.json | 63355 ++++++++++++++++ .../basic/tests/services/agent_name.ts | 11 +- .../test/apm_api_integration/common/config.ts | 2 +- .../trial/archives_metadata.ts | 12 + .../es_archiver/apm_8.0.0/data.json.gz | Bin 0 -> 1268812 bytes .../es_archiver/apm_8.0.0/mappings.json | 63355 ++++++++++++++++ 15 files changed, 127018 insertions(+), 45 deletions(-) create mode 100644 x-pack/plugins/apm/dev_docs/updating_functional_tests_archives.md create mode 100644 x-pack/plugins/apm/scripts/create-functional-tests-archive.js create mode 100644 x-pack/plugins/apm/scripts/create-functional-tests-archive/index.ts create mode 100644 x-pack/plugins/apm/scripts/shared/get_es_client.ts create mode 100644 x-pack/plugins/apm/scripts/shared/parse_index_url.ts create mode 100644 x-pack/test/apm_api_integration/basic/archives_metadata.ts create mode 100644 x-pack/test/apm_api_integration/basic/fixtures/es_archiver/apm_8.0.0/data.json.gz create mode 100644 x-pack/test/apm_api_integration/basic/fixtures/es_archiver/apm_8.0.0/mappings.json create mode 100644 x-pack/test/apm_api_integration/trial/archives_metadata.ts create mode 100644 x-pack/test/apm_api_integration/trial/fixtures/es_archiver/apm_8.0.0/data.json.gz create mode 100644 x-pack/test/apm_api_integration/trial/fixtures/es_archiver/apm_8.0.0/mappings.json diff --git a/x-pack/plugins/apm/dev_docs/updating_functional_tests_archives.md b/x-pack/plugins/apm/dev_docs/updating_functional_tests_archives.md new file mode 100644 index 0000000000000..467090fb3c91b --- /dev/null +++ b/x-pack/plugins/apm/dev_docs/updating_functional_tests_archives.md @@ -0,0 +1,8 @@ +### Updating functional tests archives + +Some of our API tests use an archive generated by the [`esarchiver`](https://www.elastic.co/guide/en/kibana/current/development-functional-tests.html) script. Updating the main archive (`apm_8.0.0`) is a scripted process, where a 30m snapshot is downloaded from a cluster running the [APM Integration Testing server](https://github.com/elastic/apm-integration-testing). The script will copy the generated archives into the `fixtures/es_archiver` folders of our test suites (currently `basic` and `trial`). It will also generate a file that contains metadata about the archive, that can be imported to get the time range of the snapshot. + +Usage: +`node x-pack/plugins/apm/scripts/create-functional-tests-archive --es-url=https://admin:changeme@localhost:9200 --kibana-url=https://localhost:5601` + + diff --git a/x-pack/plugins/apm/scripts/aggregate-latency-metrics/index.ts b/x-pack/plugins/apm/scripts/aggregate-latency-metrics/index.ts index c3cf363cbec05..ef85112918712 100644 --- a/x-pack/plugins/apm/scripts/aggregate-latency-metrics/index.ts +++ b/x-pack/plugins/apm/scripts/aggregate-latency-metrics/index.ts @@ -4,15 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -import { Client } from '@elastic/elasticsearch'; import { argv } from 'yargs'; import pLimit from 'p-limit'; import pRetry from 'p-retry'; -import { parse, format } from 'url'; import { set } from '@elastic/safer-lodash-set'; import { uniq, without, merge, flatten } from 'lodash'; import * as histogram from 'hdr-histogram-js'; -import { ESSearchResponse } from '../../typings/elasticsearch'; import { HOST_NAME, SERVICE_NAME, @@ -28,6 +25,8 @@ import { } from '../../common/elasticsearch_fieldnames'; import { stampLogger } from '../shared/stamp-logger'; import { createOrUpdateIndex } from '../shared/create-or-update-index'; +import { parseIndexUrl } from '../shared/parse_index_url'; +import { ESClient, getEsClient } from '../shared/get_es_client'; // This script will try to estimate how many latency metric documents // will be created based on the available transaction documents. @@ -125,41 +124,18 @@ export async function aggregateLatencyMetrics() { const source = String(argv.source ?? ''); const dest = String(argv.dest ?? ''); - function getClientOptionsFromIndexUrl( - url: string - ): { node: string; index: string } { - const parsed = parse(url); - const { pathname, ...rest } = parsed; + const sourceOptions = parseIndexUrl(source); - return { - node: format(rest), - index: pathname!.replace('/', ''), - }; - } - - const sourceOptions = getClientOptionsFromIndexUrl(source); - - const sourceClient = new Client({ - node: sourceOptions.node, - ssl: { - rejectUnauthorized: false, - }, - requestTimeout: 120000, - }); + const sourceClient = getEsClient({ node: sourceOptions.node }); - let destClient: Client | undefined; + let destClient: ESClient | undefined; let destOptions: { node: string; index: string } | undefined; const uploadMetrics = !!dest; if (uploadMetrics) { - destOptions = getClientOptionsFromIndexUrl(dest); - destClient = new Client({ - node: destOptions.node, - ssl: { - rejectUnauthorized: false, - }, - }); + destOptions = parseIndexUrl(dest); + destClient = getEsClient({ node: destOptions.node }); const mappings = ( await sourceClient.indices.getMapping({ @@ -298,10 +274,9 @@ export async function aggregateLatencyMetrics() { }, }; - const response = (await sourceClient.search(params)) - .body as ESSearchResponse; + const response = await sourceClient.search(params); - const { aggregations } = response; + const { aggregations } = response.body; if (!aggregations) { return buckets; @@ -333,10 +308,9 @@ export async function aggregateLatencyMetrics() { }, }; - const response = (await sourceClient.search(params)) - .body as ESSearchResponse; + const response = await sourceClient.search(params); - return response.hits.total.value; + return response.body.hits.total.value; } const [buckets, numberOfTransactionDocuments] = await Promise.all([ diff --git a/x-pack/plugins/apm/scripts/create-functional-tests-archive.js b/x-pack/plugins/apm/scripts/create-functional-tests-archive.js new file mode 100644 index 0000000000000..6b3473dc2ac0a --- /dev/null +++ b/x-pack/plugins/apm/scripts/create-functional-tests-archive.js @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +// compile typescript on the fly +// eslint-disable-next-line import/no-extraneous-dependencies +require('@babel/register')({ + extensions: ['.js', '.ts'], + plugins: ['@babel/plugin-proposal-optional-chaining'], + presets: [ + '@babel/typescript', + ['@babel/preset-env', { targets: { node: 'current' } }], + ], +}); + +require('./create-functional-tests-archive/index.ts'); diff --git a/x-pack/plugins/apm/scripts/create-functional-tests-archive/index.ts b/x-pack/plugins/apm/scripts/create-functional-tests-archive/index.ts new file mode 100644 index 0000000000000..cbd63262bd08d --- /dev/null +++ b/x-pack/plugins/apm/scripts/create-functional-tests-archive/index.ts @@ -0,0 +1,179 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { argv } from 'yargs'; +import { execSync } from 'child_process'; +import moment from 'moment'; +import path from 'path'; +import fs from 'fs'; +import { stampLogger } from '../shared/stamp-logger'; + +async function run() { + stampLogger(); + + const archiveName = 'apm_8.0.0'; + + // include important APM data and ML data + const indices = + 'apm-*-transaction,apm-*-span,apm-*-error,apm-*-metric,.ml-anomalies*,.ml-config'; + + const esUrl = argv['es-url'] as string | undefined; + + if (!esUrl) { + throw new Error('--es-url is not set'); + } + const kibanaUrl = argv['kibana-url'] as string | undefined; + + if (!kibanaUrl) { + throw new Error('--kibana-url is not set'); + } + const gte = moment().subtract(1, 'hour').toISOString(); + const lt = moment(gte).add(30, 'minutes').toISOString(); + + // eslint-disable-next-line no-console + console.log(`Archiving from ${gte} to ${lt}...`); + + // APM data uses '@timestamp' (ECS), ML data uses 'timestamp' + + const rangeQueries = [ + { + range: { + '@timestamp': { + gte, + lt, + }, + }, + }, + { + range: { + timestamp: { + gte, + lt, + }, + }, + }, + ]; + + // some of the data is timeless/content + const query = { + bool: { + should: [ + ...rangeQueries, + { + bool: { + must_not: [ + { + exists: { + field: '@timestamp', + }, + }, + { + exists: { + field: 'timestamp', + }, + }, + ], + }, + }, + ], + minimum_should_match: 1, + }, + }; + + const archivesDir = path.join(__dirname, '.archives'); + const root = path.join(__dirname, '../../../../..'); + + // create the archive + + execSync( + `node scripts/es_archiver save ${archiveName} ${indices} --dir=${archivesDir} --kibana-url=${kibanaUrl} --es-url=${esUrl} --query='${JSON.stringify( + query + )}'`, + { + cwd: root, + stdio: 'inherit', + } + ); + + const targetDirs = ['trial', 'basic']; + + // copy the archives to the test fixtures + + await Promise.all( + targetDirs.map(async (target) => { + const targetPath = path.resolve( + __dirname, + '../../../../test/apm_api_integration/', + target + ); + const targetArchivesPath = path.resolve( + targetPath, + 'fixtures/es_archiver', + archiveName + ); + + if (!fs.existsSync(targetArchivesPath)) { + fs.mkdirSync(targetArchivesPath); + } + + fs.copyFileSync( + path.join(archivesDir, archiveName, 'data.json.gz'), + path.join(targetArchivesPath, 'data.json.gz') + ); + fs.copyFileSync( + path.join(archivesDir, archiveName, 'mappings.json'), + path.join(targetArchivesPath, 'mappings.json') + ); + + const currentConfig = {}; + + // get the current metadata and extend/override metadata for the new archive + const configFilePath = path.join(targetPath, 'archives_metadata.ts'); + + try { + Object.assign(currentConfig, (await import(configFilePath)).default); + } catch (error) { + // do nothing + } + + const newConfig = { + ...currentConfig, + [archiveName]: { + start: gte, + end: lt, + }, + }; + + fs.writeFileSync( + configFilePath, + `export default ${JSON.stringify(newConfig, null, 2)}`, + { encoding: 'utf-8' } + ); + }) + ); + + fs.unlinkSync(path.join(archivesDir, archiveName, 'data.json.gz')); + fs.unlinkSync(path.join(archivesDir, archiveName, 'mappings.json')); + fs.rmdirSync(path.join(archivesDir, archiveName)); + fs.rmdirSync(archivesDir); + + // run ESLint on the generated metadata files + + execSync('node scripts/eslint **/*/archives_metadata.ts --fix', { + cwd: root, + stdio: 'inherit', + }); +} + +run() + .then(() => { + process.exit(0); + }) + .catch((err) => { + // eslint-disable-next-line no-console + console.log(err); + process.exit(1); + }); diff --git a/x-pack/plugins/apm/scripts/shared/create-or-update-index.ts b/x-pack/plugins/apm/scripts/shared/create-or-update-index.ts index 6d44e12fb00a2..01fa5b0509bcd 100644 --- a/x-pack/plugins/apm/scripts/shared/create-or-update-index.ts +++ b/x-pack/plugins/apm/scripts/shared/create-or-update-index.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { Client } from '@elastic/elasticsearch'; +import { ESClient } from './get_es_client'; export async function createOrUpdateIndex({ client, @@ -12,7 +12,7 @@ export async function createOrUpdateIndex({ indexName, template, }: { - client: Client; + client: ESClient; clear: boolean; indexName: string; template: any; diff --git a/x-pack/plugins/apm/scripts/shared/get_es_client.ts b/x-pack/plugins/apm/scripts/shared/get_es_client.ts new file mode 100644 index 0000000000000..86dfd92190fdf --- /dev/null +++ b/x-pack/plugins/apm/scripts/shared/get_es_client.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { Client } from '@elastic/elasticsearch'; +import { ApiKeyAuth, BasicAuth } from '@elastic/elasticsearch/lib/pool'; +import { ESSearchResponse, ESSearchRequest } from '../../typings/elasticsearch'; + +export type ESClient = ReturnType; + +export function getEsClient({ + node, + auth, +}: { + node: string; + auth?: BasicAuth | ApiKeyAuth; +}) { + const client = new Client({ + node, + ssl: { + rejectUnauthorized: false, + }, + requestTimeout: 120000, + auth, + }); + + return { + ...client, + async search( + request: TSearchRequest + ) { + const response = await client.search(request as any); + + return { + ...response, + body: response.body as ESSearchResponse, + }; + }, + }; +} diff --git a/x-pack/plugins/apm/scripts/shared/parse_index_url.ts b/x-pack/plugins/apm/scripts/shared/parse_index_url.ts new file mode 100644 index 0000000000000..190f7fda396bd --- /dev/null +++ b/x-pack/plugins/apm/scripts/shared/parse_index_url.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { parse, format } from 'url'; + +export function parseIndexUrl(url: string): { node: string; index: string } { + const parsed = parse(url); + const { pathname, ...rest } = parsed; + + return { + node: format(rest), + index: pathname!.replace('/', ''), + }; +} diff --git a/x-pack/test/apm_api_integration/basic/archives_metadata.ts b/x-pack/test/apm_api_integration/basic/archives_metadata.ts new file mode 100644 index 0000000000000..f3228176db8d6 --- /dev/null +++ b/x-pack/test/apm_api_integration/basic/archives_metadata.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export default { + 'apm_8.0.0': { + start: '2020-09-09T06:11:22.998Z', + end: '2020-09-09T06:41:22.998Z', + }, +}; diff --git a/x-pack/test/apm_api_integration/basic/fixtures/es_archiver/apm_8.0.0/data.json.gz b/x-pack/test/apm_api_integration/basic/fixtures/es_archiver/apm_8.0.0/data.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..27a90e49cca427554ba64bc8c9b375c8757709f0 GIT binary patch literal 1268812 zcmZs?b9iOJvo1WbZQHgz!Hy=$#I|kQ$&T%bZQI7gwkEcd$(Q+^bI)_neZKuib$4}j z^;*5VR=@Q=YY|03fBW|XMLYL-aavbR_`G_dQ!iJxVZ{)=671aG#2s;GvQ#v00o{2cAp&i>`Q4=A*8P;X#8?i)Vi_@gQG5!lR(p*kx?J5pk(w zDBv9+eq$5Q+tKTx_55(a(tiw_DX}LryU|@iitjot`*e7Rc)Cmf?_(|d;K{qIoh?#* z%eI+A4G|}P-(?JS|EFC4rr0(CnQg2`rW+qp)_ez5kP)wmo&V2z_KFrLbY`D3H>1mL zBqQt!HnTtu!%c*cfnLd=*-iCH$KlJI?#YSP9>KJQMUWn!z)!!ogG4_+FFe80ETmw<9JCFOTLRq>51J^TCR%xo<}AdGpqg-;8^9Cs zmdR}jM)!@QUiVK)wt+U_W++bxD=+FH=m^b~WN|2PjaE$QNZib~rxHhpEqjaJKeVd# zc2B4rOtV0tu^4IPbZe)>LGV3xasKs%>6dzY%gJ$2++#UFw;>fXEr*ldtW7|)7!9!_Ss>ak5I7aNh4H*_A z;7(gvFf}rJE_)B2y2nZ^#;(OlXxcasS4|)>Zjeds%;VfMJVI!uW`pO0=MR%xkig3% zHBGN0_-p=#ehYgO;R+e5Csa(LLBKMx_-Xp`Rc-!&)=kQq@!a@Hbs$)hT4U*|(E-~2 z;KKN4(MIDzB{d;x%p+!`h(DM@fob+jUJOZMWePd#xB5gubz4um>n&uM+{Y~B`)d{}S#qd26dHD<1Gj7Z<>$K9XDx{^foZPJ%w;E?c< zLX+#*6#oX!Jq(_$qw~4-ZsW?9f&&qK5w1Hy1(0%zcXMbcC=$(@t%kE5Q#|MhvLtTp!}-k>?sfa#d5n4;4)6mRpd*sM`RN5N4QG8VrYX+CW;>ti`|!^x zntVe9oe#`S#|fm#%H2OYyBE)(grEgcm3W^a;!~6)q_4yIVFTD(iBL!b?i4;QY07

m&u|X>Lm_g?2O?4TD;vl#RYr+T5 zkV6+Y=^H*)B@5^MX{yDwdfUwfQ2_%<9jNC%>9W86nI$v)b?-WDDC&mV38`D^zb_>g z?0X_w-IM}dgx|kak6j3rvVxxN_6FyNx*_iCcrzsh?F-}bPco?;*RPAm9Z~6Sx5uMw zcr$ehr=qZTNw%WcL`xVEHwF~+z3^ZO9m5<6)nO~TL$b#SBNbW72>0oUdjV;zw7bY1 zxT!y3epL_EJMMQmJ~x5YnUfYY4Tt4vO9*3TAzua2vwb8S~~6jLfbo3LmNxQD2Rk(I7?a*$n3OO)*2M5!zed zb)k=(RU4uqTIRVzn2`NVYohC$uAi||y6$%sqPSmirGIX*$ z>n#wm0TVS_!9J9jR+uX>VE5bI4)?%4GT35a=k+lOLJ!`gn9@gBneRl}Ve1)0A5vAR z>v#}@NhpbY@S(H@Gqj|!s{t-N_;k{G8<2R<1(ZsQ^|Gtn$ZwYvlJeWT+DMaX*7A$Q zoH${OKl9AX_%X%H3OUj7R;u)^5mzy9pse+|YSDC^mWqxZe}p;Dq~CeBd!#^Fw|j$z zPgb}4_2>6?7EIMuDcc4R^uQlY^NV7QB1d;SvHuaiA$OB>VSuAkcdS%z$_L>lQo^*fQ_c(Zgm(oP(w$O&roY#+5}ULuKfPp(d-Oc4SIxh$2!faB0I46 z;ZL*|L6F?1Jz8HQKLsJ=(`x_793POG9QG&GA0N2bZ0p8Qo{@)JM6+0&(_H>f$12hi zWMsYl9}UeScPV~t%P6)bD#I|}w`ZF|e3T@^JMx67?cZX#1(AN3osZQq4|IEOIl@H4 zN~d~Qv|@;g#!)9Xj9Y-apKR<|2yFPN)6ejmF{Y>ny%8s)N;ons`MY1Ws)M;X!eJuB zvlW>(#dRU41sOigu^=utN-HgNb@25~Hp=C=iBiYN-IC`M$()xB(h3cv8?~e9hvb42 zIiXlg^j`DX5E%L`-`0Vffr1>C5BVwJSI5LQMRa1w8dY`Pu5mUcAV-oi+)IWQTo@_ag5DsV2;k>331rkkP$|J99kyr?Y#3=!@D{JFe9?WM?;~N z)b@ms`wGbT5)3d1HBlotTQ&6{yfcEY9Uzh-!g)tw2VcuTTVdZ;3T8OH6?&vdh6dP~ z&~qUs1(-DZCMK2DTlWJX0|sy00KkBg*I#!se_ZWjrX#JQ;ts?;Nz3Y9NX;vT9@P;y z`v)eHwDI*>uo^j4IdLeZ{#XJmJcca)s!$>97ybcSBCdC~uDAOfB?q}0_D&ru^VjlA zP2H)?xWB!&G?nDk5YDI@cDq-8CwE8%mq;DI31JP~XQZs5MtZL2(#yO;kmx0|Z))~U z%GxO%?Qm#WzDnl8*vqeo4C8TAhZvSMcd8@a=bK)NWKGLy2_kLf+cRB|Q9Upg=y)9? z{gt^)1oz%rEtX<_Gs&^H`&F_Y#jGwQHwwnZ(OJYB$;wMo34MK2{E`0IR)-;%a@mHJXwWIP&*{eecPNz%l?pDX*81?p+18?q8S*J(n8twHFOW84d9{c3WgD0AXW3TD`yiW^yJ<%LNY7r zbe=mZz)5`9FLelUHyN~JABPV@+aHPeG(tDGr0XB&&X}IiN|0J;T#&?URVS)yK}B&l zyd)hlKfESoL?&AW>qFiBTP6E}sO_FM(-(#Qyi5oLX{K0S;H*31t@)&vo!diHicNAoJGq#vwPH+`M*2 zLZ7FB9hao4E?s(21>$aN#TupOB>V_<3(4?~{C;51cKwbS3b&GdIqxVtE~cyrb|fT2 zHz;ixIZOSyBJHM$qiX}?f%K?VatBr3ur~K9Sa=U{0H!D;Xbf{wY9d+`op6d?-MHd_ zMTe@S&q+zu!YX*EO3E08^GY-UAHGCI{oSmNOx`90S=}BJ2V|ZG*%`Qe$#blKOm;>R z_nmx~Ad(p=DcNwYi$@5ss$_ffZ1B9vInkrPb-(vF-=FwsPV~g>i93t#CyHBq>@V3x48#3_h&t=3Qf#8 z4J1Z09$|pp)Ndwv11LI8_&u>*Mjab+TXD0U3+`~=>^VeGB}JRApFof2x3QNL!(?8@ zO=T}7rg|+{Rl%IB8n}#WZ61oop>i6dML}^oI#Fdl2dZ6r>%&8pc!(dH{#?-Hd!kYy z6uU~KqTGSIS|HK3D16$k=lcy#U22Lmb5>hJkj=&&*NkuBov<;DhpH^PBoCgxNw4KL znqC@eLa4bpn6UE#6g=nH7~JdcwO;yJj}@&R-?%PE;+tg3&dFiRVnmzXv_11T%9L!c zBDqM{;;q)eTSh|5z4D55Y7Cu-Y9cS}E83iT=NdT#B)lDAz3VEVn&qCStEA1bbj#~} zsrr7bgM#ms%^#K>NfWLXsBoiFT}%NCp1ai!20(bB2RhFSNzM?&)|yE;j+K79J4Qty zr7i4N(@O^_#Kk*HIE>Zhy4jrMvq+CiX&CDcdX;Mhry?3ak>=$c>q1xOdP5i`l9HyC zX@VFA;ySbxrs(3dQfR)utwI1cI1wn@W4f=Za4+6vf?@*x!7=JmGfam z@sIk8b)x-5S~F=}jz=En0S9-Us_I6{Y4+!yE*h>@(3jvhtYD!`9yl_GWlu3lfdShi z`LPgqkjUDYc;@boF|8pQ-LUjBDpidw-&)f|+Pat{F3)B{hP*1vn0r| z)E2PM=}R7FKm5g+2lO=f8u%C3_bSnPSsU*p9LcUpe>}htTECEnemFY z@$QR#0FBB~0(g=nzRMbfa{3iFUTfa97ms%_`;VH})$QIJ?XoR8f|pic^`0T`A2#Eq zmvJgYyRHNWB9sJ2HQ*+*^2yCeK+v{;9V7sV^?r1`to=SWBsr!iLJ7E&JoVP@qj}Nl z&P@6!H(BM}B%f=4$J%4s$$op+k~`jRD9r@_{!)Xcvk(0!%E~>;TLu`z*-lm;5He6= z1Lhs<()p+Dm5MK@?iGvpcLPcODtj>Wd2W|U6*<@>$7?aoX<^TE7A_`tqy;y`-8%nQ ziA4WOyITjPbSZAx6T^zz*GC#9^8&JAf{`kijpd6Qk$br+QiG(rX-ldM)Ho9Ox54kh zGG!!}!>&`~4#zxUSaYx=C>hH%QSR;;F1DGCLh2HoSpCYa-ni9M!Iqj5zSB`|QC6fS zOr+{NwASG0`p{f!-cu0UTKmH#RdyEfKRujN)T;C)}-jIQ3MU;Z-_7bcnMUOl}n6eGXEg>lA{9Rf+h3$7;7=Y%FsH`x6(Wnkr9g?EI2t8cUjfzimuLC)OPnQY91UQ4o@7E7W!9K zx#Ragsz)oWOOr@xr^(#_<(nwmKE@tC-?^?;omIOAsy2J{${Q?T)kcM?a#YG$U zMN%w@>2~=V2bet8H5e9H63U$ZY}{a1$gnw#pn&_GS%MFG%)e`ud5q@)3QW~S)FtAt zdt<|}R4}&+Df2=rG~GY)r)4KvQkiZSuXXiJZy`nrSD`^47kgmj(AqVDQW3u6_)+>! z+7unm8$3!8ch)OR8*RT*SPv%eC5+NQV6L*&4r}8uN)aMTuj;db(eYqPupq-DgFqV- zAd7g|KcEyVMX>=^uS>874J#PW_*+En!@IceT=;Ut2RoOCohTW^+@%x3g0e^yK9^Q# zS(w^5rVFfslYgo9{konrcVm3)i(~sfsXKFysZAJeoP2Yg=tUFKyT)2YfJMli19Pt6 zPN~RPbQZDPLgRYr-^0P1OxVJ-yF?1%sf%k+i;xkxPr;YC2Vl&}DfQgEImQnCuhUCx96w0sSR1?{%0q80suxUyU$4DDB_F)OWEfogG_pci-rDKmcwE z>elTTK|$8U&_+6uZNKHT@oktRVn8H-`7#$gz<%fMn)U>SRzkzBaS7iI-6*!b0VX(C z_m})2#~r4d0JAAEs%f(Xq4Hqb5W>J5+lIl9Is4zR*wEipEogOYoEv*=&II4h`pjc$yt&)$|`om$7C$sJp(N2Ee$rv+{bV^Rsm2+v^fFKOzgeTCfyI zv}lirb`B6MjT3NcnhiE%oI7#^C_s>Yzq*ykjgx&~w1Tv{tvyy#ug#69QNs#isu?lD z5Bm^!QQbk8#>xF|7z6Dunx^u;bttgHvIV~?j-c^GRTMn*@NL`yvVF)XYz66h z$;pWmpag(;A3W3A^tBHL$5w}NMQ_~KFZ@^cu0xi%@son2m(*yiAE-7dPl2oof2vrJ@3^)4}^1v1KQ_ zn^2+eJ26#_9E9H4+WS}B)Ul`pUNh#RoW`E7OIjGXSdkYTDcj=Ha$Q|EMPvs_G*v<0 zRiaFQsJ;!esG@*G;p!)+!dwp`D>@x8iP}9!!fb{Ed3+U z57hreZ-fxVo8ED9Wwf0}ll6lQ(&_kpq9$)eW<@6~5D0`TYnuBy8!0{hku>p)wSu;~ zPvaznSzj!T!7<*xY{*c-lt*yykD23G^vfn!S?FS5gZ45bm=?rvrrJkgTG0ha7-cYi zzeo_3G5QlSfjvX(@{;BybCI=(MDRbB#zXWg&~F8xWhRS;c)3Atm}=Wlq=W95cA%P1 zdJ(S8>Te(3K#C)sn^vqaYHl%7ls`nub!DuH{W(;7-<3R#YV#C8&cqh1L@wB#-}&7? zPi#OT?LwW7y3jSXOsz7x(xg0Via=*1_0cqB>h0s!jf4-qR373nRb~{^WQyxfDCS#p zNV%u4)5*nPz6G}WyyZw%gPT4%tTVauLk{SIAjY~N^8wC3EVKFYPq`3|{HBwa$u>M` zQ8qF(sOr}Kku-xSwg8^7N=MN}6;UTlm}`xu2VuQSOfAEB_w!^T7ir$m3H?^AAR{yE zGxj?vhHxDEzb{2@szE4J|X4TCYzUe4h>MZeOmy_zH0IetXWXN@+zY_mTB zcWflko8F~NGY;5bVLKhWS$GP~>TvF=f@Biwo`&hcbfJA56Cpz6msOUdET`vs(xzf=g0NdS3bfQ1gHJc!y3Fj47aT7b+?>qeT)Kt41 zyV9>KP-;d_9qO#a!TFuM+x=>*yn=c&1`yMFhg)DULyw6FI7g_;lHgXeH|jds2&53; zPoyGwPK*!TMhx9Ma@KOb;#wTBsgAq=sfgEeAE+ zbz6b(&BKni9X}fi^C1n)YukmiqDf+38O_=)zOsDcg31m&bAFy0SYPBCJOKO&8*1Fq zxaO8E0}aA4m_vG(F4DGP^R%&dlRqF=S1tQW!I&-ZWut+@=$*rhHmE@#_*5IW2h4E_ zn%rsDebJ5Z^qkMXaJ}?BzH+b+N@lJs$(?+FefEbTvFxKhOJkgD!0}-349I$AS2+d- zrN4Z<#GOqYj$U@DaP3tH6qby~_jkuhb_%+oLN6!Z1joxZg}S&&9#zhJ5K()_m+Su* z>xL4$pCnEKnan&KwIMoNw9YsM^^Dw(@y~aBKOCuI>^0+e z6bA|JC+%0VHKMBo|9Q;jQKl2Ti9(;)Nf?M@HAtqh%R%Po0oJ89T@9DDtW0}8 zNP%Lo3Tu_rj68+|T~3mqfX~HxhA5=z2!Ni>1>J{b)HVhl%+aM<;%Rl$@J!hdK`H>USrW)UfxPo|JbC5By=D$b=WkisAua2sx^@p)A#y&j*Z{Oe)&m5X1 zyOwICFPa8&2`Cc+;d-r!d(Iwe6{W=UJyZDkZQ7qtV&EM z+sHlDv#7*t)@oXm6kkjeiEQAf<=Ndis&m~yJs4z8dTJ-8i#nctTHBp2nP8Et+>HZu zWT(5*8n&pqwoZZ)wF&o#j|2uE890t>ph39o^$N2r)y%-U{(ihxUxD}nc~xP}CU&sg zbz>6#B*~>0KkrD)t%C;y{;S_d$&skL8U8cu8l2*b9=sbRuR`B=5M4B%6vTe{euRme zfd&zPrb4dIV!0s1(vx?m8)B}pil z8b}~ilw8Rw*_95Ns{m$4%x+AsW;kR9MrNJoFM&tm0Z4V+Kttd~`c5kH60@;}Powf` zqNxU<2D1vY4{`&H>P$Uu%YKj}b8jO))^hB0z0ppa@1J+nc7m+@2E#Q{a*y~NDOKz4 z>s8A-ffV7E+G|z{EGYF!uqt4(T<9XITT@PBr#8oDd19!8(!B&nn2qjln@z#HaS=Y2 zog*h&LUqEzqnC2CPM?qUwVyL;(Ps24dd#Y%sKdMyA;Y3B$9QX|E%|&q6I81Jd zT>6AIkBhoq;2ExQ1Zr%F++|s^`fo@)i=GmNCFlc0HN71iRUBqh;Jhgb0SDIThrFc% zb?Tw01coXR)YFhu_>_Q@gpJS0CRTzlp4Bgup8ytxRo|0q(!VAbG|VpK$okls7sUR1w>X*Q z$-H=Jo>0TpX>U=nfP+;Fl~siJRvJ_y?I9?|e1|8@TN_0>gmwSK@*94s!>h{{{&t3y zUV^s{@{(Z|KIuzerH+ol9EkNQy2E+ncDdmo^-C0WM7lefR?5;X*YZZ6Kb*v}kq!pI zM#w_`pVQ!6)q$H0b3EsKhx+aAVe17L*`ndcq^2w9GcZ?hn@0Ju9WbMo5j?Jy`Nq(y zl$JLT#5ty;t2rb}?KSHHHUw@<-o0?a;=L);*d`a z;ZVzxf{0K__2LM;27!*ETKghT*w`U_14+an8a2)=!#F!$yZ!|fE6JMPAT(LK@yM#M z6bP6`3ssgL75uUMP>{@ld`sAvBgn%(hD!Yu)R=jJ5Ubx*_Wvt6bCC zJEh)9YQ4fTq^rZoQes+a^7FQrcH-Pg`fs+V{)R1cZxfm{s>P28tjf|p4GMff9u7D#ay(Lk z(d}`#9uL0^V)`J<-~?MELl%nVl!A;=nV3^8-(1sXHTYwjRo%tMYqMlsuVvRRIs8&T zAa^31j&I)zcL%|Q{BShFF0ZZY3QN11Jq`JM}1<{(>p ziT8EzHbybGBL*qxpIEp|uS+`P|p(A{Lbj;I-v1V8y)Z? zG8wHxa;!1A3{4|nZg~ydyRJHbi~o%Fs9s&8h%J{Td2Di!R)ik!vOTno9Xor}*{3xw zIu%OOQ<|U-p+p%kCskgW@ZN)V$n!GR-!{XmnP2mZRpG#KRB-Q(cejgy!**{^>J#!eB4B{Pb+PV2qVF0giS-9) z3y$V?_urc^v#K7%eOsZ%@lJ@q^k&!gyCtTs+xA5nE#{UzAuX|;#kgkMtI|ch0T)O` z$Yq$JFcG3lK@TX`igKsZe&*Sh>&rKHcF=fV9-#~9r@7b4PDm|8(*|e_Y6Y6+-twoN zwYS6rzfTX8IMUC~=jCIW3VsyoDrwu)7MscheM-n1cmC9}&eq7`UfO|*O8;2j zu_!l`y*u&V$6gO+vstaIs^d)-L`7e|Y=IjD{JW2&9Ht}5>W!5wj@LwX=Xz2i=W2aH z`wXsRm+1!8F5k56bw(ozI_cd@QMgQ7TEaKBwQz%tZD;$QWrjUa?K(qVXARl@;ek*C zz%*tzo;>8{>S>L}+us%hEHKL-uW!G1_7c4qJ;60+O5T5fpzAVu$kN*3IJ%K?$!Sjy z&PJ?5>-fQJLU(QZQWx~Sk>dv6^8P4rhvsd$HMa$H@vd&GNp@$n^LQ8?bepYg0{*i7 z*;tGM;$b;@!3(ygN)bhH_+}h2`@!xj3gU+`-Q5=(RJZyKW@Cc}9yJpA!Xh^#eyVy* z$en?WOlKgOk^xDEr=wV3i!*xC=^17B&+o8a^pj$(7S6>+d(K)*#=tMt+x63Ni2%=f zKYBjyu6=Uy;5xr&8lm}~>GLUeK$UdE&4iuYFAPKEyp_~Eo6Y`?#-5pXU+~}lT7Cg) zKPE3imANX4(_F}h63xGLfxKr2Kgr%VQ1npqLQA{8OiDL9-MJ(VhH2hZ?D!)m4tUYo zGCi$vs}X9^cIUi(b>|1~a)?qrd-M{zau_o?ubO2-$?|S1fNw=r&-K<*LHQ zW{_s6d~XaxW0?9x$1O=_I~p_(`FXdS!m2`uj@FH!Xu3Pchhp;1?Kv~*^RV^W_#s$y z6c2sCPSwUEP_IrQFJ`-^2rsXaG-v|PMJTDBfGR))eC;~<>tEyL18uFlV|X=7Rt79M zPh(0S9@jgZXT#GYiw~2UEpGcDKx6PBH@peb4k?aMIRb0tw48H@2~kd_4kLZ_&=#UY zB3XEErxM3yKrE4+0#Cs7W@i}fB4?1&yf**q!KtFqVE!qNc>ey&S_01&*NDkcK-G1N z$V$$Zw@q&Ta>M{tH^h*$YwEY{Ja!3%}X*;fGqJbUKZDsKv! zyv{Z&k=-UM-iB;lq8Vt7x7zH~Y}3V#FmSR3Ne^W)T5p4YNPdyAZ@e^G8LvUsAYppp zJ%u|-km3@$cgQ^Ule-*eN}X*IfXms3t-)DuZM-^KA8*1JOB-Zj*u}VSfQxl9BOcu= z<`?yL72Cb-FpuqZ?qR80ys;W*(agI_osK!eO~U$;h*|8eq#I@sflI@be;jqy9X%ph zvbgq*>N~Xyx-^5F`CZ_HoS?00xh)ho#Z<`(&BTINR<*-DDoCy`Y%8D>1-44}GZ^|H zM)4G;So`zdZEm!%J?UJXwp&}yJl|5korha{ z6Qz1k12ZV()2Tc@=dphBgp{RUblb%#EQXhSCp}xGnKf695u)+>FvlMM6Q=vuF)ikH ztM>igMI~=LtzHY;awO^Zk3@sJ%Vr0ptqtbfDN2|o(JV^P6$G*K@1^-3tTcYN-)U>2 zkW2Re$npC=6?=YIBx?t~KnYgYYRAgecKnhLkq;#blW!Q)E?As<^Q-FpJ-u7*CXA!g z`}|JAS8vE}jy~;z z?M=T*Ja|3c{dN-mt66wBP?3F%~j<;EY08z1i_N^W+6%Lmq#j3YF zQIxY@AZJhJ7A1ej1B$C0hwP6R+>Ru6B3c-)W@qi3UDJ~mq6^&EyhcIZMZzFMy%74G z`-u*Vklte-CIP`4OQ^Mom~2V1!ZkcV26P(~iQUOFb@*>byQH1iACp8Kc4A5pM!%l# zF(gDd@_Mn&nd={=+e1BD?;b03c!2|zIHpv40dZ7UTZ2O?)FKfav7F>dp2)l9 z5g%Qs6>eVd77`raiz8);WlH%6zG-K+BJ#YKin=Jw$Bg7HQTt`8IdKv`4V&CwysHc> zRNx&4Z?Mu4$=4^J2!Qq;b^|eDaxk~qN2^7jP__8aMO)hWRwL{$K0t2H%pU4$TlFwr zsL>DQ*!~ork)1^b-SG=nPP$|6cm;dWK{XfG8sAck=!6Uax72Zv0B>q+X@bgjr`M#3J{Ew3a zynn^}Hr^~Wdam#d40?}v9zh`lOiZNk&6$#4u$VZvvhm!%r!1dd;+F@!Me{@Vv$f7eP$P4-;^xl;?m(bVerX`5veBF9I9#zs22&LJ#N2gIaY0q!H%fSo_u{2YR?B z`SZzBSm_+^C(8_pJ8sg6Dal7#*6)c}F3j1)UK>r5GLT|9wB4Hs>i+sW zR7#Ypp$mUqc;z`T7S;jyu=#MU<+M6+jnojh8&|0j%i4pyQc>-2&mq3x^k>z3-@Qe` z(pok0wDh{vv2Gt;tm&G?s$w_x0Uy}(Y)bv9(DQgVoA&`3kT2=LQnbFNf@5_TXUZuL zM5H%L|E)=zYDzf>vgK~EHg1nOQSG9GlQrKt_566#ldj}y!%UtPqaQpRocwrbiG+&sU{QZA}}$K%4RVc=iT3+>$1EVdINV>#UcD< zPs0h%jcatsl(a2e+$ShZCI9S3^xBxT!>ItuGj{ell7&gB4#y#+#xTaV};s2v(We?qWHGm z;kT?-I&VD1nsb#LH=7Qao%@o?q)A$19QW@byQS+dRgj5YMDxZ zZjaCHI#uota4UgnD)AH*>xxb|@x^G8o9y$D=;Gk&^UmaI#^Sx??`Oo*O$84qDmb*o zGjj`E@~NF#Ml}!=g9Q&@KXEDiwVq^B0fjo;Z$of@DD*{-qo{X46&rJH zPHR?GgUgD~NSUwBA;mJqvEZDNp{x8XB^&8FIX_qT`tgh?r^oYSD%Ni4h3w>MiD6Y* zyFo;p{G}GWOx*>!c*c=FyB+xt1>K|L35&}hXO>cW%^^<@&@|O&>(!Qr=@uYlgK$@` zB4X9l?enpZG@~ix-`Nrg`=dnVMh|Wtt%_Sb-m=I8Tdf4%zQVyu`5v;X{z-6hMi|pp z1pm2`Bg6Tvs}N(R_uI}S%;Qm6p9qs^$P3sU#_%kX3ZwykK+6YcR{4zJ=gd-Vq?c9; z(&{Nt3+f)7cWT7SM^zW=<>0hEM4=d>m{t>}*eU12S-^Ug_3yUdG%C}+pYD6b$2K?D z{+Rs|$(`27=r?HQY^SZXI7XQwc>>2=>{ut0Q;R~k!_t}!&VDqI)rojAi^M%d- zoh?mloL1oUZQZAU-h}@fVoVHr>I@ICGtT8kxwFF#ZSVbkE4XsoU>_#*%E?HjapN@3 zsFLTDE*@f$510L07($biv}~ZBFEJkV=Vh;hY5!){qKUH?21S}6L`ep1ty7;w(4s)e zg|C;!LU2f4qj+oI8CZ}CP5SV&S8fleVE*t*^_|!)I%DpHos&tFDNOBJ76?1rk6iMd z!fWmCfIT*9qcqcPW+yy?ji*lgGtJ_x3`LA+&MG}&vczJRO7d%#8U{!f7bI_k<4fXN zKtCbsBBQ(^*h2c%QFnIRm8aUW$xpB0RLNB{N#p&u)=4po1$u{Z{;{{*?zC|l*(vKM zpP=A!34RJxjT!j}i3Z1a!0MUgfP#e3{cY-ibJA1jVM$E|=*MuQj~j?!z3ZAc}GF_j2-Nu*Np&EK#C`%!U#J1KO1gIre> z^S=N&f2GF^B6R^AcCOID;f#3A_gCx7)4L)0@KJEY4RG#j5bmiF%z8Pa^Kb;*SY+IL zjQ$la0)-0%fd(H_qDt}zdp=b8T&!K<*XUsr*me>hf=EK}y&l5tT)p<^X>u)sC@hj{f*Z6rciH7 zj?TR8sq6lEu!6vxir1A87-wlW=|_4%7~EO3U!eaq0qJZpKlonv#z}s-F!lx3DN`+X zT!@q#x|l~JXp~N-G{i5We!k3(DL+hlpwHfF=U}FnF0a-B=S8ZZr55-`b=3{G8CQ(wv44Fa(!zo0r$cI_pD{nVvdQ7++srM(Mh z)+P}lp4tDE=K?3!a56c*%)TP2Yx-YS`yY&^T@L>>Nro)P(wQ|?>w#FFW-g@Qt>Ujp zuGLa*B5}8?ZnfUr!yzmsAS@U{9>23x2{4F5mEW^<4F|5g(=sHZa9!Q7>MiH9U+yNK6d zk2mUIs>yYPJ-M`&2OR4!my=rmBi6+%#81>_4L5BFhHPV5^$G4*7`TADI2e4rJG9kWH>X zsQmbv@C(cW>G3q0oyu5=C)YXB9nHjwS5J)#j5YE1gGUdhB*iJK2mE|;VvFB+95^|H zP`@DV+W&#Lg7f@$yn~z3aG32P#?=#rPa1I|72la;uf&;#*xCc}h}73qLRZy!ceO2z zGXUIcaCFB{_Ixr}yFS<{GH3{m9iUVc%2?>KwVZd?R|sq~t?tFn#+66IA4VUV%P;PS zN)GYbPvdb(iTN3I?s2$H&g*3FX$?|QqvG0(KIyS)+&hK~u@m%6knVGCUAqSZn}vUy zefiWcTAlfZtiyW$193@>`)NCLzO5q-WR<9aq>9Mi-M}7KI*wa=6n*Gm>n1N}GWIv? z?Hr=Bw|{uEoA-zu94l(e!ZiC*EKRrP)2SbIA#1vi&3%`l^vJScWbJcVH$Tn>uw}F8 z|B`LO*%tiE^)sOwffKCOmlCJr7)Eed=hFp0^6{=BgQQ|_H{Yv_6r)PF6p{PgusH(Z z`O>mzEf>X1$TShKS;>HT2_v5?DqiX6w1oFK zyu4Ui(e5&Rl6~WBxztVc^<5~A8}abq#A%3>t;4~SeMEZBu^XE^mHQQCUQXCA_z6-M zmU2q_6H~jYjilT)bFDS`mqC~0tLBFDkB5%K)f`!l?B+UV!Nm*N(cee>y%rl`&8X20 zD>TE(opL+}n;IlLa|EHYF4)1Omu|%c>ZyPU19X~T%ZfPX-6PStn2u<(Jk20`Uqz!| zkXb@X@T5_nCHsv{^YSP3az5*rtU*M~mCHJdm;qX3?X-w2di++l zp_hTM8)okJ0M=Fe-HlDT+kN@DSVYVh#ds#%$F|QWYr#0Ua>_tVxRKHww zG11Le5}5px@9S?LmpOoNM+vo?cT3&es(sCKZS_u0VjFNpi8O?%K1?|-)~nR9)1Bz? zZrXj*jYooNuUS!8rq{({%-&~P|wBvH<1zF_1Lo!+pl<% zjf4}KE*HI`QS*W3{MEw!D(?)E?r)#5wn)9F9r+WkH}y!Gu8_x4fPozQC7Ur;CL;&_ zh!fJjuZC7y8Ow%`Urd$n-8hBGf{(c9Id&HR~Z zU-1f6Zg>u+p!L?7(Xv}yJJpPV-{-~vb)nYUF$<);sT+}n zH?K-<`Gwg!wU%h&%!DHYtE+<0R4#Xs8}a9SpwQQ+yDdKi`|#Q*L^7xrn;6SuNLyNX z3aT@`FA{q`XHsiE8GXG!Ki1Fm>~cOmIN6_fzF@1`W%6HJwbOE-63Q2B-7xw%df=ucvV$|FsJfR*#y(_>GsTVJqxn>-?Gb^RU9*dvl5eHFxZ- zYs;V&fiKmrsvB$?Zzp*v$~_qA!EwlRI(wjNZDw%O!K@lSrAd;HuDq8zyF5Od+BwO4 z*q4lflKrn9|6~|fkT>h!E1h~=7p?||s`!JCv2RfO<9MG#0@#@y7kSy1AtL+_3{Ycm5RXh+PWZo>Fdv-rzY^t=Z|B9bs*bAQt-%4WP znHjK3?}yY{`j8@ywh7Rf5^&DsXW5u3$e#nwJz(3>N!>)+lhTr%Y3is>=Ac;0f3L;S zQs`2sNS_1B??s}^8;K<-Bm}@DI1;cQ)T7&fs?1IdnT%~lh1eegpebaFGuzZy(JcIps(!L8lfu+p?e$~8kt|I_@t#d&tQb|6y6bmHx$vga$vlgH zZY9pG2S25Vzkfug`eP^;w#8-G(CV%=X_k7P>*T)mVL;QeMQ84;Yie$(#zZxr4Lhu} z6{fLom3V%_g75pv4MD~r*U2Cl*=z&F@lu1=>wt-zKROc3Xk&t0iF!aqyjr^^#~6Pk z-;rcV0EA&G1IPVhJ-=xW6H$rVDPK09Beh=|E;l)Le`6?MO$`oLEb-e~-7lYP#j9UNNh}U)1{dN;*l!VT+;PXT3*N!g~E)=k{t# z#Z_jHfct|_$ddtVIbL+st*6p=8t6WvfiTOA0&*g21%}K)8&A$0?@Ef#lh+Sb3(r*~ zfCjzVCH?fv(@Ra4uTb{_ij~i!+w^CHib_VaAoo1W=^f@JE3{D9rJm;@1@)m+#*&%e z%hA-+w$JS8(^kk*uIMe}XXnG7X|Rb;Dr*9YT~{k45{ou2y-z%`DT-MoM^B;*NUr0u zCxMy6Y^IL07s>g%fohb#)qc6w?296t2VKl6^ z!{IarAP=yHohfMKga447WJ}d3lEdHlIi;peV-kyMlCJv99i* zN8+{Z{g(Cui)T@65e9Kln@51zI1nh!T$%)wUJV!c(y`F7(48n5{+KKJ>Tpk1{@USX zN^1rp(b9bM;flEnh*9Ks{Dp{wvqO{s7d2@k_uop?>Eu~H3y~off`kq~Vm0b^ND*R3 zN)30j=rFavUyWXUs`3A$?JL9LTDENi0fI}Qad&qJ!QB(wEx2oN zhd^*AxVuYm_r~4b-97kg*!!Hf&%N*dc;EZppSgO~shFb=TdY6Bc zc2fNy=2^~>Bg>>x;$`EYW&EjDWd#smEL&-lzlB(+I_G?2+0(gWU8v_njgBu{$(R`o zxu9!%!bQt&3N(VlJrK>oLzf}7ZzemV%47ZN|6mf(lgPLlbW&lHXI>LIlBZs2MXQkL z=pULGi|m?H=}~kCYe@B9d*==q{-4@MTxUb^0NK z4VS&q-8+%Pp2K^oUPWqexmJk6{9FJDmrX1~A>q>P3VANwD9)5OjO9>KK_3&B-$>_E zYYB+9TI?A8cTVc*5MYs6qGJsGKP8}g%T@Lob7jx7z6R#zV^bY-w9K&YZ;%Q2ldaz0Aaza;ZfDRwTPJcT}Y9*HwifgB0k~@!H_aZ!M_HN+?p+ z4bn~8c65qy351YvGZ5waasEd^ zNz=0tYfC1dyuaq0WU`$bsq9mU9<(J7Yb~u}pvfa>l%1{vh&jJ)VLcAeX}8d}IRB`$ z5GE358V?!62*NTy38OPOkdi{2wOpGD<%JZf82Zs)}SxHeAKG$mJ8^1k&@FsCd1Hg8ht)Pz`b#~awwmR z#8F2$jzd`Vuw51$0(N`YUi8=-<@q|Sme5fYDVNo7IkN;x(GiG#wW2n@h7%;vTZW_TbEcc9_j&B zaWum~YA(6lED1lT%+GqzBHeQ`!mZ}9_&*hAp0E0nNCLM=3Ee*CNVc*|d?e#zmjH^` zB`dtUXumEKwB1r$wHxm-UH#Z_#GC6%5Ti+E9X>pw(n2(}RS~~dOvO?q6-wO|aM6d_ zbX+tD|D@--wL6Y9@3;| zjBXmYa)Oh{#-)9a@!bK3ib%OzVt2m-|8E;oxYp0?a%SZX;?Wq>a(`f~qj67c>}bDW zO7x!!NzRCaGek&-H`0`GR@f|+(t%uivI^fYdPVYgqg0CDN8;!u(uD;Rgr8Yo>bDX? z;h-s^>m&R+81*p+q%>8UQ8Kehf@2m@zOK{O1^X`YtSCdxCJbI%PwB&Lr()W-T)GFFy{neSwJ4qDs&lxpyh^ZaYEq@=8G zsOx#`xbo#2rw>xsfZ!RW%pv;2=|^_UV%C{H(wVw|*;(r+Ny}x6`2}qJUbVVZ7_5bq zfcoQlBug?(<4T3l!i1tp?1HbGM8g&-*m$Zy=1lYAN##3R%b4~a!8of#;IXIYbQ${0 z3k||@|MXAm)$q&pgI=D<)O9bVZ6O++VX2VkLpv!sRQv?T7jp>KX6nvA^8+eMQ&+5nQTIk0(%)gHI&>m)~ zjk2%s7-!vuo9sVh^vdVOdVWb*qppY*^NiJVX_;%6y2{qAR2|RII441*la2IE6@CeE zhoJp#Qm6gBZ=iH-$wyYL*iolpxEUcOB=X+sAXR2#inMSV8*|iWxYDhBsm!(qi*Rs> zszE5jkUh;qzJtu!bqcGIBGjM=QdGlW5LGNezd(eCcj)vgUj&JPUY zf)#O@ypJ$dWO^YL+ zse1@YMxn)XTs<|TA9W{LB~W`4$86WAq3;Zehf4CPS&Epm|6!_liiQ>x4MoFdKsxz* z^5Hp)JJsbtq;Rsr>3h@es5%JVo+)6V4FQ`5ALgQe0d@%r)v04HlGZK@ z#)R-enS0h9YzOW(&41#cIUb#Ht&a1j%W}P|`a4+qKR50@MNepP8oH_`Qr6=+4pp@* zqBZ~0j9KY@nHsM7vUo1~pDFyCQ4d1jww0<&w>-K%_W#bXd|UPaj#(wEk}a5ZY0Wam zLuI2Tvi~xh=gT}JPQRK&w~~6u-TRe!eSApZ~HgvtCYQ|*Z_%<3H!rsJlV1{*hLh_`s4=h5IB^Mi@ z8yn$9R^ZJT?wMc}5>h632hLsiS4#ha;;)qcy8I8y;*2dm`1|oi4wp|O0VsZuwisK4 z_vkAg1QBCAULffgD?$0S8cY(*M)=HBGC^l5>1?~tsAJ>GAv1mN%fqM|8prc)Pus#v z*mssRcoLgV-X-Dm)=nKw4i0J`qV>p8f+PybwOU}^h@34TOty?{G+(3;+Q87hppm8%nBmARhFX@(%z(o|DxwI3WNIZ zaxT3En)CdDt(Q`}j^vpS;i+r{L!#I+qL_=KRe7$Hg*pkq`CWz!f$bJQ{TQ!VTbUS` zrAqq_W;WjFv$izPhu!rD?hdveWDB^-XBrf0k-EbL=kZM_F=r{5w3{#NaW67SIy_CTr zo;$d9%9^!k@HCRcq4LU-Q@4iPaGX6O4yvX7Zk? z7(WKK;Bn-`95z#OOgBUSgBv=`HO2gT%l_@NxKNzsCMAXGEH1_0G!ZCkyK6r4?WCfF z1&tvY)P`(qz537yZUKCEEWVC6}UZ$}^fx zj57(Eddo8mN*`W!o;_#SaLCx;I)GatTd1;$Nu@B$Ts-G9}MZMW#&?H?BLw=o&kF;0b3Wu}vN?JQev;x{+w@+N=zXy(uH1)>7y=UkAi z$fbe&^Hz|eHU`nx-tlDT$CEGD_mk8OP?t#V+@VcR*{DZW1qzul>%Ezi7R(HY2i=wL z2ll{$yGSl~-^Yuw30L)==p9b~=urq8fPb(8$NlpzWk(-wK99+<8!AjpiOW*>%9=A{ z0ms$oVTe~%;^Vp_X$mhxr@$3f*dUs{&^;#_4|KN|Pb*)W{duayjeCMG(~y^Giop`@ zFN4d^9<&o4FiFo=uE{o}vtn~>RZKkFhoEifhQ*9J)9CQxjqBC!kHwmR@7YTuzSi_+ zVLD5Zobg$Yty=sv8zearYuMeCJQePIJ)RAa&0hNn{)N*YU(4^X&;+Ki}$sSgn<bx>XZzR$` z7@vP|KaD+d|0aS!#XLrp^#9_L4yZt%u3;{3TtS~8Lbal=HA$$|7`*$f-AV* zxF!iJM7U1qSJuhPSeWFm))vu^`^o6UO;G(@G(b#S0*r4W;lG)-&gSL+DvRrE)>6|W z8q)ZSIf_!_(ytOts5>l912y=@9D$UiyYhzo33cYo+ao`vtET%!`>Q#CFj4)<5y8@$ z0WbI51Yd5yZ&+ABkv$u9)iCUI?>EDJa`wn`*>MPL!or}n|Iw!zFL7E$_(M5JJ7Fb6 zJJ=W^yXAW)u#$1Y5jBpfS2((x+yqOCt1Vzrtr7aPt3or$Bx4!CL6zB<@y)j;F~G|@ z!3B8DLPUJn;BY{2INLbVOA{X)vel^aGbaUYI<)7U1w|enit^0YvAfKki zcGQ01aYI|{KDJ8Rji^rbL}Z7M|FO#ZJDi^lHlv3XcF2wOQ^J-dDR>tOfXL0;H#inFSq;5;{@Z?knA2oEZS9KcT~ARc=;aP;cdf9- zqRQQiNi3ONlj8?ltoRt)52RoW#TXl1JyEM&WJWVT#N4%-nv=aJ2!1lt!X5M!B(>)z zx74I60L`*{%(%8uXO&tPM}FVVp2iuwF;Ay2_-zx4U$C-z{USV7A0c% z(-zfTLuznwz;@hmnZwGho^y7>x&DU;PoS#UxD6vND zSP0gC)_!OCtG@(qk;C+|n#Lt>gTtiGd1k488NseHQJh|{eeZD90qT6QdBCRp%V_D= zv)eVj7Byy78Qj&l1aO)2&N#VQ*+eJR65UFV^(l~nSFSuo{pEj@Mh(77qX-%QC5^%Z zA5_68aM|xjDSQ9^CbMMZDv)I9FY8c{=yuVFfw% zty*=+mw4>(&4wnMwi3FbDa@1BHi5y_BL4=s8uq=MJqDz>o%f;Vrjn7u-l6q<`FYU`raf3{R8=u*<`IAm^k=XpSdY0IUFE$yj*&TIw}y$` zk#O)2DGKR778){n>AL0fN_>3sYQ?2=d$QDhxv+dG|K9fg@tM^-f zA&k_T<&mY1`OwbpyjKKk4wFZG^x5_y5Cg}^i#MppV9b-NED-^3pNruzJWHaj&gvUF z#H{dA0)l|-Z#|Vb_oy(EFVl|`68$+y9p7^MqXgXgw-?XJ2KZz7ySGw*j=Ai+MEBPZ zeJFPSsR{G!In$)>^!yuHpYqy)uNB++LNtHbXu(kKNgJ+>A@<{MkJNaz(=Nw+C->Bs z3nlK>lO5!z(dv$tR{eSehgWXt@SogL)`(Vbi~7nNw?rN1AO+%<)a&ev3>>q@ie#E$4b3LgwcPauvoflY*H5_R^ zM%HPMB3b#^o?fGX!{JcX7(v7HwP)Atph1M4^*n~OeIcu^u^PR@C{<|(D}CQjpk~#YEPcZk5Ef;NU{->!LZ-|fvIF-DgNtY z`D>DyROy~jR7o8<`(t(*ST?pqs4K1La$)rT_D0tB38bV}2QyJDVBcgxnod|Pxh=5U_G1%rV`7bVKKbU)&%240W-k549^5x!hsJRCfn4hT&Q$_zWd^VG zfgI2JncSlvuEAj?2UQRdty=Ozp4v?tn&S|KjDo_X0L4UNVWO8EN@BA4X&+9$vOoE% zv$>|Ju-3^Xo>%T+QKyK3%}#1X(%SQSYuWuN-^ue6AH{VjOOd<(b3h`KiiASpYGPwM^o-1J(oG3rWhukI9W5mtWve_TQU#N zh{=Asdf|TaQ{Uv;M}Emt5wrNeI(!pQWiD(CCm2~YX zYgTgcFSnMF#pJuP=E)Agh<7nRAAU0a)y>$1*jvh6nEBZ7>q^~$y>fo)rywT(+bWkf9x1baTY78oElcWwT4D`bB&2t3p0u}jlz=;9K zh2G+j!qkNFm0xo<9#lrZ28;L1pKeWGhup@?Jafiyg(&*YUWY=g zRC#S*tn2xKO2_H?$=&(#R;rNIs`4M7Msl=UwKj*-=JUD*;X<73N5#7&4LGN}dm>gO z!fYEQOE6~mo}TN$Dy;C_(JPb7z3>zz(a>}Vhi^@KZ$+#eZBN5CZ6X~S3&)qi#|4Zy zv*lO6>fAo2EQ*;;*Ru!=R6iPBO0y;ZPKYqitSc0d@cbMatX1$*Iom4!^utNC2-S7^ zTuk!t_sE05g892BK-bsz7nAeF@hjZ`r-^!x#n>&=dGK&$t9aGK;HW~d6y*qR^EJ_C zS)Eg8#*RAwIb(RG%x}Xn8k-(qMKbS{3(-*Cs=NoR(B`<*>{pj|3Lca{SklXn z+OE9VTknY1(*`^f^%mOmobM_o8Jj6vYxN!$p=%iXxcVN12Dw_BJTQn}KQ~^id|{y1 zL}e=a^|;~ z!O-d3srzeiyv=&*C;3z3Ry8V*7s$nLLq&&a2~E&Urod$}!f?OQ&v3T6Uk^{Fz3g<0 z@pwJlTnCQ-HmxX7d^dyFLH*lZss#H((D9d0r}bmK(d|@XjbepuE%tYV13vjtg{>UH z4=0Ft#GiNt!!VBJy3VIRi8S`l3b+VdS{kt5a1Q%0dTy3|P}wyk2>*6ShFu5G^RTk) zA)R!4uQ*26;-ph7y{_a{$-BPTl=l;X7lGS-IXS0{j@)#a?2uZEQWuBsM$I7~hv%UH zr+a*IQiVaM)y4JZ>Udl$-Q-dXi{aRgGgRBP4~dxysok7!UEPpXkOS*;kVQ8{7;bbh zEK%2-u7F{|ww_~ERGgd<6^bB{Z#CtDIU`v^9;`@Ii?vwR8D`8o7JSJmX))qPPqC~M zIZnqT>BaNF{oexepy4b9fb&+L|-VYQg7^gG84XLyoj z>U&6?kQzaBDeBT+(ycmWHje4A%~yD?^T>UQooC9& zA61X2ox?YoVuGG_fKO77@Sw|1uEy8Q>%;gSrkoF18LT-q+rOlo{)vG^p-Vew1=in3 zwcN(Kmef#bHq#OiZZYMs*SU25`8FRMg{cHniFqjl+;*f0)9A?);d3@I4Kfps3L$+$ zVO|p=AOr}$@v?0oa=d;uYjuxQT86Lr9M*Cq#Jb>1M{}gns8$@mofx*XY`*hs`s~6x zd~*3%$5-a4%pw*M1&fS<)O$kmo+<+cg_RimV%8Q75*r0ffr+v8hqEu8zo;-_$v3Hv zIA3Q$65>cD#@ug`0^FG>DA3f<)U3q5qQa%6ti+u&gd-#X8hSQ_r!Ku0ubzaB6hZ@n z*p=C@;42#0x4DqJI6xxZKQ?V8yr&$Om}DV_@Tswa%iTsC@iE>CVQP~iP$V&TNKeoV0;%M=v6(}mQ9)PUW9sYRov z=2z~B^>qgAZxsxStO&X$;2{kFL~T@V4^jKq5I#3`i-;d^C@-0X_5U!U&Qa^%Xjo>2 z1lW=9ujf#`bJ^*{F(ug$SMPQy_!fD!A5_!gYr#^%eu&CC zqsgJ_-ShISPZxf9}K5 z>(V6c6vu2UjVBK#&=(dYlqMtwLxBkt=NASi{)imq9oT&kD9q~aC@)Mp;z?0nrqkSJ ze@d}@l@uZF*Q*FcfUw}L=Ix?@D<<7!OpD?YEBwMy>q_6zh_&L|lUPVZvO?WAB1&%dV z$d{?$!N34Txs6${3AEanyoxRVrDGRZ2pBBAEq~AVzG8-f%E}TrgB;zWFc?z#O47Nt z)h9RB{R*m)u!PP_kRAGQI*3*6u4JmI<=%%=rHzgCn9S&i#QK>CSa7n!U{93nJc@#R z!D62Fex7KuvY-O&vcf=V=^RE{@}JP8XyN|s=%_~eeoRCWtlC62mAgL9kli$d+F<9f zfhzpX;2QvQAWhjWH7)(BXFFG@ir+6KowdLrhy7NVLM@K(YjGB zs1#M-`s5r!0TzG`>JeQq-}?e;+63kWJ1dBA!4XUZfD({6h)q`&<~9Qh?uoWWCv{T8yR5dzySlNI}~DuF>R!{=19q8Iw*cvE0_rkwacYl_tO&fN@@ zL=%c$3Tu*T6Y%#Oy^8EoE%C;t$x=^Sc z^@K#mozPvea8YPi=l)cWwNc37kbYEz(qOu<&sq{sEuC5rW zsu=w#u}zuJGs0K_zDckJh2FPwvI<}l7?I6Tuk+N5nqL*<8R;O;{gPn+?HlvJApj5n zGwO^yy(TsQy&kL_wf;x_AR%fYYL1XxT}3YXVSRlcv|da|T$-=Y75w;&aHMj9*^wqV z`kU1sBTFk%E&T6qZOut(kh2o_Jx^Oae}l7iCSzJ5i%!W|v5j{(Qj$}K;@Krr(9l9d zM)IHdLQKeP`lzKA^B=O(jYeC28t3U#$`K0!_rfrsAAD$Z4s)O~kxccP0zE264@# zq=@-LXt+?2^*4|jNU4WQWEdN+T9Wl)SW%qiaD2%uNf47zUNMY6sS_-pO4T$BvB5DI zu2TyF1 z6hP@A`Anv~ccQMWlMyB=NXFvBgeYx z8wepx`cFqzO#G2=M1*t&{+Vk*P1u(}0bf=i!vs8-{LK&+ga4i+hduDiQCGvj877ok_o+gwco9OjwwoE1=V!Y4O{td|nd!$&R58O8ChSL2 zh_=EZ1?na56I8fJa)7~F4lf&EI zKPae4s`k~}7`%EL6)-!Hw<$h*hOh%<{N8A%p)otst4c(WBKKO_Bo!`f2je2PD$pyBZEjC3{6jY7~T zN%uJlaTaudgr1QzpOIzrRqPZDJN3Jtvfpz)We)HwtviFBpLl@EQOZXnD z0lyE6lvc(sIPy93FrS7H?OrN&hudD03CEv0D@p~&EY<g`{e|Mpu}v{Vo&&K_aCs*P z{q@@4{g}Ny-}ft(giG{$q5(Yg=6VSJ^K3I2E7ST znvCIn>jpG_OkxRK|Hpu?@mD}E{htGRt#7Bi888q!JMcF$CShG{=_^XY-iO6RJ+YMO zn~_loM2@dyVr8z>rOW}UN?2NCBfB*TZvppV;pD;4BDpfWudL>wo;pdBH0066Q(Jqo zrHFLb2|uDQL{_{r1dLVaO|p=&mN;)wh?%H@<$?;b))!z)ATx*Lt=NF_$Zfs(Xi`P? zq?K()Q9o%ogy1^?$YtI(kbX3Tnqcd&&?+T3W%b7t@f47sw_C6yvWc~U_r@I$(^D@OWpb;DNySHnU!kbeX4 zc{O~PJG;Kr6S9d65RYgIv&OFoN=P^VQPZUp4IB%r0-)z?y!#ChML(f0gbj)RdVyxf z3yv<{CtoiX*I6E!`%VN9psiT>4Ly0-q#zY>fC|4~pie`UjC#2 zOwoif7n~%e^&oio`9Vf^^CBrYTxXQI0$H$LJEfJ>NLMWiXDz(ikdPcjlD~wuo_?jy z;JXjjUu_?bw)+pOcFR{*=-M;Q=r4mLl}10Z2$WtevH(el;6=GNo*6j81xfYs zU{9x%LW6_F%7iwZIB*98Nla5$N97h3xeYH1I!rl_7L*x=HN1=@PSp8QTU=e1T=%~i z(tN*TJgkwtGY9nM#nt))>nskSw#igDKgE}N#%Yqd*c}5^(1Rv#qF=U3R=Yn%f`YJRa_OEqXD`7%?6}dY)dNE1Yc~Ztx|DztC;w zU+LW4x1JMjTAMS@qZ(p#w3jQNW^vCyCmIp>c80lpn!21gB7$APSW5|wJIsfry;$@=}5^feW;V&Zl!eznR!POGNH_5IefbfBGS68bwsxN%;=55l?cieLVChQ}uan0<#$!$5 zP-%c#u#52^ayL91ldU6Uv&wvYAK4~#F?iPj6-LuA_Y-#scH(^yFqvBK5{PhbYQ5Gf zbDaM(cjE?Y_G6&ba+TI?p8eemZQa_J#rHvo>WHE&2tS`TEO59PX03BV6b3o&pG;kq zPPCV5*L9p$p3uM>=rkBZfbXeZ)UNjJQklDB!71SLb&taZh!(E^6R8r{VA6T?LCGU&X_>_%9!yIJ`gG~BF?`Z8it3-Q8vc151Cum-j=B;b z3h&mG>IcFRRuJOK2Ryv7Bbrpk810-4;%Es~J5tpIN+?wYDtt8-(|dpUV5i>5glO(W zxUkGrScQkJEhyP*TOOur*3^H|zb!IeGLH|7tHU}v*qLKc64HC&e;*G;kD$5mzM-1< z;LJ7QCDKSGcW|H006TuTD!vSXjrVm>RtQTA>y2z}jw0&$gK0O?W>0lVm7!93^HRN{$l#+;X$agn&g^Fv0a1pG za5HLUZpy|tT6qs1@lOg)<#pPps-JqH*kpzeW4SRCM6D@s{7qfMd3+^~Ynb-OhMwqjgCKGiT5F z9rN(2p@jAt%ldul{@nSodT1X%=nePJXL!y@b)^Ol-%I)tiXI@@OvW?w&fiZ1r&x+r zZdOD;dTXF^II6baO&T-ymDVBL3>gOT1-{fgJv|PsnF~2iRIOm;d9fp6?P&O0H0L$> zp14`>TgTM}g>7xXABwUUNqLHE&a!(klWcsmP0?C6I$wlu0wP(2TH@7c5$!lhd9=Me zDjt1G7O-^uIULD_73=C0X!arRdvD%%eMCLR)Nh=p!E>k>hq|BI)Re8a%TSv<&f>mS zqlfQuy=PuZxFqmide;XN&b5A$k1#ip*WnImaUw5g$I@w~_mz^`b2$A~#lzO0h9zJ0 zM<8_}KmMXam)dRTNVop?~{yKtSinR+QwtY zu&$|K_hX0fuBoMhZxyPxGuieWW_-1chlxSAWz5by^1s#uDTq|xZhPP2^Ll#p{XN3p z51av~7p?GZXNGSXiSvK<*2diP@5uF$dLQptPY6-=>vg zyA`O6uJzgvR5ssUgXZ z3DVpzbYzAk78nv^>b|-(F?QkieJ|d3*8;|g@zdU6MpoL z&pyP6#%srS*n{uV*{uAZ487ZD*p#|<7r4L8qVx>ph{jqo$b91g8GZr|YbS7So0XY@ zPc|#`5#Qeb=aW_dG;1fIW@ub{DSOU`P(@e|ex|?`3RItF70d z7S1gG>MpKW+V^YCT4Pi$jErF`U)fTxI!?Nb6F8v3GCMFXh;TnDNqb5j@iWVQ8zu)~zo;SPz2J3m3L zMB2{yLRYygq4hU+O2e_|xp^qKC^*(P&P!d+gc$E^PnBKUBrO2OQ}oqO0&DbZzK}Wv z1Fn&!uk1z02{_jirW&&3Lm`XfK~xpRL>j#Jd6&cEl30cGmJzpy4*HspzpiGnw=kBQ zFqOHd;eOO>Kh#xCXFG2nH&hzY!+&esZ!g7PbMZgy%q2lTtgWN%(I9Pdjg3BSXt_7y z<(Rd0t7&fC4qvICGt7li#mwS=s-H}3tJ4ogK2YVU50$qbQ$~8JU7I^OERhfMr$RRC z9f;DJ7e1EMjZ*XoCn=tWLL*pic)k~F)HtU}S7r)$zCUWnYQOdKB| z!pR;MuQEMr6r;V&i1m-U{BbCryRUbmzyI9N6^hQeaDTA7YpwHmVOgB)Zc}PJ;x681 zmFjt5Y{j@Y<_%Tv;JUBnduW53;jMS#k){_s2BFzDdlmZ0<6uyny2pljsDicE(q~;`WetJ~C-J?8eC|9#8Q6%2mSMJJr67v#Lt7#W!rNY|L6% z;eJt|ynaw^uoFb>QJTtXqh4nA>=77j-a~FnA~gTO7Ka4)0&>GXUJb7 zK+VaKIawQk61kbAH8oX#Ua?45{Brn-4R2Y7)BhzQ@8QCcw2c|4txTrok!xaYJ{D|yzeNC3CwI=r+^Q##AMwmoT7J39?-Ht*A^xY=z%bmb zTYser)dzCDucq)Lh*OhWic1NwB(b-^`kfGvHDWrHypq_0e4|mfHcVxe-oowTaq~F6 zD00rWY%pHAVpS2U!d#wx`S2@hc|JNQoiix;^DWP1LW$L+ip%6YTe=^P(e2tG7eQ)X zR~cP0&Myn!()1DS7H+F!eZHKw8dt+_S!^zS%FHIqnS4{8yxNDwOB#9WJ%%(i5p_IX z6nTN)2woRby8AD?I@x=3YdT^ti_dPA>_2oF_TpROT4^KJ{r%>0joX0wlc_KS8~{kCYQ&p*uFq#8cP)xjD)1)5dN3IvJ5aSBqiM?9&yFuZY>bN9vQ@e%rN?g48<-Y@1b87V;?b&UhGY45Fa#nNNP~ z=_0hsSJY~aTwn+E@D-=5mcb00I1g}{Kyal;(k9=ZOgqk(V0gJGksh-in)~vl#z=f` zxMKFvF?rAp<5Q?gl|;r)yXnR|4VE5te#7A|w4#;|RBb~kwLjKM@!g#@o*xadG%pWN zx9e4Gq%3hNk_&GjDZ=Z1Oqwv&&FYzk8`=kNUK%E~4MsP&=eHhD)R{98zyEB5y4CKq zX1Y=vJw04W{;A*uV=AK@&g>}UvOO_wy2=fx7uEq(^^Be{V)_~vVNhh$4r!Bc{YAfXI(IG4)IP(SccSN>Yi;w-G zfj@d|9sQGgtXYn*`6`%d9i|-p6ISW2pPnxjDpxI_YUZ)ng-#4)50;6F@DfJwl1IWm z2X@%|?l;ru$!L}YEI%5lwft)OdUVsF!8xwZk#-8-XQMyj_0H}+AqB^YUsF2!H>qT( zOQoxo#O4J9_q#@Ddb-S6(BEm?Op&@7i5G5sa4<{P9{3PYc$8R$IxU}Yf*}n;hKtCk zFt6|w1Z0~at==H+zftWgoE4~}0Tu2Ey&~RPSj)ExaRDf9pTyF%`Q8p*rfdJqpn}Rku=aI@xR_~x#a~_pnffZeSGVtX$~5!9 zeeBc7r7pXa<2?TG$?Kut)A^#`i-(EAw9Vk_3g`B5C%hZ!uAc=7pR19CPrYqGcbKLm zp_L{K2-UKe2J$aCizj`^Lj|EkP{%_|!u%7y{%;`L?$UI$P5DpIYsI35@i#2>xklr# z2J={JUWPeqchSgR0oCUAMflGrxv7+RH-VY~0okh^s{qDVP`o$_&-wSYy}M zymvGQwF>Gi&<}ZA1wf@8%l?K3A!UL5t&Vn9SFU+V>B;X$DAK`vlq~1W&$BVrI@90L zi{)e_A4P`e#Pn@O`08bP{sgY8GUaDuqHYn3>0uESDIOK*XX+{py2Z|2z=qaueuWl$ z?D2!8W(tPyQIrGR~(=-ded0T(dJqR*dy1 z0Q_%d2LQ8!w8w2gawqqi?SvFm{C3IZjxjC#?hmtH=)445oCJs?JS9C976%n9JeM^D zdIqqz-WW>TU1J&*X@kopQ+U^dkSPuGK_mqnU5oyAmV>fbSpL*zz31240rS)N%0O?J zFZI7m@K6sHFuA<2l*{lwT9a49qrhHMKS^ZEl`Re7H9qGy*(IK&sZ{;9O#MYRNG@~X z#8^7zABD*meWFtn;#KUjAkB>Rdrp0N=Yl~B{TPQ_T|Hb@LnNuXD*lp%0%_=KOa{tAW0)EO}B*TiZtlFV!%^6BUTu<*e$uz&S}&BAylP% zbuQB(h??l`pXcJxn;s_JPdYZZ{^CGRG;KC-)F6;#*GHQ7F$PG4&3&|*>?qQ^Q);_Gb3PwFOfE*G&wZw_}1eWjD4k0!2l zZq~z*W9VYh2pxa{cs=iiytto>*k+?vSeOkEg%8}|#`I$LcQAAr%M72kd3xP&xi~y+ zJZ;}<@hCI2W!9W*&LPCcwQ6D4I%e{LeFW>VRD85{j|k!XeidQrQLu_0uo2PEfGeItImznxo{5#px6M%tZKK_%TXD;T$OQs`D&{!!V&rGs5MPBxRTQ#E_wiLnOuA_bzhXR>3UW zp-2Q@evX~?y_Tw_> zL?Dxvpo@Q0IeniUdz> znQa+Xt*PdB-Sd-=?rJ!RU)gNWv+F$cQ_4ObZvQXF-U2v|WLwu2OBPEOgN2sG%*@Qp z%*+fHGc%LL%*@QpWQ&;@U)wW#&g}EvyKy5F*_|u1va&L|T3xmN@2>-yE*49mat+9A zq0{{n9mqs}%0mT)8HR|9@b%N}P3)mx_$Q7E`EB5N{^O3q>2?1jU7f?%`mx87j*wuL zCdjtgVePdy1aOxyNcpxQy$`MO>)D8>_)MT?@UqVQrm!{VROZfU1mYm8%j>1pZuTlt zr-zDiuVaQB2rD~>Q+pt*=@Ubv=du~GISWww;1x?GV)ELnRcj=17mn~|sn!#ohqqiu zql@r6;q7~`V(cA+vfJHo9U)KHg%55!K(%`QWw;QGd<^X>b`+pbZMPYh0=<669P?o5 zXttHgAXkRxgbV!8XU1tyu~fXEd_sZcf_gu2h_UF*gkGs5!uca9oGNS zr(S#G|NrY#QTgI=?d;`CfXX@i8rp!C27mZP`qp!jvu!V}a#K=3W*s0qt{igBpHCCm z?-0$q&U|6Q(ec{RQoJ|`V<~@X--+yycEFF=iaqREa7%5*gl&xMr4pFxB(uYd-|yf? zb(F9XUla#8V02~e3Bh0OKlMZqMO7rl=A=~1LY484(V~ULAqKkA`9zuT%U*pftLDY- zs@ev??(6lNNv^!z_>;k->_FETU;7_DKlN-(k@C1+AbVhouWN<%hYS_IHO`g=ew}71 z;LFTQ+}%>&2Rs=)*@tC(r%|(`RVM7N3iCFzZmTiIJhR2SOg3PV6}|ZGbYN{kAS;r= z0v&?N*$9v0-I5Zdm72GXZN%__Z3Nv+BY-lDm4Uy(BRTnEAuho%sv#=hSRpPjqNF>i zfs8X;=@Ek1Zrs3UgXCr=T|kuT-k7vM6qvVJ%zZ!jQ2i|W~kx4%yxhuuD`F( zxkSZ`iID}(%o1n)QkWFtoSf-WKF{WtphMMRG_@TGwVmJ!KX9Dn{SuleGD2T!(fPKS zeA`)8if+tv%@M|5cIFaKHq@2+k{8)|;sHz3zQUUIQVg5unaq|B8^w`%-E~%0n|?`G zq(6!x#j!e2e6qOAlE@0nt~Ue=>E_O~=HkNK^0G)HQ2Ef>vf06Nhagnxa-F|0)%ro=|0}xd zlzb^Y$3PMkwRWLp^F{-iuo@qyg;^<&R5R?gF#e|6Dj#$LY}T00ink>?h|PBSn`TuIGR>F#94c_+ncgwIC_ zD<tq#E&`=F?T1X-+ytZ`-_IeYv)k%i zpg~0+fJ*ET_|C8QMl7eo76Kpv6 zW+LHcxozE}Rgl)sdlYWverDl@HR`w}d|N9Uvw&?v`^@X)S3}4$pJ4y}cR3}{u$N#$ zHcchZZGEoOeHMz7rs$>64el_BZ|WDK%?y+Rq42W;U!Y<><9w)f!rEX-I=bq1hHZLS zsAO(-dS403Vl#-H#K=3pIwVP+z&*ri_w~ODjs~wd&9=Af=#-aSEZlt{Uw@ zqkYa2^e3Dn_$X-wmS<9>xFMAu+FEyK2xi*X#M{bb>WcM*@lrIWT?PlFOKI{`LRY?y zQWUOdqf27MR`{=}y5tioG@o4mJYEG;0v5^f=wPI=z$cNNqH$hezPcl}Xd!5}NpQf}lvUGCH5L&@8GwIaa5TOCABDYMHCkkCHs&o=lc zLrVC>ijjz;BEi!Tk-wE)sPg7m-9NrrW_FTxb6$ivY_;O2#`s0_X{uDF?4C((X+pQ| z?wr4jWG!c6T5O7Y3yuO=IeP1|Yx)hO4+-O&@&oqrLq(be=&lXwRE2pf;`ev&938bM zEnI*$EE?|dO4w7_7mMFxK@&S?qurea!hUC%TMWW0GhHG%((`zcX!+)I`HGT*r`Aqx z1IM0RmFnyidTpItsNG!1Mv3<>0n&@!>sk;{I-UM8 z#KXv8`KzHw~LN&bxZH5w2pd{XCl5w0HhUuUw?7MNKoX#R|P*Im^m|%Ls||pQm32HXkiQgC+i8( zc^2cPpME-H{!;hfZQYk}+!$a*rfEULfRTmR~!Sc#I!V;uVy(J3<4YD{?m zzR3iBNh-}T9&bJE;C4wb*3okJFul>3uo2NNqNK#w?h@kB?g-cJog%#VVr|a-xWMhO z5k_SDayc$jBeP)hC~J#Fvw6a3#UEH0yhY@h!iwUVb#KXYm;OQ%K0v7>)iDMwze|E* z&bgE}dAlKm%JW5_jjQ!dqaxRIs`?yn;X{$i({Ht&w zaRW6&KP@%U42H~HtdClSS^Viic>H-H0r5jC(BrhG`_aQ}XD&n;BY*3VLD?lZE7P_1k=$`MMW~U*KaWuc!0`i}MC5bn6dZm0~o< zK)*^^1SrHmuhXcd_q3&t^9l{q=(SpIUD+@xfCdWHy=k~@c#*G<>pY#zvq0? z$^{ZSgl>RC0rUX^)N=mm3K)SYlIid5{u%D?9_p@la9X*I=GTDDauEIww&K-J1E$5_ zkVBzZ7xHKK4Y<>PMpVZ`1I$G$m)GV`^?9Awzf$(E&fksOg=-cGXQ&p5MQ48wsoYVv z=*+{~G6wCu`oAc``Wg7T8CHJ|2(lZeRbI6nr;I`gd#pd;5x2AhuTw@E58R#%m=!Fx zxc4Ti6a5ca>pRn_vP3P6JXKaS#1EQpLns9G?kQXCxaQfKiXk+x_spheQ%FH8pjY7*>kBzgjS%4TCx-?w@OFq__0wsw<*Y zEESb#T&qM6C+=TH#cR_yQ+~^Aq8l^PQ>2*l)-ZeQJwC$TSth$4d^e_cVzzy9>FRjP zrBd0s{(<;Cjc$wW#R{fmG4-SgTFO$1J;dx}CA_ID*fafT6aU_}Dvnp7rn~~?($s1a zG7*TXeB-aY%mGDKkklT7O#U|RFWp^K+wbTV!@;>MzqnLT6sJgSx)Lfd@xOW3;IVx) zpYxaio3e229juTye=&`q|cs*TWRK%2!;;wYFaGC_J%;s?~w61x_oHR9Lms36FGu zP+pDkEydJ~jo%8@Y!==CtEpkSFw#oU4#)f~C8N{)w8WZ(trSuWf|QpjJ5%TA!OYEC zM>VT+60JkrEjb}*k_Uo$TnIy<6Y7Jsl0DeVjVZe|)ccNt^G#4pyX9JXb&4a9@)1w- zqT_8kG*0^|ykM^2MmB1FJ9ex#wY@BKTnUddf`vO_Dr&J!y0+eh32Sc3EO=qj)cj}V zxfU#i`>Q&^hnaUeQ@+@8KBJM*yMn{eoI3rDU}EQ@G!{VJMO>rDiQN0YGc<}J*h{&3 zes+{ZQ9qnAFwIXcNU`s)cgwC5=7~I)=M- z4fkp*m7<#O-tuZ11ePxEbuFr=J)%9Cls29#+b*`_Y{N{=qWt3Awzp>3mCt(ah;~o; zJ8fgkdRbJsf+KGuay=%Wo9vT6yv%Nm+9%1AMFxB2I++%HsqS7$gJzlF1k=j#HL2=) z?1(`#GfYXN`0C!wm?r%zx>zi|UAun163r+>di5y!zc0|I|6HI~j=i>B8AR;<8VLNa zq|Lkg)7&!KGgX%p-q2@_m|C2ZEIY*Wk+y2bl(voqtGhCv(N zNeP|1yQfZ<*GFrMB|N2#-X}_!*o{sO#~JE^EKhr<+P2n399RY;NuH&lV`_TD?t=}& z;jE^2vq>kdWoc>GksK}S6kS*GJYCx0?*We&Kh11ZPe<~eIg^es1`xy=Ple90kb3%))sjv$R4R-MSs4nHC4>%HL)`IEI9~t8E@EVR0YTKXuqCvcSr#ei!Mlcbm2k~ zHAbQeUdhw5UdoR``n8TRgDpBbT^G-cZdHoIdY32DM%jLLNvcl~RnMqAQ_Vm(U7O9m zK7-hf?>e5?+*9k1ClVn6SUqNY@tgP}e!czWz8Q_N$YJ7n8&*D5a;2ys~wJb4&6>g%okSoBW0+n+?Q04#~PzuXo=+B-%q>VFSaJ0++ux} z7P6(oS-z!Y?yPZ*ec-~;Vo^HyL{Cm3rQ~ITx?;=9@USyzD%(I0TcW2PQ|!^GTsZ)7 zPp~H2|9V($T3_F;Pv!&ONKBrY`RR#Fgk@OB0B@%Z93Xu)NkV~m(DQYzgZ&zz^PQ66 z-P1ytcte}nNMGuCbju0qGOV?wlTfF;(xaj<>xO}W7yV(EquY^#wr0BSjA~t5*wi@%T3B&uM@XB&$6iRI&gJeRkCkDh0QbiPJWOD)t-$ z?S$zm+Aq-f#U8qKBc|*=Q*Ivj1jqB-(RbFEft8XkB!3ysCDR_szCHbn4hH~l@98Jv zT@y4xG0xU6QSDZa{mI>K1|M_pB6QAxbb)$+yaz{}u)o;6D(fYObUWKf>3%t+LbdE2 z!}C79(`3E~I&`--eOKp2;zYFU(SzwkFusT^qdzup+}w#KA5+5Mqsr*X=~?9O5wRrN%U0E>;m zOlzsT{AIejLoB!jkI;3s?v3$ij|TZfQ_)|*l z)J#I;ySB{?t14r)sqRd7-dUZHN8Dk!Hv8~r2B@rNizTU-^Fq@5hEChNK`9(RyL9(v zHPGNj{hy2aOW2{&I`A8Se}*}yHalMwJ=T$lgvy~wuqB9akk4=kYZ8~Y3XsD+CFltS z)1f}?2ZX_*qI@n9@C)cmS$mN`Lyf>BNV9ac?8q!B+W5`w5VgO2}j zySW`1Ia(`{d4D)$Zms4jT;P!M;4(4Cpc|EuV!^faO}2qd@N_VE-}K&bYfP?)-t`jNYxVlQMsE&}heAxtd8@u1WGhd-QfpVKV#NfJ5qNTJ&DjGUJ>~-ayH)roLc3snTw5E`oFB^Q&2aX3GqRdl40FQZk!Ab$4kTKfiqDld&;ILT4=PK;BbY1Y~QLV)(&yu}}lJwOmI;Xgo2|a4ZbA+CNj_BnV+xJ^J zC;@ZVo`r6?<(On`QC%M$ltwqX#A|)lmu;G;E8&T6bIwZq&%CG1FK-ea~J65E2=HpxoS zbk#^mq6L#%(I3m4ZWh!g`Y^j$ROZO~_`)uQnzS)q3KS>S)>o!ak3(MBsWrhtuyj(Z zq!viAp~HNn>Jp`0SW$PCtnsY=ZNty*2WpX;1q!s+5nct8@U%vN%@AHhuR_Iu7RY}1mk?(h^{~)fn+J52~ zI{=jUZ_c$NIVULMdyZeum+v|D(0;8{d|DJI$49pm3wH`-gns(`{JjQ)QlyCV1Pdt& zJ%SSWo;qnQ01*>xxpK+P&7@`}?_$Rt zA;%}zs$r;Q$^{AB&sg|_0ni`KB8$pT%O~6q9dnoge{R~9KsMpBe{LxFsH-3fFfeN& zlDEp5#IKbt#tMy*miLq5h%i0U@&Fd%*eHs^n| z@{YAv+eiAjcvP^3-wIEox>@2f3M^dA)EO@wTNYq+B00n^A?#miJ+mSQ{YyPn~PrbAj04!9dqP4Z4vwo^W=L-9cW=puu zg8lT0usjXFJxfprLjvw?ijNtVLQ0kAZ@%^?56Yig{U{jv_}HDg~*@9NIGKGkkqxL{Wz zhVe_Smkxu+Jo4XR0SZEh>Vk=I(&_?VSCCMe-?&yafNiA0zXH&p{~@+w9{qBDHy(G! zKSE2OJmCF`>0cB-?!tEHWi*Hlqbop2tEN3dZrKX}$J|E5MGU36CDwLj(lWGys!YAH z$RQR1e7GP#!SKuF_TGI)&ls6rc2qX zG83Vwa>nKF09F*%46venz5~8cTUltTrUo^$VVDJ9`GN>P{O9CJQRFDVeaf$(Cz1Xe z*G8;T<l|h;Kd*?h>D1cq}AU+!q3oDSq%(|ppfh^9HL<5lWeV_a-|hc zFAWR=P=-_?kO9x1C#J-)?FHFZ9vVdqCZee%@DB()Bc`11iq;^~@s%ZTjdic~?(|C# z#y}fO34q2PvMskWB@J)sODdbVK}8Dyfg*6>h5GaaovqXfSd%KCJ=Ezg{XU|vw^gpY zkRpdVz`p}|zpkMvB4Xs@mw(Yh8;}td8EPgd_fre9yO+;E2h#mF=Lg_HS=6syJnQvs ze*=Coz(N?M6gjORe~MWe{7AUjWdK0j`fq@^@*jY>lmY+{xBdZ$RRpOEgCr&a2RqkG zV8*0BOMrqDygeigNfuQDP1+||+Bc$tNM8t|u~_(J-MPnYDd~NxF$yuNU~iIVV*d%6 z5GGJP0V=xVe-x5Rl+bJadOcz&=0#V12Nbe-u%UUX7E(kw_QNW!m!9BaNQD?x*;TTL zEJ4J^H8srpI0{kuqDUxa{%``OJDvc76o`3PtC~-p>$1CiQYptNEy+ZzDgE$^Avum< zVJ|oU!PWw=ulS8%TT%Q*uveA;1WcPNdw(GY2k8dW(g{LaA|BA)0~ivhurC%Feu4iD zVDo0^N3sg(bW*%nXa{az7fHUpjw!wDOm3rGv-Sg{9bP>w1;jybMljXET8_)==CY&O%Pc=NdWQ z(VZAD@6Z6hAk<(<;3IJCK);okPecXwF{Ra+ih*Bgb{B`0a=;9Hi;+(b$W41ge!a8f z%85xCGRY^HQz-UFIGgWi0ziHsc+sEV10n(|j45AVzzr#R&A{u+mv3c1Q2`cW21#A{ zPr$Ufo{&EZd7?pHK3JVyB7=vT_8j4Mc#zor#}#x?!T0}{2f`3V+~+q(fPZv>*Uby{ z4k~dBKW`woqUv7-G{lcuK61dh1Ta3R_N)F)=YwhdwmvBP?Of86z#j+>MGk1o;Vy-S zDJtoXV*5oJOBaeW6GrBn5mC+?#%Vgp&m(a*z3X2=LOIQgG)W3cJq)_z79gpBYZsSW`n+xB7u2HxjV`BGG2o+v}%@!`s{2Ke+K# zC-;0?td;*PIHm$<1^QuF`4P1iHK%oZx{Sgc)}XHCH(I<3K#NU(qs29U(BksnXz^Sx zbWdPNN<_e|#t+s!Y0AjZX3Qif|s_S zDEH5%EC&h_MA9WP_XnLo5wzR20@efwj(D1vf3Vk?0gV{&k?)iWcsek(Z-6Q!5`U}+8 z++GlJ%ADT?J~*iS3VtGhxhJRm7jq8{^AB_13t;X6ZL)YufkOQS@tT)0B8=P0y81+g zpP=PP10wMndkH7XMI6eGpb2AgWfOp~cY*8p*wN_8>B2(+hN>WdBhRkv?#SFV2W1|{ zFvAv`NP#yP7bxpE{6r}bZB`swh+RZMDLMfBgCc@*UCSO7jV66cJ{84s4uJ6YzI20)f$+WVy!Mr2dmoEry8LZrtUx#LhJs zi@75anGZGAi%VWsJzb*j?nzfz=k{>Bem;FFYf6V?HOw)WOutGyvl?x0jimhgd0reD zd!NPlzwZfhYYh|^yY8|xO43Fd^~csnF$h>G{7RVchbTI#w$SKcw0TSY+G6qMcz?WS zcTxZ#h{yN(%9qFos+2O))K}4^4s5QNhA7pgA-kOxF z)`c2L5LUz?yo<~5?*&>;ca&IMt0sc^R$*Sncty0~{IXxSv=6;&h&O9q837v&pN6 z9X>MA69u!Px?0XaU)dcX9D)k(O?AviqBoCB0;AP;Y-0(u%}uF$IAa;?>W-Z&Ky&ui$|(zbR&F? z`SoP7Et?;|$q2@H#ua~$r;Pip#w9at8@C6Rc@4sQ&(I<_^HGAQIXx5ugSOurj@^-y5Q)Ji=$fYll`D zsp)C!xmIdHklnF+fW{I&j~b5y2cu|apa?+)r+`wnwRpK{rkBm1dpC<6eWkM*#9ExF zLDFmsn=G^Hh%ZBHGCS42i|{zBow;WA*V@2&DKHm3#WVe#_VktTz)w~d#MMT)!J9oT zb!6)ZlH93vyPs{)1N$!}>et0qZKXBYAO4KHE9NFE5?v&8%}llye*tP7noavlm7*t( zD|1<56(7nBNp>TQ9!JYi{QrT~05VnDT3F*A_A#fagWk~U|* z#4R%p5_InH%rKu;YN|$rwxmOugln8ei-v|$J`McaoX?9kLSxiIFPI0IVl(OwW3+m= z0rxEUw1v_UuouH8{`x6)CoRe)d{Q&1t^X@Qd`A{TpbEPbPeF@C@u8FPrPpYF5y1*H zXTH)px$s_EV(K$SGA1wvi!eI_%d56hPR>h)c@cUIu;bvudVJ!`*Oun-^is_1Or!X) z;lY#UM=v^avYfs`^(HT7 zvtwPH6rXRg8JraqDln1V8BUqHHukSK2jF%VERl=ZY|~h~7bR=ZWYunH1I;h^Mrjy| z&hTB!An`Vnczo0#mR_Gd*v^lN+nlcJ#RE3LJxpfMk+9*e0 zJV`XW7~nWMwZf4whkeuWAv-~3ZWQ{0X3MmN_)L2NBR zhTvgXeV$<^Df(ZnOD-O=v%}tu8Hy(+ zt1$s06Zs2xxwCG^^JPctaX#3>&yojPNFINwLdK3O)}8d55H@E+7kjTfO?ZQ_9o|7> zuz}cm?7pqP)dOp+GNx4JJxuN{knD^t3E7%`>NxMPZ!98NVGs~U;ZDWZQ%*H@@)|A^oJK%9T$o+q%aS^x%=7w?bEUCHz>bv$Q1ppW|W zNx5489|`>$yy;&=C<4qMm3$7%pQ@L2&VTq(_3i;E05TGkyR=d}jW-Pg+Clr9VEj1? zzf=Iw&;M_sHz3raLJ1gT9qX^t3Vyi)5F2R90>u6zrhl%$e;oq?P@sp31|5@&c@mv4 zN+&x%MK;Nm>@uTg&3Kxh)@1Jc;$_}XLfOP#zB*hllG&geFB7qSGsJ$HVUU3CkK`b> z-jxTj+Yv|f1z6Gxfo%^8%yQCZ0tE1Yh5wc!{kKZ}KQQM%)iom;kw0kW--UDfNb7%8 z^W{Z=cZZ+{XVTvxC)cp{(CnWO*t$s909<;c~EcToIkH1 z2UalV_5g-p4Ge&7!n^@bfK5w&2f(oq)MvI@0F-m_f8(*NHV4`@KnGO+`3AzR)&Pj- z0gDCL!#{v|oDon)6Ab%T1c<_!wGm;xv@C;YUHMnO)X?OsuB;z#rCD{Vk?!)_H0Fcc zSpE+0JznI4BCtbYY`6m{_~>lNV^DGh`Xab6aOvus`Tb}rf`UUxe2cTJj>Ccp^x+1% zd8!Q98g&0hUA*Kl9X#j=8QN>~Kn?X=&$=u-L$cVpB=`6z>YPeaFhkP@jd$d~()q}? z^B2dQ(sgCqc{*{Mmpc=A?OLSgG`n? zhFd-UwS|VW=9Q^bT0;xYe+ET1*1({86GLa2S`Z?*D4Q!#ieV*zE)*v?N+4BFFNghW z!Qq|RR_$e1eiP@of6yw|ZxW7%Mr8>sCcp@Ifw zU-=Qi9fbQI!9T}PJMh!TipSD@eXOP2jTg{hjp_S1;r&tW3oq-FecY}Ru<*NzTBr86VZxR18)Wdpj zZyea_Q&8nZ*mh=#hGmCtcg6xckPCqd#UhAr)W?!fB;0JH9HWA)d?cwYc3*{kufr_k z|A~Y&JmDH!^Ht)PkXL9mN*K2HJ!mL4BcYstJG~`7Dk6#;8Pn&dB9gQZ=eT@*;!k~? z);$gP4X-Fg=O5sgl6w;$lU1`fbPxPQf{a8VoA!F=E0mzt@DE3GoJ}F#_o$;?awaLM z!ovFS8cAs5kQ*;QxSRZ>Y2NgY9IrUZhZ_51rQ=ee*%Z>or~wiMvFsGwiiZM&-RV15 zNroaUqc9>C+XrPPG~_3p1FHp0=~_P-98`Kuq~!5-xxuQyc;Rs(@t>rIoR{s0Eu261 z5m3PAQDc8(5s35HQ?=Ncow7#T5rdpV7qG#El55M+AH#7hwfW4gTQx0a?c^Dl!*zlf z4&)ntQK>UtuL$Y#8l~O{X+2>Jw`3Fz|M|@QEk$n>j(Kg_4R||df z@#R;sgIa@*`JrHg+w%1|No`|qj@p2}*{dSj_rBeOu8+$Lp4Xlzj;|!B!AJcfW-Mt( zw6lkBL$qb{QhYdhd#vV;m35dcZQ>)k1=Ka~8dees~5G8W;p!*bV z_6L?7^|E5tMOCn3fXGJcS5OsH$kFA>+e6HJ6^DyuXs;qP?`=g936>8yyOHw1U-oUK z*CyLBDBNo#pC&j_qFUd6FpS46V4_2caR7OZ&u@g!=$Z~Y6=r4M9Y$zD*E!#3&`}2W z{rDWQZ`C`ZWB|J67OeNd3b|~spO&m`yN+`w@36Mn;YxK*L&M`Hq0y3B-Xb-NyK<_n zJL$$i?Or>cGUa3=e&9R~Hu(w`$wSk=UK79ReF`S_s`ilKUBuIMo-tP36r-uXV3obXMZtbox3!{pm}yVA~nhfB1Ns7v=q{C+CD zfxt@Zb+5eToInKlPpcg>s>oDj=9)Lt`8hC|C0wJ!n=-m}3f{%l9uqoekC%AkK^7?w z(8|s)IIR@>#=agVoKX;BW!S;B7If^Qy^G8C)^|oz<1HSN6<93MKgL))>fEay3z6pH zD+Z|9iW%Cmz#)2;_6@4+Fw@a(BGrPi7U?{+3gVU3)jb|C)aWd~5cqKMyy*&R$}Gh6 zwI2D-(gQ^isC=vJJ-sag;jH-LrraGlm6J6eKpTAlZLmdGO6jkJCmIe9E~mUA>3o!| z+~7pc+kY*0BTCwpxh%U;CzanOFEjKo27)&}HEKmGiI4zJd0kc=nT(Jw(&yo^22If% zXDXcIlJnp-$FZv2X`{J;c=*Oq_+ahnR#IlGRDr`94eek+kJX;-&eK@v+3S1hd)bA3 zp?e4Sbm{v9?z?bKP&P5Cmz(V9r)(v*pq>MGC0bHsakuEYHe%py^yhI)AC{i>J z3*?*sJs%CxNo@pTzjpq8?+W1?m&1XgNJmTaqpE_E3!x|PV$yJJVw{4eQWUW>ZRKX5 zz+l#wM$1=43(Z`o2U9h+OHU^A%!rMyJ3Ywo$R^p(Ib5cWobNrw#hdYfM@HVIT3}mb z9>>tKxhDIcIHx_&;herQ8s1IU4P88I6uDQ(aMtGUJjjcg7QMxL%HH)_VuJ_5Swld0 zZLHZ=;s%){MgTmDu2{Y1ZY=GvJI+}vwhwoA)}p_OtW|c+_kOF^sCBP9)%NsB;+hcV zE!Zkjlr})DMtlLwk9p$M&o~^;_wJ9y))frV9G`*0jI2Ki_G_lxp1omvAd<8bwC(=1 z=Q3s1@2&6{LZ~SvO+=PGx9kPQ7Ab>UKy)MjO#R6Q&n8I4u1Y8^i-^Onbj0eFxsuk+ zQq6u@vipj%AXyAvBP`VJY+_JoP!0w^rfCm$mbHY3{a2zSg!`iuAZtmgiRl^jB>Z@l1bEPr_?FrO;01qT^Ctc z+ZkWoI9Yu_NOD~j@R?*TX8ty2_q+IFQ-S( zJ=11>xc1NscVSG`5Q-ze2I^0lBtA0-R z!KoS^8{0}s#H=oH+3{T93vcMnBhE_Y>}X&yG4pV~6cAk>i>M3LYozqDDfy%#`HNwH z<382y{pf^|;rtcd^Lg*BsElTJyLND#)h|7zZI6B@PR_Ot1tYM?P%PYl9^T*D9SAovX1&K-8;(nQJHKWpTE~XO%Rah=bDzX@tl~Me4 zbz&a{MX`2E5M)LAw9>Qkm`yq~z`c*dHY?jN19#?wDrX1=U*DA#y{$b3oLhb#U&z25 zNZei@DNpPyXVx+_hjme>RwfW#MfL0!n>^r-6mD&p`LB%KajqVjJevKzW-#6 zCykxlbr5TD9*a6#2>@a)IsC(@mbP_r(>$GLh78qLAFwU;DFkj0{3T zEQELd*#01&6i&T$C#O5ejd6CS^i&DDj8H{pS>GHw7slOL zW$o}hu1+bMM7mU>h%7xlENhDojb3>-4D3AVT(D*qmn8i#Tqy&I`Y~$%t`jQ+AD+i)DBaN zR8=rmch5v$Ky0{FliYK}%Z#<0ik*e`3oLym*tOPUY{pLD9wFUrBmkq7ILK|p*OgvCka-24cz z9NF7)vvVw%KjN@t70i42Wi+Xv*jew{Ji*M=Iuwaur)vq+k7G?>>nD^~3-Og44u+BH z8)IVox52U7V^ApWr|M0lzLf*LpNLdp&xYiC@w*pSy`b@)367a-#$!t=aGb7i18$C) zBrElJ3@kf=VtTxQ)vh3xMR{qhSm`Je&a$NJzkqZ|xmQAOQVdpVh2W&EWE-mms_D1T zk@d>WVs6&I*fo9LoY$STr1Lr>{p`VHecQcnAtghro;kYw<5iJ?6yuwYB2^|UB;%=u zfbB!~k0q-_bt1v-DO|2%KI6o!dh1u)i4R)q8YWTk^T z1;4C7LDTh&eWKeuPQP%hjk83@G@d@-#XZo$P-gtfLE%Kr&pX9wI7tU({xtX%isQ{4 ze5uvUg2%V?LY0^TX5kC$jv&h{GCQXKZr7BHeaUwj=JZl$pH!dW(>UKsT!U_bN-gP*TSuuC$%S1J|F zPHiz846eSThP@Z|#m@BImBusGEmmF~0bg8{LBp>)Pd>|Jbi94ZxJv-na4IsQ7^=cu z9j+*R&ILbgcDM7eWeUqHsM2(*=qtAjanPIhrgRwI`#_Au+~lL`LuWaSgQ^blYO{)oIwB91N;>l0Nhztok=XH8T&P#C*SdcN z;rA*WE`+0U9A}P_BBg?0sBTa7Yy4AZ^I|9gE?C;G$YL>Jrg?{zGDA%5uj-}FJW*{* zzFu!A15XiNPYp|xU${e7kqcH)_RF5|@JzaR`ukLBdiwUYb{%s9P6(34Lj}q;S#Im6 zxWsD8P=+~ z_o|PD(RZp_ZlT=T+gZB7+wy*Oy}o`Z=zz0=$s3^4=ILU6dV1Pgv*FRq$mno?-zK&~ zzk0TUVM0&i&&cZVdb{ttaXC}r>F{{CdKySK+es*Q_A1MX?Y~XEK{v7C(XQv=^vRZ{ z^U21Yq}*OG3#I$GpBq`(T08jN+D?sia=QC=G$8i!G?r{~Bjtj2&S;RSQ@@q1+0N!= zX5;N;UvpX*XT#a@R#ewybk6;Dw7uId#pMTe^GSc*VZ*6g-Q{Wb)JJ-h_fI%!PjICxy${%F)14_?*i<^V(pu(aRj_mb>@!@%F)i$+yo)CqMW%+( zx?4nd(XAv5DT@~SE;1eqmk%83r$dT^AR++rz^Qt?iQexD>q<*Kau2<`g*@$6k_zkf zSJV@5-#Vbdi9#6at*Uw}VI5tp8)-Yw$2O%Vzd3<%!MiN%#Dv7??^|HXvk(Ss<__uY z3{Wx|zg*8-);q6<75ZkNG(c(Ai~CE{;GWZ}Lqw&=PoO1fY%yJ0qO7ypO|jK&<`uwQ z4qBI;VL?qYO{bltm@v}NEb-WOA}ytPd#_2i)n?+YRMOz}rL^h0(`)C^;2A(ehIwdz zPoN7Zpi3p96yRa>B!Hu_Sx>g{ZGdm3(a9BJT#K|Bp$g=B96ydvXVZYfxSwL z^ei46^i*X`oywup(KF~o-zki5+4KZcIGlj&cq#<^d5Pt6>3EsUVS~KWvfoMtjG#$9 zBl?qgP5(ehyXA}LHl2l(8XV0C0=yl*4*qxC1)u#>+AWnS>F+MjIbwK>M;wd=;J@E) zkpn~h9r`m=l{y@l)H4va#~=jb(Z2@gMf|U->1>nCvcT_s9`MF@n)4z^J>MG)@%}Z5 zzxF^uRrhC4e+{AvNIyaSJx!I=D%^i&{8#5Sk{I~ELro~Re;-jNT=jp=?ayI$790kV zcu~wi{5|Wnk0jXNTXuSNVme+@&xNR`8sJi28!zUX z?3V>h7npRf!wGYn z2Ya{L^|F&?r*!6PB~AHgp|Kh9W1sX2@6>p)Rf(c^zKc`Mykp;|Hel`mi)9CNQlR<< zd0~Fz>+5{ksE&r-XV`Ds!@duNBG@x9m(>4dpi&L=nYw1?Bg`~+W)SWLP4y%P`<{v+ z%-G|estacIp3TK<4Lz&VJJV+E0m}z#VX<+Fi$ptqbwfS1(Tn`cy)k9<6SXIJIsLul zg#E~P;UtZ&qX&?osfTt&G{HV3lHQ>9rDvZ(kc?8XAFtWjr+s;>SbRZA1za+;U$Sb{ zh7rg|Ex9qXFcyc@kFT!=H+>_4H-yslHwrfEOw(+s%$ViXH$PiY@jGNW4DjJIv`-H! z8&@rCmyG>ft{yVhw1%8+w2B_4_Qh-r&+2l@mRdZuo#Ko(cab}>o90K3tab+0v9j3> z*4{9g$T68ViYCM5mRiZP?rw*>%U|Z7SfN`pFGai@kbD+9OnfB>(cF}?X;qNj>I2Kp zsS&-mKE=BtiU@$}7)Wijr=<`l!KeGw(YHJ;qWQ8Q(|8Tdb@KJnN^_H3B}c97zAdGG zNpWc(nEVhpxx7)AvBsOkP+!I;Hr^==+I`5B%C$ zawcCFg^jl3p6+*5?208yA1nmgFO)Mr@T*qnf^uh2n!&~KjE*Xx#>d@~&Jxdif)AkH z#|qSBKM~ZM)~V^LjMhm?B*wu$bj<|cpyH2pf=J{uooWTL*iS~NI5_#foVes0cXk!K2;XAp zllQVF`v74!;$KqE4aa?C`^fDz5^v`{_6z#t!2cbROVVlbg+|XoPPOi(K=NSIBrNfO ztlXsLTIYbJgH~W^864!09no<^d>_`%#zSX(bfS{*C1z;<#_{c=-N)L`>`6o4w6252ZDYF0t0@;WmsbO%)nI0m5%t{qJm84!CnAD#QApF zxHLD?jzzdPKmA(wU1*wD*U$fxH41g^I(_31XmtNM+be-B^cq6 z;fS$B8DmU?DQC2uca3No_u?QYlApuR2fe(~QC{S5J~$WbPAs)% zCBXxQUpXtL%2y7wFne=NC_jk3mtluM}lGf(-v8$7>f|=STwo0;(rl?|@smPYgaeVqagrDVL1eU2mE6RR3 zJw!{pevSA2!i^1=AEe54EFsYgp8r<9pfGfo>9FBazHU4C)w%iR`EB5sVCtLDDH_Dv zjHsWW%UE3C*&IDqJsi>MSNbI_6;~KkrKXjf_btz(YD$HQ9#9=OO|V>Z&*zMgmC?@l zJm0p`T?Iv1L}*ZJHH_(K$9~b_K3YaWoX3aOeeF)fxiDy_lFWLokq-0^xym1#`d8)J zgZY8^=P?YU$yXGRWHmxmJeuEcpTvy{p#2kzfkZ<^$Oh)r@4k`)Jtq+8l!}H=r#L4( zX_98QRvPM|Jg#pvgZurOuB;8+5o8QHeHSpM^x21&5&sOXl5HI?35Bn92Ym zqAAfG@-M=fHf3kSJxZ^41vr}EHIgKR#uXFVwIF(xgFgcaP!9r6*OJ*&=k7lYNcWhf7+v(W0ZR@@I-g`gK9^-w# zgYTrqShLpA9COv2Yu4{yC7&T5k9AF1uBr|t#AQcl#X2jsO}HH4!M1p9dUbfhS>PnL z*wG+cIQd>|;oecNKwBh5t~vTqCqdTka7W-gLB_^)6LIEf)q+SCj%;!U@vf^q-cm{G z`R-`1cb0CCW(9sX_iReuy^QoezLRB}-x)t}KN$g3grc*zJoc}YX9>r(rST)ilEoep z3@i9Ed{u+$hpIyvMm9XoghXW;6i5WE^d|@0fXlm+2^PYD<$~sJfC-K_-GT~sVCN=7 zwQ!E$l_bZML)BpGNioD=z?UAj5|AL-?J&gT;X|RvRB<3;$qVxYB|1`s5pHr95aB^z zh}J`BzWdM42#aw_nCY@e{$8zY5%()-dmvzOa;*-9SZYY998F)_=NICI;D|f#$~k#97#nUzaE4TT>vu{; z>l8{{97!;MVrQ2lxFhkyQTIR6Q(ZbQ7l$A3(`|t(T{O*FXcOlc8=(L?apcN8kvVA_*lX2>A|+kVQwv`$yqU&hg;&#nzgt2jq|cCb zj~xE?@w$t1y~?t-=#={dkjuw;X*p|0c53j^@3z54_goL>eFmc;O3L=l1^4smVCTK9 zSf=S#jjP(}iNkxRz4>_6ca%Bu3kO|Qq+f}~TCyvdCcCqBx zBOhnVVtL~Q!iA}lQ9n^X(O*+Xwa51sb)HaD}tu&R@Y_p#eRY<+h+(of+xQ z=Mt=fmmrhj7|fRRlNQl&y%F!3znQ;T67rEuEx^_Z5puD$?+;WoI9oJB1ZdB1S*-y? zLfm^zYNI0$b$Kb(VJQ7E@Fd!}te9`{-u!`7an5c>->_Z?!tcPM7;Yg=5DdOD82`6X z<{Xsbk5s#7FplBku_)t8HFm8N(ZvK$+TXH0D;RK?nUpC$MEN#o9x#+V?s}NHXa9p@ zjTg(hmc$<#8d7QJ=ZAKDLJ=gd@X%ncoK9tsh~^o{_54ol(u{_ll=qn#k}K_FL3I)~ zBRaG+5e1}Ehv~F`B7q%XV2(sV66YzN@mx}(h0qVp`%bO{HN);o*|!O_9d)bniw(e) zs#`;TLF0P%_;gOg?gN_l{pMqKUUsi*m$L&k%MBV7(~b%UU9Jb+elf?NE>MrZw80H2 zNWqLh3pf^vYDh7xfG-O{`2_sx)dBKQd*AXp`&cu|!{}9Tv5Hmb3RQ~aDRiuGDysP59tc(RsCKKuR46>$u*&4^&9|xm z5{R!<<+~{2i0QBiGEJ*-JfRBB=<-llc_{eBJ6VT{DB}I*23Ww3W0;}O)`+#>iQee7lF>hS+RFNRfUY5LWqo-B zZzk*JsU75*PIZvoV)Mb9Kg!Da>i+5|dqsLfZz#`?2FTD9LIVV<@i$||k_{^i=Y7!! zsQnWy>&ShT1rq-T%0Ox;d_{c4;XGgJ@O5MP=3Jzu!+xczSpOfQNy!I@!GvX@{qWT% zL<7>1h=stugco)h{tsF^L8>$21{HabJ1EY`#Wj2URZ=;iVpaIywKslHoLh)Dn#V2R zZ3+~mQCHugy^x@2 z__?5Iik7X#fuyMLo`;aql=!8<0mV$E?XTQ9qKo)>C3vFpf#aP$XYxU;T>5^vWo^BW zxhG)FRNY!27f`k;zHOjusDc5I;+V;jeq& zo>BjPmiUr>+ycph-he5}P~b{JCM~nS~1p)+l2!>_MT-gtq$S zy!9mc6%=?dRcMzBX>SyYp#oZOyXzVRDD&lvm4iS6PCHUDJ+Q-?c)2exD)t3&uIxbH2CZN= zlz1s{K*?Bf81l7qxn3X7PDfY~a-_k1c05qTL1(u z{5M=U{H2d~x{KV~%;!@jD+GW;v|@w@Dhwr79ONGphlWu5714q}3pmjKpDmYySmDdR zcU$1A{3SqN;7bk?MRPUa(BE8;Xpx9A5k@RUJQ|cZ^pdaPPs|?1bx}wh2oyNw+Ae?4 z7c~WzY67r}9sEH4pbp?C9O;qx;u^pY7%0i@>2~4iHxpMy0Ce`46AKY}Yqr|~VQeM- zeX)`^NDyc)SXD>@T@Xgf9QlDFj~}Lr*WE7BQzf8vzyXl~Ghoj=LBgUj83KDSHkh$a z49OVx#5lPhkGZW>K!j&0;cq4YrNHi# zB+(Ci?bJ^fqq4oG3ql_O(W5|dSr5h&U&}!Z!p4}m@b_2&OstPOBTxk zl8S7r4x5UMpbkP{{?9x+fc_`S4`+P&8{+eT$2~?eUpb%-$pMs+%sHK7+g)AaEND)I zJ(4@Ja1x<6F>F|f7zMs^j)+sVKqBn&1@s5c#-Tz?9I^U0Ook#JB=XRoOVSyF*KV3& z^nepR!pP(C(GUvVeacFbU&?>J5<6;Pnw4S}ccP_O$sgNgk>|`9z$W1qrVip8J5_*E z>@?`j96NK>LBv5l5-R9@iGzye0imH_U6T@&42S463QR_cl>iP<$`s-Io!%ly{<5o= z=pLMU1S_RK3@1WS_>g-?!Fk>){=x@%qUe?d@rJtk>6@Jwm@Rm=C@YYLfjC^^8wvG~ zfo$=eVu92GuD;0sUVZuhyZTCis}Ja#3rUnmv@I1ZD=GFOU?AZ|11b6w5vryoqy01oNtr)}6O_Ib!~;feKgRzG9%r8K&H(QGJ)Y+ z0{Oqf_YC;|gl}eG_y+ob;oA%}C=Gus7A_6}aj~;n6OD2(sA%baJw$n9nupYTmWcM? zu>=+n)f@q1jTPxyA^_-xMHFAY(xOBpTEmaB!Y%9`=t7~*f&BkGrpGAA(Hb+~crA*> zJ4oRF(A$)U61LSFb_gH`;C>UC4?VpbGgTLBkOoBF1dV|)W zhAVylFAtH85B5~4_K8WvRbU5z8>0qRC05|ABZLhm9{bYsDaUj{du9#1jKM) zp~_1h4ZyP+6+IPRWljTuc4U|uI}u0`Xj|2lmXHx5No3yNcoh0K9!ZI;vGzcTz{?t- zLeUA9fCf@p;+4_+%K?VVn-ASk0s6Ho-N7Wtg31G6%M3DC9-+~ZV7WZQrOkK+E;$sa zz%Cp1!3AQPmEgs^4+Y0iMXa#XxwWuH=1V@*-n)_R76~ zRli?-#FPGhCVyhclNPq+z!Uj2c4dj!#l#CT%^UYZX%FL8zEkB^sF#g`otJ51YB&3& zx-fD#O6>Pqe=^@dU@?}Ba6c&Yh*0EF9RZL80{EM zfHFMG*(-T!$yb^zeQwcf=*?)2x2#sGs5DsY)NAIiw=-^?j*7;`TEXw!Q^;N%q#@k; zP*WD*RfrF_Nc0+I*m_vv-!a>5QOsq8XuL`hazUWtoWpn+_XLA*l?aR#CD2}QhvM*> z2N8as z_n@OB#6l->ygSnpA zNVt{qV(!X>zn*eKjfwPj^!8#_&P;Yw`-?`HnE!m>svKK4(Ou2U`aF7E){9!Fs9vS| z`pH+{_Mrq<_56Mw8PG#rxXFli{4066xQQ`WB(0t02*xSjW{~+7PTjztE&jJrDFZ`O zne1Ryq(u2R;gI%bxHBH-A=#y$H5(E*oR%MW?KEoNrPBmX`7IE~a{%C#QSYqmG$$Ge*49+iwLN+T**9 z#dD1cpQX2b@Y!8|_Uz@3qFS9ko;+z%mrmoyl+3hCMbfjthabMUBBbWPSVaK7l?krMcsJ4+#!grilm&9{KAK5mdhhn)Au>` zqW7#&w~Ez@K1gX$l|Sm^^aA97@~d!8_GPt=Zca=ElIeW<|AY_r3v$1tgex0Fc|@P} zD|;3ub8Nt%EUrYxmvt)FGT+yq0S!RB&dh?MI<$ zdU%#T^XE=mu1JHOhmf@jiEiu(Ppt;J(#0m)CPyo)^%F9{XrCFze zEluzxVQ3T5fD6iCdAEWn{x8Ilbjbbl{+qHURhl#xs*EPY$yMm1I>OfWSX#7Ms<{nH zc`pdP4jD}w%9_!LGij80Ll3R?Ka3h@g&sSfTE>J)>&%leJgRj(8ChdV1#i6s-ka)= z>t$*AeD9tgFXzjyi>DZ2yWEslBq-LzXA6|y_4B2}kRcYN4~BDhy>AIs=)Z%5T3jFI zCk>4{T*{Y1@3iJCs$e@+X;{^>UBaxMufGtH;$>AhOGRGKS#HwKTRMC`HjVUX{n+nH zl}N<-aVqV~?L)EpMfM7z2vKYNjYc+$vkSATDZudc$meqIo}o`~a_r9#-nnNNs%?VS zwT;0>?c*CKhyeYGqtYrq$3=8x8Wu_BkgWIT-PNdY|;cWf%6Vm3t*b`19=pAH1b-3len7K z9Hsnc!HV8S%Jbx)4m<0jDYGdym1t)#*mU zSG1*ZbbAc#)UXZNE_IZRc!Kd~7qa${k#ReU<@dQ%oPL>>`OquJd{-3?4eqYx3-;Ta z+;2*sJma{mM8#`nzJW1)EEeCS6F8;105ccd+xT^$NoG}Nr zpC#7It%zAS`VH%FMop{Mi$;nEa&i7Xxb`u{X^uDJ=60>qe(NdE3gj#fax23A{>v(D zci#*QFf>Q9)Uy4KnfHsaFcV=fGo*~|_PV`Y+PyE;@QqgFGa8DaI}5FD=Myr;*(^St z+<6Snq=gsLf{KdHc!g(4#mAsa?#>_ZGyj|fX~+v79pnuQ7IOIgxMfYZ0`p7MG4*Pk zM$^9%NT=Pm^p`diH@k19qB5JODoEJ4hMi%sR{M6A?>|+*u5piA1m6?FzEH?}tH`Zu{=lsAW7t8w;kDv`Ny(Kf6OHZEhB_?y6gB&ZEo2lACM% za_{~)?AX0#z3_a?6w-Qe;a~aL$FbNazZs5bCgd+Bu_%M%(se{UUX82m^z}e2uTZ^X z$1iG3ruCtFE`?Vp9fZR)D>F;G!H3i1ap$hDoD2frDLK!lF}km2!J*g9qS|Y;@cinB zv-^HQ%+Lj;7q#PqX$4Bv@#$9GY(qfTNGCvY_Fr2@5`aH%NE>=a^NrWoXz^Jy*;4`_?GlA9i)x7WOuP^Nha1vBfq!ObaTsiwc zj7Ag`@wyjGM$h30_o^8C1&xp~8AXrkY6AE$Ywl*6Tlk8V zO;>McRnYnP_#_P+>BKss)y%7nkmb`Qdsj)>Sc+@&#C-nnMt9i}-owNd2OC#$t*4tz z)-O$}9P5l9RR+1r+5?YJgnv=`Uh(ofWIAlw3z0di=fiJzS@ zPlIh`H+i*{d8zA%V;N-G`(yiSQOB6}AbK*B;ZVonH9Q%}vLthh?9Z0l+|9>9^Onkg z0DF6^M43Irj$5@s6>2Vw^QT?B>akEU-ad7!fm4U@=8Oyq_OQw75u<#jQ`Emy7DC$y6@Rk;{U+F%j+7n)OOYO(02r zLk{SR@97sD%{X-!YaV=AGKFB;KW4~DLzBY}y2b#sMcyqGf_yIwZ^j9dh5oUI{u9)a zv1X*3bhS%*;T$Hol}+>z2A!Es+jC6Z4Fs^J6j(c@bfGH0<|Zl%)-}y871yR5yHsxL8(VBQ^`~qFkQ$nxuN|qhVW-t z*()=d&zVvBsAQs>x~2H%X(5M<-tsnP`+K#GPc536_SkQlP~Ph9b9JDw1%0#_OTLt+=V+$gWuW%!@Q0VveFTyOA)VwJB6 znu4bZW2Posk?x}4934wx9xKN%3g66-{WBxVCvq|jZulw)-bub&xfVvzm`k1NS-LHB zzg{OWtM+NiT9X<-T>Zh{F5f6sd&e`NJMEVFKDfBj(vUSX-Ho}#*LsbH#8`wp7rKY-!o{=UEiBbe!Gr4 zZ8(i(kUWy%Yz%@7X8T)lD%kHbLcGL@FB4gyoIiDy-9Vw38p9W1i68Qe_r>uyLQNFR z%5kZt`kd1*y?inrk1LaiA6&tr<5G4$TAn2YhxpMUgVt^bniy!yOkKai0n*SEQgC=D zEB=_iyxM*Ha~;sXY_N{ZI<9w)dmKJHmo!NIc)kLw@iH{mmV#t%8@OcRj&naBvWaf$ zWT%i(%3ZfWMt-uMWk7d4tzc?%yiYVxD?K>Pdfpc7JquuHvC_y@OuTZlYS+m>?3bwp zt+wZ2-0d%Fb7@#;q4i>Px?%nnwWhC4a-#p*D@sUI8F7@nbN4MW+oUUkUDIrvj$`E% zeBJJTrqVDZ?uWU=aXd^aeq!?3&N;zlPPx-(?W*tuyo`P$&b1TM>;03&bJ<%P`4025 z?mE8JYS0|@F5~JaGwgE{nRi66K??Wl%i(N2p6tX#HaAD7Se=pF=>rkpE!K1|VzorW z(#?nIkpI4b-LW}bs%?rKDC}c%zu14f^>u`7~6_}4lPIRN0u! zyI$w1JYsDVSQWpbBu~jQvnp@iR&6@$n%wI--YXwh<8FO$-sfuXUdAq}A%qGO3|&Mp zD}dQeCoa`S&7gXo>;05orm3W>K(|!}qpq%6Hn5{#qb0SYcR`Y10mIo!D z@)GEm?*=&|<`y+bE_q=K=e^XI>>^LLoQsVn5lkV;JU7RbQ;TC|4*U!Y1D|edvOA+> zV26vdG3Yk3d>Nk?Z!d4VLl3XBzxX=1p5L4D8M((BjgJ{DS+`Hz`e}F1N#4|?d9rh6 z({ENU5*5kpSIoE~oLAi*#@v|Af?rL8%#4##q-eX|PCl}dZ_VLEdv^DxcL(vMIN!Hz zx-dE4UVJ|JZZ&*nWj`)`c->F989(h~<~{Xmu^ipLQka6Y2TF#U(2SGL8k8sAEhaf` z`aY0Bu1Q5K2a^jKBt)XBv1Z(w-rN%%+P&0HAESmSHLjY)Yk7dhOJ~;=UvXkinlrr8 zty`Gv%ztUO`eMw*>y&!w|UgR z1T$R4a8^bS=_Dj6VwfV*!&Fg#6#3;J`6P#|Yyqi3DP1NEHR|nexuNAB9ZRUMqxwvb zS<@$KJKOp$ZjovJ4ueO0Xk3;t9vk~y?PS|YwWz%fHr1Fw(9=rBWX0f+bEsIa<2mA* zyA=1n%^qW5|Uv5_qlWZlC=)+#(BmhTdUe6iiH(Y#RCm z^i4zRHlDJo(5@IZS<^WT`e2HcO|yLi+rWdmKwn={-+M3^iF-miYv<;w9=+$H;7@IV)NC=)lE*u_NvGP&;)u-L@vxWhSHI*A0U~5BSTu!+ zck$Ys>9&_S^m;nBKdlo?euTfUAEN$|23kVyoqiplwJ*%6lH8~Kdh&Id8G*6wh&PVbxo6dQ5g!W+A7RPQ z;T3GucXx6ezOKMH={x5SrS|_L~&k33eqjzPy%9lXFgU=+Wf@dySnkj;*vwy}b)VN#1JmZx{9q9(cO-Q{Zy(bYkhYql zaDg#7LzBp9*=VeHXe86hyS1Hz&ZA&kJHGlsR-VdjkP%kMVh|dGJyB^XsWm3X^q_96 zzm)y?(Far=LbOd$^pvneSFmZ!T^v2I4AQ$}f4nVT{pxyuWVx^UNOR@${(#6T`ChLl z|FSB)S_JhwF8nfhf4k_E<(ql)L)Qov`t!pPom*DM=7XG&k@VOyU(uzj;+N0TpS0Sb zQ1wpcXpnJcAA6s)t7y;dTcyox%$7{D-UbdqZi4pXsSGNh1?02jHzia_76kz}ghc=a zg8WWI23!_r6u57M;IA1F?1GMVoZlxfVVN!m!Z)aX<~j@-G-W#mV^(q6kOo~w+Igpy zs0r;HHO@U&m@%4EuPP&D>N4B>kgYQ2s1fU{@$rNnHz0*nt0;1u8!aPCO-HXDpb+g$ zn@7)pl{z*vCIp-I|2~zmX{;HjzwAu3NY0tL%7Dy%i_HAN{b@ZUk(ZSvo834M-ZzP?#MDJc^@DYyjf!qp`SaFjR7#hZb!dJe>Wm5L>4i>5fz`Bd zZaRa>wbAZooXuC0!Fprl@d-j>ON&f4&4e=&mc>FTgR*^tuJg}6+ioXm;UBDh&86FJ zF7-pOc4%Yu<^G3!#0O;Veaf9nTr~@b?1828bJ;<&r@!(;EIZSl=T?S)2@p4031LMc zB$lwS2P!+6xqd^@|2AJsUAeMzH<`z{Zs{TrC2b4VvX?V)Wr3=YHsO81`c><8y^!Km zqL)cr`LO`MqNS1O8H`SK5 z;UjP9H$B`<)WJ>zMYXTxSn~P~07cZiin>(S0NP6PQ$^p<{rm}(54HNBC73}BH|$<^ zCk@Z8z|Wp6LlrAGJ@=eIn>d{yk#^4|Zmf;fRpq5lqoZ{vzYV{QOU#b^%H!{DC`aFq zI;cBbc1I<(f&$FMzRtTZh443)J_~*mzZbRMUHkx|RR!HJ6j>6MG@NH3S=Roslsg}DnlUKU9Keh`@ zE;3F^*wE4OCX<=-R~YI-uRzo^2v667t=0b}L4?}~${zqq5NGJKsbhbGHdNra7EQ^z z?=Br{;5pYUxk9smtOSS-?c!Nxr;&}{`Ta?X?y6lVh5MGU>&($?J!&yv=1_CX6gw|8 ziQBqLU3c=xgS$MP`}!v_R)T-a?2{NTu!DY8)K51c-Oq~I3%l=kUrI&1yz(_SZn2Gf z7L9fOB5Zy0X?{YC4PO?HRojOGbauD($jNw}$Mw6~1G5(>unBN4ci=a!CcabbSB!hX z{b{-9xE$gu)0|M__}tJxzF!eFB43?Q4?*3sNQKR4HR(`NAp9;RWNi7N7!6oQ7xIS! zSr~pV^J*BK7S5O`)!{CS)opAS4}RB_S*^?X?P+*TojbXwvDTPK8xrbBw}Q<|%NVTg z>)SpaFB_2m0lYM7Or5`4HpO5OR^x{Wwr9s`7(ycP$#}jrx?TiuAh?JRv_)d$8VPi( z9X&^F%+Hf`vBOU8ivJ;BVugjj*=`&Q5t0uad(o68jO01lB*D8tJ9ap>T7RmWX7O)% zrM5a#wVj`NdRsK>3o`+HvxPOFQh$)2Ecz+anc5}~n6#Wule{wp1@%KC#t2 z|HFr^sxXz2oaIA*uY=WU@TEK7}^J`;aBioOb`qh0SGyPON{kFh1 zR5QQ3~g@eKea6Mp@rixF@UFMT&&ezCUV?rFKcAt+&g` z3-0nWh6%Do(!;aK)N8~lKx7)D(-EJH?Jc5eZgAFKv`N~xad^E?khWz0J1=y9a2dLo zyf+vF+eJ7wO434-zhz884>h~yoF#xZUX=7p8iT51#1k>5wd~RKXelfMeYbzQBCIbz z+WpRQfiZ2>i@Q2MXExP7=M@`P+&5G{9PMKSsLRCQd(`o$i4-S}149d=LTP8Bd zV|AklTXjYidEG%PNoqeL3?4y;e(KFMaO-jvjh^;Y4}HIXO(5x>kY`@y5uih-Xe2dz zaudi&d0(O_&{%Xg#Y+m1F&%YI?eH>Ln%HO}RC8E-HknLxFQYj;by6gZdg_!%hpAY= zJn;LKOj`NnAMxL?>!a%b=m;CNY)=jHoE$FTW&3&f4{8sg{aWngkRdA5>0+`PUfZnh ze$r);S0T&l-099Wag7nCyLgtWQ(Ljldp_m&4wMGEm9s=e3TEctZgfD%vLu^d`YA9Lk$31R%+Vpi{eixbq@2l7MiA9Cm zGZ4g(GQX3b93-~6oM5;1+e-IC$dEO5^h@1m{H_K!y)6>xOelP&Nt zApVWQax@&Cfw&mXyaV|K#WsxMBrG{abAdrw&FTn_wr37ckTZ4erJ@))MnVm9M3We% z>6H!A0{RCNaYUw81Vmv2(5$Wm6v}7WH0fCj->7^)U#3rknRiUHV{uPTy;t0rr|Ym5 z_rA`~!Fe>wPNlyu8!26BGdQpF4{q@KS+e$*8R)1uul`C3y@M@!?&P;|$SC)J46n67 zCk!!uD8^LLOBS=13b#!Jl6mLeYv+M%EGf(yQaW6J`n995d1_iTW|1S6iy2ud_~v1t z2A|QDB*`W~U|$yy)_CZToiq{_Amg4K#Nf?i)e6ZfvH8}x4Br%Susin~f^fUlQzZDG zK0tymUqMxm;HVX2usAhQ3X{xMX2GA+7?kWER_>8FH3OID_Byu9*Y=$9Bj(UdEwOEe zCD(1!AzAFg%dS<-TvxlhjZ>C4ceQcbh9+2V$B7DPUf)CZyv9JGP1wl+vI8aLTw>=h z2fot&c0D~ZUD`drtyflLb56L>M*i^shUjCTj%vt|8N`3Sy!Fzc+)5ZPDqGh%z+-GP z%qj2paQNlcMQ7rptoGX~y@%|3Vfjr#QhJf|)U20(XX{-cQr{xni4b)hf;MKKPs(s^ zXZwh#d9h9-l@b=0rs%mUw{B2g*RiePoo&a7;dsSw3s3j%*Vi)tfX2-F4`dUYE(jAI zqaNjTv*kb679p(mD5vg_Ven5Y>5K=7BAf}aI+8f`Lm>eEOXbc`KkfYUNlHEJfHNlP` zWvR?$jjd<3JblpZ)f5Z8|HQafUafO?sQQqv^Zn_1Z~sz~3v(q}D8iuK+uQEu_O`2O z)4Q3S!{h#KKw^b+=YAC}?HDb7!^8dI;eHi^}_k=4(C>z|5ZGP~G4 zUa#~1rV<^KpI^^HjlWmRjKaP)Wy?%_Z1Dc|ZaYoenvh+}(g9n>=yY3ZA?%bwUs_T0KFj!3v=y@w?mS>Lq0F+j7LRQ0s*@4IrYRB?5(r1Oba?A76N zT8&MDzD>zw^Y!j2?gU`LJOsTB;8W`hF*lTR| zG{Ao#OW{nYI6{K(nsTtSmXw^YM%uz!xcUQ{INqE9l?11~@$Y<%5}%9Bg25IC^f!hi zrG>q-N%nVMzQpNa=@1~vd50K>MWNTvrJO(g446|7rD}z@SD3S~o!)@u>~L)EJK`|~ z{)IlrJDsk=XGQsAlU;C_EWrP6NZ42+Xw)L>ZDG}NsC-Oo9~osK%&>X4%fKMrr-pa6x=0uVFNE_T5oi(xh3j0MCw~AujHD;> zQ}a=J@gLf@C^+)r693jIz|vvQe<;9J`Kyv5J8P`Iwi?RzXfAd`3sFu$FE`OSF&10Y zIj!YBZ&KgNV1t=xYW|fcyjrsU+<3hu`$wN(e0g(tB7@tOf2xi3x$W?IoQ7epe4@#U z47FI-WjXWh62~hv^LAuB`c0p?joI*2*ls7oB)K2r)_kH;yThBag?Qn-dQf zz^;+krRKT7c|xVuj=U80>t+MlqS_rvxi9N3DuAv^xUWYf>X_mz2I`G$&lp(?s* zJ)A;#*izN)t{%)sGNO&IKsXM5G|NZ_FNw#2*7r{@h+ZkM+$7n222-@=P7+_KG4Cwm zH>151xfaFTSbP=2@!Fz93Y*=86F}b5Uct(bCQ-Iz^Yr=?ip6Ta25rjS8^6MqsfqFI ztSmR6PJ#PW+rGjJ+P}v?mJweZ-L#?3{Gn19Cd6lYQ-PhW@2Qo48Ko8o6*ss}0IPR5 z%s@w`U|%}ACdH6b?-V9frP8HFxr_w7dA(K3G*M|(9COC_2pq*saAA+08gBQ38>x5^`n>pnXVByKvz^}QBQ2LjfBJ!SrX%oPBeS zlviLx;k}U1m2A<<{}B0=e~EnXzeIkN5|GG0l>?L(oRc(j{_sPoU8X;FZ2P_(Kpy0Q zSa`)2s^FU#?vbS+kB?X$Wv0qVK&;3eJH7+n6>`+aj<5nmUS9>=L(-&kh2X<{6*fyK z!x5$xn|W2JA$bT&ANkjjBY*xsi2Uoy>z7I=+5ez;h2F;nOoc$bqrJ?X=J zu_7R9D7N;nYA6WCAlv^UT_gUNbj|x8(iMp6|0P``K33uN?K@1P{(3@1Szw*CKpcelVR$w)Vo1iiPf$BdI zGgb-Y-@%f?Q0YtVU*AcRPB&z72fG;##PJ zVYYgy2yHKSip9;_iErQS{f#)H9kzjlx8o?Mw6j$CTPYJ@~ zuQ(#%HaO)q{HTxk%G=7rR>8OF%C%5f`l$HjJDny9nT4?FXRKr^oC?MMQ@90)?~8SoGjEeSvcRTzmSjO)1pI3% zzQ_VxDZ7EQ6Ryxf*+1#?J1gAcMC+a9+WYKLODVnB9~Zf6MDt-w!%R>CK&-^C01(#V zzrzy#J3|Tp;C}KS0KN3z2yiSJF>r=}k{5*mmn202456w);S+K49@GB5Sl!KeUeY+R zV6Viv#j7 zNwg8fDTUw}B;s-zgmnC3Qgh|o?FxE9<@w)-uuk}}D*wX3h<)29wgAn3>**(XNR?*v zbIJ{&X3#w){-$tPm&B>c9luNLTn)fK1L3!n?Y{bv4S4uF-+I8#kwyZBVG-ak)*S$$ zP?@N6WdD!gvopWxcv5lHu5{z{n9be-vxAk1io()jOV9*rPlf-Fc>?uc!ViTVMg~%> zs(z{h$v}>k8pyHcC?Wji^nU1An9<5d^1uL?Xw z9zlhz&9y5+I7n0=An%!3XIIzrBfk)6=vC~uLavazy8^DCE5blZ{*vB@T&Q0NWnbJ- zAGxdZ_^Fk#mud_Jhs#{?xdy*^!%xTA;Wt2VpgsoN!7&#K5}^Q$b$m6m8TSCa@LrUu zWQ2?JhLe?)Ww-LKy#Ix>f_kEC<&!U#5xzYSd7g*hJ;!v-9pvi{g)*mJ3UC4ne)9ig z+5!EQ0&744P{Ggtiq6L<{}Y`#fzcW0%jGQqc9`-!evZSFI6&0Vui_3TX_Te{9S6P4 zRq`<$3T5TkkKBDlF5miB5{F^fO78ntSUqo6!>v4V@~YY^wiu-=B+hi&1nI#*H1PZy z0WhRgJY)52K!YF44Le-P9MU4E5se~DnR_?t54N(HkcUAuq(cA5!|?`&)SYMEIl5ea!O< z{3WeNfs6^jN@3z(OX~mkx)MR42(BHKCpN^0Cx=3Wu7TsG;|Jaw!m5NK8`ZSTssa`a zhn*;b31c6dA&KEQNHNO!&7_SWYoT6alyX?LM)vm&P{{>^T~(1Tf>KI{+3F}~{EMjTsjO`_g`8z){d5~Hkm z6-PeEx7a+X{Nem6McO=7H^f=c(pdRy-5pG=SCd~=P#5<{_-kR zg2swk+?RLkCs)33o+igtK#d)&+j}3j7Tgr0VZ`yw{Bd46o z2L?Y~3a6)X<9-^qTD+c@l%Eg5g!??lBT1Z6M)R?mK$@lVtdB)oAICm>t?lA%q^xE! z>o~=OeonrzS}Vs@uJ-Len9yoB5%K=PPq?1tEE(s_KNzHp$(*<{M^S~H!E%h3_sQ|7 z)To#um8oSc`9c%$+ttlv4XC6cvR`nlij%2#gd6W_s;#+mGuW0Yj_km=exF1aO!-0zm~8izM<~!%cEb z;_bNz-6?~?wz-k$+)n)|?j;pV)jt7=R(bJ1O~$K6p6h0rV$YleUnz);n~c~JURG^~ ze6?6ks0F%)FFa@7biI|E1D2G(O@6TwBUh{C!!#JQKCUXhYc$xaz;s39YhvRw(;mq> zQEnM0YFjzb0)6Gyd`SJi-b;B5{!fx451`ht#OEB9SZHt{e?!K#xf9I}M_o#_i0 z?K5w)AqdIAZuE4mWxpHP!W!E=i483+Z&nn1MLCmk5WFcx7#em^yndmeBYlI8W8~Mc zWtqS_3q*q^OdcM~<=K8^G}syg@Cpp(n1HiJHVO@5r!5fZx{+i<&;kgEry)KJkr|H} zDVu6Jjwfuh5Xx?#sPwiWnx1XG4=a;?iZGK0M)c zuAIRIx2q;&k_b#jD8&8ZtqHH($mFdFE3$?Tq5wNv*#k!c6A%T7 zyv{E^8qD8mEq6w!0(H`=C`hvjl{X!VCWVz^!M26iXK2Q}!p%cV42rYg?pV)m?YKKC z>Ynu>b*$^CW_v%2e=+W}&d@&Vk^B{ATq_M6na83MQooL^Y)fr(>xywYV7Eo`xav?X zPszk~&AhM+dvQi86~{sUN)4lKMb#l1*pjHkeCM5=UlUFbzYeLl2>xA#oJaQ_pK_YNTX9B~9Fh)R2qr?LGxA4KOQ%)5P zN~a&F{$CAOZWYbH&UN^cV6laAi)jB*&H-NzJmJ^Uz@K~7Ttu@Nh}9pf4;f3l4JF4! z}ZK>SkOzb@;V#pg2ysV z2xhw=uN93IMQoH}>lyhKNJtbouH*$?a9JNKM{%W7dh2b{y3KIU>RH;BE2Z*i$>ZLp z(X3l7(<_({HRe&zOn+xv=AzSb5;Ls)?x_V*4)87mw}Z@W)3;UKsnpRdaH9+=mEB%5>5}a+6UVr8n z^Wdjsq~{z-wBwGwV+xY!GPt0*Kf;Vv1j^6|Os|qc!TQ3I#7(jV9_v4kaFs=!p9ZWW z{wWvRDEP5dHQy)5lJff`SCOOuLg>=e!~KzbifhV4&0R+u{3*IwmE%hEK1k9+7U7Qn zX>(Gv%6^V!j%ec%4epfaw)kUc zQ}t9aB#@CM;W9LcMd(*aM*FQ-jF_{df&yh3Bab%^n`kD;@&Q58+P=61qAR$bD39#3 zB10f|w(f~S1IAHrYEkY3;F=>|k$zv|0CPW#13hEv=;(qWvi+DLl7j1vaI#Q{vbsTv z%aN`?jvL;JUQqu3u=iF`buHT#XmAU`A-D#Y;O_43?(Xg$+$}f+cXxMpcY-^?9o`~a z&c5gF_S$Rj`~K8S%~3ViVx_8PAEWxHe%T9GhO0y(Xb{CD<)&Lo=cW32`%*joRbKdT zur*$bb6Hx5jWHvNUkVlc(S^P>)SYVjI_)j9t>M%Pvtc=~W1?d7GPzEQ?k*ab2a#xv z-SfycEy+}Cb#Z3&aE%%l{=*ky#3H$PqzToRb2uKcY9cv0!?5c3lXBv16#|~EWtz^t z^#vnawME7BNB+eAXWhVFT-e-Zt@t_62f31sc<)44M?*SR5qsCZfI%_h-DZshK~e3^ z@`N1SlyC!mqR<@P*wmyvEyYA1*r1p1^p+BADXtIF;OA8qL|4Y!9CR-?B~Ka^-eXy~ zdG|{^zP9*5g5(XfV_l^n37)5gHC4t-l0efp$JrAEbl7bv)g+3VN36TKjYj7m?i8Z?yJt4d^co3n?RIdgG$Sxi zBM=6TsZp785%?vT)y@A}XaoN?>|p=Cfa3nXD8T;Nnl}gUUwW!f9MubczAxXtB8Ait zE8^FjAdVpk*+xoYSs6b11PrRW#y)z)MIpVuH)NxOdVXm9ke(omKzA%ez=isTb<{a34Yks2CGB)NmkBXF&l^!A)mmyPadBskWKXrzvrG?&pT zwB;C@xmX)^XnYbJyRF|vlKmEK^#$QxuktAJPOtX@>qUV$>jm!H#j`~aD?mrB-nwEU zM0?!>9?m_0z;xNS;0`2vS*uvTc!(1f3XQDIrj^aVf?cL`w0OX5!NQZJZ?CTOL=#7@GKp-Fg#> z0k5lXrUi$MG~q;J5j4qc<(M5>t=`TSt@3JC26E|ZNIB8m{6Rh+iEG8s2@-O)Vu40n zCq5fp;Eivav$pYtRa*HvSbQAFX4CvkiDfFEjA_Wu>c7!0qeN#Wsgax@TBjOfpQmYO z&_=PvL@1tKA~lD)H#EbIE{c%))d2 z4m|>?WHjofYS68(S9xR0OzbA10Itk&^Qc~^23vH#PKY1-Jms{Q(h`m;PfRQYMIdo~ zPmLsQ_puH%tW|EqRb6c7@H%xRQiv&eMy;Bmu4oA%o-1dcR{dbkquwN4f^^g;jEWEmZON2ufgK`obi% zC(Dbmt0mcrFOBEl>sfbjw_6)H77HD}+|}blIQw0T{Gc5|y#E@a{u&#anwYnBhK>m( zkbLkf+vdTWrhe0M1q2tn7E8hiBO>S#%UE*VE=iobAv|s)Gv8nDj-Ub7d&c!n9`f08 z$xo00NA!VaSX!H8fo#E37OirL>6bZ)d4N+X^$Vpm;)NM=NF&SrE$rLQFGiqkfl6JN zr*=nsOP}ZTttLguI}RRi?n#=m=kiaE8P?wBozl!(FwnDz%g1}mA5L%QS{S3%g>PLs zFpegZMv1u`S3WBdn}DW?6fD$f$>VOG{Q3QwgUdyOAUWf!y`%Ifkf2RZEQPAzw~j>*8^`cDumZY0XoRx68b(v2KRO9rkh zUFBAhFLI1Kr+@1|5hdm4eA?fB7EFO92CF>%-miFdl4srn>4ACA^viN{rLzIM+Bz&S zT2yr1BwL24$IA&Cm5jrwD|wCi;} ze?9Po0ZK!tY?YB(1-rAm~l$j4rLV51N?&J2SE#KyrFQ-g5xEiZpHOH8I)qo2kKrF_PBYcLJgNC4PadKOe zM2UswzhHW{Q+mBtL6#TYDBGo(SQS}Y%4@-+LtO;nuJ$ z+>bVTMJd&RtBwVK-08H82HEg0a9t5oVixANl3|*i&Du}tYCi>;>z}1RR=({LLi8~& z0o&UKE|AKcCq)}(3WiDUJHmS%xV^iA@n`;aLWD4kp0BMI^l_$)k4bYzllLyH`nq9c zrC+F;jellP$aN@8CgnkQ~GBS)}mHJ)x>Ct!0u_1D~9A3U9FMHX0{ouujy^!j+ z?o$rm|I&T(L~y4jWIEe#7%47Yb)>9^TOSU=_~}wdkCz_7`UW%z>y!4g5$VjU1x$UJ z>HB$)bnN~v@%Df{wuTyS#Zy+=X_M&fX!J4=CqVbo2vZGat-%c_;cmb)f!~emaGAO9y)VL)VG_cY~U_Y({`K7*9ow6N0~%@#L`u`yT>N z^H`|A`|?=-mVX`7jM~P@+2+(LYJ?ny z?y}8ZnC@d5#1u95b5z)Bt=?`*0Ec=Cd2;TN99HT`t+VY~8h+!9wdbpk!ELL|MNNm>q4nb$2@{w4q|EcbT`ghf7ZbbHdws$Qtg_sYo;6!Y({zaMhjt^(u?_!vNsgRz%Sy1x~mHqcFe zUprmRc_gV-cy&@gjIStWb7v)gNP&8n$m-0)E*A#~I{mju7SR6bGzBW)`!s-C!2*P` z>Oh>#J6+X1kD<~U{#t3ANL9fB_om3+baYZ$(=AZ)A6Rc8^L@C;=`YA%7vdaL=IxK> z3Q4}aW*eR4kg+Id?ndC?HnBi!40S^y5%G%>a0@uW3rr`L_pCMTa)t)B6IAkZBX{2r zsLPz_ZncQOqlZSrq|&jq1ucV**J)dCW|C@A(=n4O|2XDse#XX`BJB!6N;qoR=DU~S$xot}6IA4XHJl3lJ>ZC(%X znOM;G?}0=H2!PmmWv8=bz{12^u|PdtGWd91@FV|FRRp{m_o)8rqcvf2GRYc>e8$F3 z8^hsZqH!h59Ab`FJyo^W=*AeD>8;?BAlbEaiPATf+3t)MhIw+U%N)`4G{n<0IiV}r z+9u0ujqrC(*!dULdBkEAh>ttU zx6sTu1D^#+!KcVNtUa|hE^kkNZ^j{HfG3l0${Q}obYR6CWvFRA80{Sg?%N*)y%Z$w#spnGJZL`KSEKW4NVOz3;^XacT6e`+EOWn`kpfNIJ|V*O&)zQ$GQG1ygOQD=>M z%0iS&?W8*+n3Mn%u~*r$?m5$;Zlr`qHFnb-xB9=4H~IG1+};<5Xk6L>c|LRjkuXd{ zvyH7L_aa;q|&-G%Wv@A^lvrw@<+==o+V%pT=xMqwy$sg*r; zlWB&Stk18_^`@eszImv@$Xqdd73xUQFFF`HJwCMk)XI!|TRc-{S3|pILV4m)(};Pz zcyf_KCEE6p#zI+)B=_xg0`BeMCxmAXeWk!~7=C2vEpg4j_rb2KixKAMyN(yT3wBrU zms|PsZSIUrNh1XaVEhiLH6Go=vF^%bHE+rtRVJpG*NtnO5;ptmBv;Qu910N~Fwi&s z+i+pV3i%nQ_W+iA=eH9h|TLwmY387e^u2rCO>p#@YG7N1M>GFlUl| zw2F0YrCtBK?c(j`6+9cqZ%S;Ht+=F_hU&x)XF3B(tJ~fB&8WpqxxbWP&@ODXv2Ctm zgKFvnBiJ-X+8x<&c8h@bj|OlnxHO~e!u=`KovT^p-8Q`C-m1X$+J_=ODN2kFhp`{c zS-MNj*lHuEyF!z5Y%c&f5RnlZh?02*J4M+}#oZ0-AaEk@4< zgN6G!*$^y$YK4=y(ufbNWn_zb&Siv%`yY4iRaLPPyE}IJYR& z4-w>mle;30ux&v8_}B019|gQAa0Gc4978crPV*dxnAiwqB7e3#aJB3ZaC-CIBZ7RVJb96yt@Z>Dp9l(8u@oD;?f$=V`7<4@C zBUCpp;b#r90sdRPw4VRg67W&ipZ=sm~h5WTDcA8{n(BF#Um1vBeUB z0QVfAO%yuJG3G3@di!0aiJR(0OpVe<-;U9kmf4gNpl%^ajVVN^C{3P1^P2e8=Zcr! zrAM*erANz>%ni~_y9?mt&_WvgCNJ;ZL8Ch&(x&auSCq4Ba!WFb6u+dT>SfAY-nzd< z6UCZWIHauSHdz!MIO@Jjj{-0@iVJZ`qhfd{BL&?JEj1nRSE~pIBh&k~Vjf;N*12&S zJ(vTDk|tw{JL0q3%X+hZG~=aQg6bPK>PMOIWiS$H*X6g1+FAKJhPb0AR9|wVRg&P= z4*==WIEQCjoVzlCz4;avPVwHa5pmB0VFbJ#jQY&XiapVjLAKMcPN|P@)K=fijZ%52 zd}sQB>WxB$cnnW_c0k?Xtu?<{2P>*pN*_K}voi|?D6LS4L4=B6Ck?3DZd~9aLh;^*a-aF!0m_4`5 zv|-xwQ|+jRt5^G=!N0lM11yCNQ6@`W8m6H!NU21!&0XKorS-X$)_^2LW}WP1n$6(5 z6-xDC${BRCc06N;<~oy;(;RxrH;iF%t=?*yWo~kWa~)d^jh{{zD<50trDe)n9A}+; z7wyrjY`Hr$l^lOHMfTlxsk6!wVpTYS=ho21F??tOil)bM?uN9q9z}e<*J+327S+P) zH@Mwy;sPtfv-FT5-drVeHxfDZ!I_=6_aei^&i{ebBc(vmdF#~$itSLJ!FS3Jfqjq# zg6#l6m23w*e^#>mKRHbLeqx*C2V*<<@Hoi}!FEu}|GPo@JF3jm=YdEEph`dsUSj~N zeD5{`K$Y(g0-(zG-VXp&`ECaE{M`8qObNb`BHMo)fGVSvfK9)=5BNXSL?P1u8z}KY zq`#v|UWk9Hi9)2mqslChf1*lk2XZzrY=eoBgpgy;r?5L z7)+^hC0dZ%LLtR-&?xi_Lqk5M=&{6*hu2l&m!q>9GzsR@#s@>JyFj*C*l#bm-q_Wb z6z9{=f^1T~_De~c^`41->{bT;eEoe-mYIeZT<7o$Jk==M_Ux};#XHtVk7PG0xvjKF zY}XO7_d-oEd<){!yxR>_mG_2&>n4~4u=aU7QDC0h{7@#^J2DF}e2RPkS;$Noc3JgI z7AW@jN(o0=lI%{t^Iu=$QO%h!`f^qu9UtXK4$4xDqv{PaUTg*v6P;l|lTw+K7Tr`@ ztzz@Vob%N=7`iOy(iwoqSJU9VZ;H=C!=5+iy=MCG5={}^7YyFtiaoh0AyJpTEBx331i z$haaGuy}peXta2J5OU9_KH%?<-oQeAuX;>k{=Rz-%kaC3*T?Kr3sQw zWPspM{vHEBWL{;-pnooU0IxmhWW@*B`w#^tddvU!q6fRW4AjDi*H_Vg11jh7mt($C zWNhBcs<8(GYnX3(ky|Y`Przx(Ir9sSu?I)8tLc%_`g+p$SpUdAxaCLMOslnoQ zHsq>Li@mrzGK{AnGBgok5S!mu?dfQnji|3(F#{r<{x)uKHDGM93v@$hsH#Qk%E=0< zA4TAKiJ@oTXb?DwuNR3?`Rb3iycGtH@^bRBRr=j+sa?6oL;LhVc+&${aE`R~4Vro{ zsVrzbzDFiba{n7NZc=@R#+S)S@6g!6_pZ9|4`@tw^#?Q#6@G`tnzMgH;~Pfwv*jtR z1PXO@KAJRhgqxsPeN6mXukRZ|boA2AU$zpu#;s?8xc>yWB?a#Qmtl{*`y@wHQA{+t zG3!>?Fki&cH=*5txkql^>?8)*B6{yK6e?zD>Oe`MFp#rBD|_!uR8wo-iv|RzPn6>b zrG`2+qv)$f#IRzq2iLGF7mg;G%1!0j>b!;5p1CEQ7=JL8hGN2m{#ZGgeG{qUUtktm zj80e{6YGD0+0Tt)ho*QM^aS;PgIP$zJ$6V|i}csrpF}mrKR@kOl0eYuzm(Xa{(F4g zx7pt{Z(d06QN)7f>rJK|&diPGhAkmJaNMIeq+Fe~N-`ra0-b*}!c54?paIS{F=}=M zVG!-%<~pRc}%ZRK!@H*d!ZcPI^dYp$zOnjk8XJ_y%AD;Io$ zkybb|Kh2FfUg{=6a5g<~#UjLzyMe#LK!Ay)8s{AZZBM+BnLNS@Ur*M zqrNyJaFn@VnE;OykvbYEC|mvsVu>H{f&p|GB2R@@g$BL(E5j|0mR5N}67u@WWxwGq z$baDN?W4=o?zl8+#M8@lCw(krk$hLHhh~ zEN@vFD?5iLj8Qqrw*Z8@CpH+0F(G;YK)Bu~r8D(*BVX63DNoj_-x2QMMM{KVn*xmm zn^?m?5$^qOgj)_H7I~;ILDYle=`rB_wn76kaQu=20J)4OnG!|{>KXumi_Ne5G}b+v ztd{c+fUD*J0JyNK>!eQuER`NxuYW*XZq0rxw_3CFEUWTRlJfz@g__E^Pkt#S(?rUA zttXQtsbC9N=!&Qjahvvb9#(WWzMGx>Qk zhee%iIVOEM?e^80-CGvb)$4<7PE8e-=9DELt7UYrGpAXsqXG0BX6Xdm&(FKf@S#$) zWp#M0>a3R)n9i>rZ#xCzFAhuc$NoD--AeUR2|ukc5{oF;J-28hVh-bxj&TzXQ@0p` z17kC3%xV^aRh&Py2QQv3WUA%yDO?w&e}?Uc6ST6m#SPzfiFbS?Gxm%)Al*(MvMQrD z2uZPj5-G!U&TimQ^Qd{*b4~?h@HEt@Yd;iqQN3d9+jhi>o{}3ZIqN;iFnsoswd9IN zOFM?iKs8XhoZH=XJx&|K?BFe=-1VQD{va8p08P^dWz`d2hU0`2vJBgqpZy}4)7RJT zooYom?!GOfTIc&nD;ri^+eUwZ7I}%*N*Q6Io3IeoN_rUw98oaOe&c+6=4&zhR%wRN zA?rGDmvk3V#K^PWq3?QL066h|TcOHn)0Gr(aKOdEsYQ;P^-x3Cr2nQjH$>BI3vV8Km(HK)tOBCkC>YAQT{Q_~Bf zW!98FeO(jUPa@$?|8kT{kDKRD%>Dzp_T@uoGl@zIjE&`J$UKHfNlq-1Th?h$wbP~{ zIYYAKI{)b>>@91LfE4OwX4rwa%=j>|jKo^u(*gqP6USu`-N(p)2ykUV;sVBHCTQo6 zZTI;CUJ)yIkGK76HOg&drtwl5tzK<|jwqdbP(9Rw$S`|B84)4JE*X$mKlM()m~5l{ zOQ0ONbYr44lLSDaqJH}5A_{TDFYflDTxUb|ywXBZn&}IevP1PaT?PDnb&mhq>YUtO zLg%_KugE05qY2d;5ZKd7Iagc_d{SSTorC%FWoVN#F~Z>0B275I!^<}Fc((%mItQ5> zlk_X~&g7(0VQ8`JIyfovdI4DZcQMu(Xq08pBmMn%3trOcxyN&q+b(NDNw)3JwMTTl5 zLR}nI50T#(Ap~h=_08Pv^G((#lx8YPl9vjp>D{e3ZwZjp$!y9whdru~YCCNb2%MA5 zhW5a!I7;V9zO5&0v{4e;_c+NL24anvCvLQTr)#2aaaT`{z%+Dre&Ecsw{&7&=V)o+ zLaF7oYrqBNvOO#nmG$2_GtALrH!}{w3TY$>Koh_uaaJy!)gp102IyB{KQZ|}y&Vtu zvv{LsB{Z!&DzBwql;KddkTKWIUEpK45@WCajLQ5Zg^!Ij-Sw}<6!34u4)*U0DDLlz z0_>ly0Xwb#(sM-$0uCz4DmZ2=SJ)C`dD@ZS5ML@6ty#7)&%x$K9b&r6`THj?rHt11 zpc>`+%mf`jMGk?%dcuGq!9bN~Dnx)F^&OVQUt6tYzy8NotCFmp^31YxqGS|)GEVFv zezI4=&^2FdCoJ|jU)=$|QM3fy(Dm;^eCT=>e+MD%kU|Oiz2R%d&^6lL2to4emh&ax zoWX*1VYm4eUAi`Y%GAfP*u$C&9@l=9k)QJ<85=a&UdQNXZu{u=b$QfCQ7&0hXYCYa zeFJ1*o~o0zD#f1e$j&8C4LiuDWV0W)VR;79M6Nd?&@3LMteP9*|jp``k7wlVjxktH!pRsI!sed0zIE zJUqy6%(11Ix);R17J{Z!^obyJ$_=OwF9R>*Nk`n04{}isUa2w$}LQ4^672h<|zMOH) z$`bCvNYxqXG1_HL1;WV@FW%DC=U${Of(0mzMV(`Y~AQ* zS@Q%@ftaM+&Adt3ktyg+C^9W{1Huo}9fBXJZX;k&t0*%*Hgf^FKYq1NjIB`q9HjRg zR6wE89^?>sJA;zZ8?yc#Gf&^e%{j9BI@w#C1=HERN!HW#O>>u)vb?8Cc83wL65Hy{ zF7-LpU;_5-HbHjGM2l!nV?vgd_v)IkSGbwMoqn~YVH$rp*XPjJ&b2N$_dvMdxnB;K zrF=*kGe4@t%c$jtlZ^tC!#g9`5+~7XKgFXdKEpNroK31%f4-6tg&hP|t{@Calqawl zbB_tDbU#Q4U+M!02~yyx0Chn_D)ChQ(5>9+Tj>)5>*z?n5IZ4K(N&)F1xK8I zz4j!*3m%4dU))X$yv@m{ka%dTPb=G$5BdQztn}d%Ao6$Exf}l#v!n%~zU`YoQZbpmK*GN>e&$d*{ z`A&mYq!e{j*D;L~WuPm$vB2f0_F9$|e!gA3SjL@`TuF>rakWspb zz(Oy$Khr1Dmo|V4CI7^KeOsH)hs_E?&2q`H7t?7w=Zo*4i5kez$pQVtnnC0z#AiQb z_*@@6Fi*xwP*z8{;+Htq;O?3+Z5Ft@>MP?PwfY(SB-+_Srvx$;mgV zm=qLvhQV^neO>&h0z;wS7l8NQ4q!DvkpQd!@Y02aA9%rd0k*=zMJqutTi{Glfv+dj`uPA7mLjVj7(=O6LjylLnvxGOP=Jjz8uZEsv{x4>JMwhf znn4R;aWT*Ztd{~$3+MtmSed64cnc+B8-#xoU^AG=ExQfEW5auEpNozbI0 zuXxUe2h!nGd{{H;_luxhfP%k;Bhl}=B3$X|X0!w=KNP`9X@6WX!0(QsDJ1f$bnW*` zV%3sKfLuswm;B0{J{dWyZKkGap^q5CDaIEh`t1%6(A$&wW6}2ZWcHwMc;LW<3ZzCr zjDLzTrAbR~3=Qy^OlX44a?H8>N4%Mt8!;o^;8yX!Z zy6Trtcwh%_Kd^!dmRq1;x}gPgm+o9RfJz^Mh5bH(MF0~Rj-2w7!2NA)H!yyXUMM6K zf_xC@q3GTtjx9P8&bEq2$p!Ql;h(=LK&0c3pLwcvYHuaVdLPr0>#fB6?5mb9r}zsr zIVC`*;&&nU6)yo+Zi$B@yBjzFB>=^OESO|buCVfhDwsU<7F0emIVFz_zy^AgT3iW_ zb3;f1SsBc?dh;(=eFo~*tUHCk~ASoaz054zZ$~+luplaxR{Glyn&w;wQO4dN6K0@l|2j1>(AQH-ZT~fYG z7X)YiAR9PDR2)uSpru7;jt%RKN_aXk*6N$OleC%8ycb`asZ>S)IWDESywz5Wq8xM|f<`R?1HilNJYedp|+eSR!s(Giv<= zN8UpDdm#LtZw!&jt!hV&4@XJfy)7q=A(Rt6|9|IL4s|C26d?jss@;lG5?(4amR{x~ zwKrgnF(5T-Kchb2LDhR~Jwo2&!Le%kUUu4g!Yv)C79s=XQgFC6`}uRg5jul#iF_kO ze$2)d=!FRmVu2#fX_qb6j4xW7OjN%PaR~W0n-Fo+~JPatqRQ!A^|xF&&gd)s0+S2u=0fmycbRDGh$Mc zpDXWyi&gJp!{_*{#h@%u&@XtTK)g_pVmvayeu&QCUl8B6A3SKrt{N7G%KZ?T*qk&* zX3i0C=t+O_AA-h9bsn3MroRgm$btX}g3x(L?{BlNL_Zh4L(uoP**hYWVFRo}egK;c zTh-b$)X_4IUSt*!f|Ll+es_o;UY69L26D7@_=#-CWme*TGgucR5jmE{4?dpc#JS)V zClO9igD7Ixmwd;3Yf^Tr|^QVn;?qiN)8=_lSy!niUG{CU4=EAFz(RaX*CMCeI@X zcAan1RLB<^Oqbn*IU4DKET_(fW6OsTFkP>CQTC030~65duL%PdK!K+*#iD_bLK9}w z*LS}2a0kBM_R8q{?&zt9tA9r@UM zyKTQjazN1fR`Lg+HBArrwMgk8t;mnh6R!3*Q+&?D52>v2AB4p0uTUX)Z1!uUxVoZ5 z(a*?4<&DW(F8wA8lDMym6`8)EoSn^X*KQCgkbi3vYCDr7^ z51d?LAG)}*reqIsDl1)9G<|aMf%qJ)D!d=By$rZ0WP41rp#7Jidzln)&KAhp+)VL< zMAg6azR|(cF?VC?lN#o+7-VG~pj{m(F6tTN%}BEMOsqww@VuA|amiz%m4`bC7oBOB z!+;$k>*-UOOesY+9`~nnuW&sa%5iJn&OYL~7WZm|5*x1y-mM=5v$JQd3A+v&aJTq??^fmg|NKMI~EsDC&f??OXpd3lsCQ6Lca_N|4*>c7t(q@q6a zx5bL8mg3$mtw6vwY>kURI$dGoPb_3@h?;G-MFUPWy%?)UfHJAXCx`=EE(Y&&wZ=Lc zD}1D-Z7Fj5H7?+YmB)7ELS``kz#tZf3a?6k!h!crDlL#mYmb{hP32h6R{mHa}Vg*vM4BG_<`lioW?`=&0LOp1l z*c}xORFR!WQ9X^nLJKtrd)!6Ztg;eZ{4EEza6X(JZr1dojd7*i((k%6YqlHM4`NGZFK_E4ytl(dga?CL}1Z}*lnXQpL zkeAg$q;TB|x)xw^vP%ml2e>`HuC>4!qZua&-+BHR!!>NKEit8wy^h8;P@?t0jSA|`Wqw@OPnJ9S&CSoJ$PV%E&nXFsN%jVM z%v4leW4xix92mweF6)cUVZ}fV(@2%}e$wi?#sWaHk+x0=w>If6Ij9w)zLlKsRiq4r zdg4g>LlU?U(+-f`!4IGKKDoQVe*e>Z4PeP9bTxTAvW^Rc6mHLoz3mG6%$QQFLpJ zlaVhD8fVB}%|Crlp<~alN5h(PtJSSCad~Clt=KE^xnwz~A?sRKnnzjLp)tL6O&~Z1 zx$W*AgVIB9Dy&FpDlxED725lDnm-K9nz&G!XkEqgg^Wt`G=7DgP?hc_4*RWmf9K9) z+>>04NZ>TuW4V>ocBxpTJK9>`k6^rYa;bGmzE8qZE}mtL*itUG5N+%?X)498_n{)8 zF8~nJ|7IAvUbyY#q6sy5@_p@Kk#k* zkO^lokR8=_=`8E1Yv2QQP|q->fnQnH2=JI7yd3bo{w{nQ1b;a<9n9*`o?$#nUGaV{ zeq@2|f_R1C*Hpl~oICA;B6gyM5nqjZbK(af1rhDTv9{m9;!HexiOB0$l>I8YduUO^WAmQ~%>98B14F3TS71H=C7?XASricp4 z*oqVkA@%A5jd&l>uMZOztDYu4$J7~ZMHMgbB0j#L_pd|HSg|Ns##7mMl*LtHr}<2! z-+y%l2_LA`;u`mpwLg6xUPM~*_Yw@kcXMAZA9Tw72$C6qEQsLLgk-lM_z9LT2_f_s zGkRVnLjETKGCVOLS?FLno_OFN$nbe4$a#${G3So)1YT5&Bd;ApGzE5*C8S_bks;=; zv!1P_fy=C*GO|D@D8EoK$;t6{f#nu>-u-7m05n~cdyfeLtna{70sz|;6nwJ$vH&&( z1&f9s1bFQcWGDb}w>rI1-FjTz(srrjef=j{dlaj~=K6%vtPK~L5#@>frRY+d&LQaO z1h$g?pU8nRk_bc;76AYF)pK>N37ROYTv&6#K6RgbF<3{)0|ydLwikr`hl*amiO*LU z+BFvCYyxD6=n@%m(M1+jUCyVUiHD!?HG!s4s9(Vkp=IQ4HyKep1kLYmt1<7JjV=Me z?S8)>z4Phw#3I_Ee{(1ZLOUl_=`YP85mJ+^4qRC{q#*E*P^e42Rq4OfVU=8*KKv19 z0QN)qGxUG~PT_UVWmUI9ref&lO^@RzizY*H$WiR5g3Xm_aw09 zFT#;s2If*X2&(%gj`cwOm9O!Gv*6;m@5y5k{0@b{u+H)htIqfUyhZW z8oe^@E?gHCZi}NmafYH6^0=p~iWUoyfrNR)QqU%C72k#GUyyi0znjyPXE2+xs6Y|d zl zhWu@;+^JginNh|ZLkWg*1)p+OM@WvOT%<)eZF4TD?GmG2_cP<@HxDv}-{{^-7mOIB z;^jp;)>XJOj^A{)N~~=e^B#w1f`mdEo6Dvw%;O!)V${lV+09{%Olk7dWPaqT@){g! zS|Jn zag{GE5Py|}*wbqlk6(~j!rGZv7a**5v{CQ63HumUzU!H+?r(0Dz$r(SNQ$Xii=NKg z*1BjNW}Pu1|Mq#mZMRFPjH0OlmbDQnR~Rt@&Tw_EI}Ovt6oOzI@{|rB03I=7Q8bwA)*3aHN{ zez59`cV(&OAUo&C6J=)2`#_IRzFwxg&W?pw9#85ZUd;&FGFgd}TFeXJCJhzqWxlIy z)f3xOGC}PIOczBf{grgQgqs3vZRM7~{61KtwVk6?i(-fz2P52d!n@PHSc>~lMQuP< z42?X72wP$^OaM*dd`c0~9-gndBwM2|y`J_+$CvNrb?j{TVzBqk3Ut_n*(qu{b-C@R z+A~wFhS0|Y&42v_mokI@mfw0Yx=1pi@9)G72R-r8F#XlA#)?l&1&@Ni=B4H8Y8b+k z;*EFrOl95eOF6I$tLnaB=RMcR{iG9}e`HZ>BZmVr zV>{F0-Hv@CtkDC61rToAeC&)pRNiSWa4ICi=<3mQyTPPkM|ZK%QXe}{Vm(# zD9{=#Pu58^GDa+_TTgYAnFqXzFfMQ5eiMK?^EhM0XJmt}Y+nh+zyn7_)#xHh_LjsK zz9IaTzTs=lZm@w0gCAF2&s*SMyR&3wyd>VSr*C7vIp6u46z9}vC0Uj(bsWE>+AW{m z{#OnMlOOzF1UX-0_Hasn!AiiSfJ_XDLdX1Mc0^73yP9BksvN6Bi6KbpvHp}tsm+`)+wG~J3797?8)B!+6Cfo~LW zxUJx;`x;k=s`nMD)DXzyZW9oG*q#?LPW-k}0*!nfEr0qo!-e_p7A4;=Vy{r>xQDY&8=^TX7y0Bh%A;^I_CK%pbGO`5>l0S zc)M*9bhOpfO9xkm7gte&Hj-r>vD*QGFJ=EDhhwVk(T3r_lQ_`aoS#>N5zq&HSMVU( zA*8PWuOzF;Z>w1rg+;uMEh+PG3YhW}rP@mnn4%xb@omm@f&MRt;~0>MQTBg19KUlg z{x63Eki%gRb1DS%g}PplNANSWkSF5cBtoqF`ZbPGi33rEVJr=0ZFhMI6Iu1=Xgog& zx`iBmC4-qXT{am~V&ADqh$le-U7JK> z=_~`F+jw=ZgjU6OYlG=AcSrxM8<4bw+^P4hUM;h|ef$xz&SFA*dT5zm&Tg!uMPx#C zyMaEbotR*eQ4oV~*^>M#cQOYys9+f(zaAg76QY%fQ{h!`S0L9eK%;CIIwA~=G8~j8 zREgk>bqA`j%w4k-dw&YY5iosmUdwaX&Y`O+CFi93xinU(kc**Tl56`HrOiYZuGP() z)>-=KGL~FVH6@27M7T|F-f)F2;krb&i6LP^m~~_zhr+Rcwx`*ir0F5KVh$dOJ<3}7 zm(m4SRD!FN0X3T9k%$*F#kLSYl5XLOhyeX}BAEru9shz>O4 zYQdVFZ2WzNX<#-_@t$N?MSKxWd8R4#b7DvLl{E5xUglYD zPiu}L?+ad>^p-tIc-$5mMS*xyb{b1PVX`5N0~LKT1$SXM^VqI77FAPZ4FkGFzk+?J z?cwJ=@Uxm+cIqdnS?Gs~5zGQG$!_Q`Z-q)fk7^BmhKPBVr8C%Zs^1fBQNwaZ=?m}| zzxw7(@_O}RNkbXJ;{$TxhiCJII{%Q&`xq8F}&td5t~% z5Axd4*%PCZml0}yYWi^Qc4-GovIxW@gBOL))s?`uR|hGNves4OOtSMcHd8qJvLU6$ zSA#yOeUrX|l!e{J$)pMHj|)!DY?5PC6nU+BYoVfu)jx{u|&$ia$(CtrHI{)_DZH(z-9^q}-%a zi!*bo?Y_;8DPC;7G#+uG&LPg3&?~PPehC@Ta^1qwoG?~E|FVn2Pl=_xHE0iy1j#Po z5<}rh*?0`fRK;mH&e3gYVJ?^th{np>-~JSrGW*%J+6+PA+21Ybv8rs`*$PUL0ndS~ zsj+UX7ZW0x*+&x8)#rIQJsz{`iW;=N3p;x)U#B};v+Lo)(U3MkeOal^YKQx!Z(YH= z~9x%OXJaQI)v= zD-QL>-Ks8k(JYwNDsNC=PDwK7aen&GeJf$fEU&b>tDi-54*ne)XepCqJ3VSLNoAmV z^AYU0&aRj8w(G+gYPdww2^=HyWWKACJrfCiEz;qow0{I(>2`hxU@sp8PwoC0fStvB z55P|B1mcFSZf$XW9=ISqzLp<<#F&!pXOFWqG9E-^+`o-cV?N^$S*yJ_db${uwAU-V%3yV6@seUdd?7OFD}P{k9G_v3C_oQDYeo&D4xecK_HQs-Z41Z1&wSfqI+8 zeLC!NkI8LSbhm42>EZaQCg*A0I|nnfd@Zy^xgk9_$bO|Jz;pH96=N=o6$dS&M-cuY z65CCR)Z&m1P52W``q$zjUYJ#Q+MiEykmG4SP+ie9X_Kf-1b$l(^I3$@P`XVGaTGEoB@54z@E}pZ6G$yu8uCtdh$- zfHs@FlzaJcPBCMwY(PsPg$!)G?lhxfFc~$qLT={_v97-rFVQ#nk>GpF(L$o3fz_f_ zacQ)^>)6o(>WJvPVufYNfqu?W9d*aPeR-Ky&t0)r2}N8}i<@Mb?=fM3F_AxP@j_x* z=r5=%;KS%aTVUkah>`_zqvF#e#x|33!C73f`S{8)@6-B7sxstbO62M}kJcWs`f5tc zGOGm4%ELW#MW~fwOSLv+8jGK2+J{aLf*HqR4fl0AG*55DG;b~mXQk7C_--e(#&qd4 z6=o1K1=_Y&ofRPav%`O@hE&TYPttr0BU4HmkZ(rx#?E{#(0}L>UtpGL+8%3{a zvS5d5n`7Sc{J7DemPEiA5sQio?JwE70*+^7ugK@*Gwo6u)Dpy*!NFW365Og)pW>YT zO3u7hCiv(c6yEacW8O-)ky1UfpBwjPyk9ifwTYFb8?12naq}W%Xkz@N1Q=m{$}R7n9_196di%g=Xze*9?5K~J1G?@MyD*#n;Q#v0kzkx{M!$n|q- zpqVU@6ifM-P*nUG*)g(3^KhJJ?@^8^^g)qhlGc}{gFLh0i~7~%1Ddwbm#t7Ld-Ynq zhy#6ow8+|pp?x%IDs>7R-I^k^X7zJOBrF#9VwpV9k}n(Ch--}d+dmC*I2CYS^avER zu}($&&r+;$GGsWHj0vT}*R~WEsv0=c%6CmTW+7&pInQ@;oMe|Rid}uGtK>Ql?{L4Y zpj;bUkEZ(H&BH|8tDMb(l_meW_&{JF4HSy>WnUkgi)Ov|6u!ua{@ho(I=$^mR5WE^ zYG?QG)3aRMp_y-UU!!NfjdzD^O5EN2r+T<#_n1gG)33xH4waEgMq+ita`b$IlxC-KfQ4*IWs z+06nSn+-0s9f@LG-5V`9_Vw{VKdd2Tr6a#Bjb~(EkzpH$w37Wl+`VOV9Lvr&nwS}4 zW@d(%8RD2RW@g9COfkj`am*AmGme>=dCbhrcqiHWoOhpd-*vyWzMuDxG%Z!Bt7}bn zsk`(@YP7)j?2(kEkv%66S*^;MFVLT>Z_83n!07S1s_{H`zcn-^HWU@@FY|D<)ztim zmDv(OXLRuodo`PcrQBsGeOt*n^T=cAjc%H1!bi9P(=mywLrYoKPf4$6eM*w97&BX` zpYt4D0O%TT^6!$CfLDdyY*oL0X~2kY>ttV>pE_FF|I>h%lk}NW<;8|j2c_6lYC8f1ca(DNqxS9Che+psq`3sjYUcXS?`OBw#65tY z%Vc#=+o@!Q>Z8ZJceS9l!w^H(l&-5}=(Q)Z4Ba(@e;wfS-f?=iP$V&9^mVV`mILxv z9`FiRS}|!BbIL!tr%2XhP19f)zusLT>S<1ZDp4%Cx6m(`InyMTC+v@k?!L5rd!e8> zN;oCW>=miUkhJ6&9ZOtwAIY<=;LGkj=hZv(&i%a3Uw1Li_H+1DmV4^U#c+vgdLO2( z(H`|_m1wLU1reQKiM%FD_lUwk=`T zi3Sv6If*!UeLRfJG2bC;7e^qq;npG3U(L{_@Vn2sTBf2H&;!A!-rXPuj65qTNcbSxex_3u+txhLnYJ>(R@?-a!7Otx3 zNP)Wp!v1>J3*@9552zp5;RwjnCyaGIh(& zIQIBIH8e3}aLz)RT}6t#?rm07jE|3JyjhySi>(wD^7IYI57$Ifz3m;|0ETOjndCtA zedkb_^jyzH;$t@fXM!z0505K@sU=wLt?rIK4i8`FtWEm#*NQA?SpdhN3eQJZ!zHd% zw&5B-+Y2OA?k+aHYYg6Qfr}w;j?VTE8#jPN=WcIMU5eMsA$oS9e5=@H@JvupD;@$Y)GznQgu~?fD>A*hw1jSOMDew|}_U?p~Z(#tri4 zTwUE~)VJp$#7V>f{7hjqs@p#Gt?8{9q5e(R>l4W?w)>1RKC}#L{|0`D!DpF2c@+d+om39eL1?r7#+$P1B5mBOvzk@Dg!g8b z%`Sd_k|+e3h`_x}7w735VyZ+Y@HblI%ec9)jo9M7&fE=peHI+F@cg`1$Krh94HUiA zpnj6Bxo~1O9vs#7I)hn~vMDJuUN=M!j)RUxW6k`8Y))s9!6;>fvqfFM?jhfjFHcr? z)Xb{tdT)@1-hCpG_z8rpVv4_BSt-2e=4xS?>bcJ%v!(Myk`wW}J6dd<8Mi8u%x2}R z)fn#EX)|}NRcJY@wdAEyH|I=QiKZobM)@RKL$SXMG{9 zl}f9Vq6Z9%WcIA&L0eTHK24HWRg&E8$20$WO~f4F`2VHzc|J+ihq`e~X%JPxal{oCjHX8=$!_)Upjx2lXh= z`3*p7Q$)An;{+2}?$eM>w0}6SsV0a@Y6xJ@Wh6t5LUFpG`v}|ocw(#8{^{g_FA+kZ zZxnbXE>KN|QzXdoDZA1=%comBw-44T^AWFMucUBJ7erT38E$vAE-=hT%=mIy)+XNW zIaiWw*WFt6*v=}9P@P@plA`fT>}UL|G>imdcLzavrJKeH%ME$HiDHq7zvzJ_J7UeNIeXCLO{ zA{W7(v+l&GiprMe)SS*9OVX+ZYiM!Ade&e9EK0av) ziytL7U+{`jv8Go-e~KR2E>UY$eB1-Dy7#iR5z(Stvh$8l9jPbZy*(039OBqcKD6I6 zdg%@w%wGlZs{**nyr;Cboid=Tzu}`9tkX!ygOMcV?w`k`F8I@=%Eyzk|~1tqZ&lX!C}Wjf=ba%C{gL=@>Pr?jo9FQkYzYi{3V z#lb*;X485RcqVs$t#=!!k>nnJ#XX9jJWn5i&%C-#(fVR^Lim$S$0GxWma12i>DQ$m z7AGvzMoOU2yK;X2qdC^Zj#jzy+4K@+@rQ1{6e_Zy&CK3e3`*CH`c1=*3j@zwxUI{$SFQZqIEQ?3vQfCN(*VWg<<(!Ip8eXFg8pIcrNLa3lk!j`q6n8osG;1gB z{!BzT5g=Gsa4#r%m%u~U=JV;wSjlExH!tLN(vj;i)pxgY*raAwPtN(G56nwV8`JiS zmjPJzdO8l4&kAf?YP|2Tg_!-;svK5=`l0K-EKrbEu2{m1khSK0lXbi3J|d4@tj4QO zZOY!Ud@p`3R0$cva4(S5id;QXShDCLFG$Of$l=yw({`rYf-6Iq)N-bfu3zJ=@7F>3 z#L^;rKsL6OJ#*v*XunNuN=+GlFM7^d*&EDoONiI1#U_E*HU!=c6^w|0hg~nhZbdY- zIyS5(G`m5s-I8!` zK{!&9mXHs)aYmc!J$GK?He%+DGHU9gu~o8joycb6@^Vb`Q%I+Ru|SIy^0+-Zm}xgb z0&9O*n>%v5_EaMBqtuF!5*zF9h$gI3B{Fu>4O|Cq{h;KiV--1DTc2Ofu+b_iUmA5o z_9R_r61v%OzTA8K`u#y1cPhu3^+8{8!d)6p{HnTEF@eNM&0mg*==#n0oN)LPt1rhG z*|eVEp(8{0#~kk;n`YpUeL?uROLo}GaRggCz~LKFT^ZP8+JM(D$=_sdQ^SHzhgm@| zaoL%MeNrc^1I+TAhDE<8+hmSX`Y&u2*f7zLBv`uzr3NMiekXWtheqc)6QG3nY35=rI{_5CqiY-WA3jZ{of<4*ZSr5<6>-N-qaL-@#ntL znZMlEf;DeF4d{wTH9XA1FZ-9YyFe>v<@ZD8cZmF29Zo!BS6=@+fR=x+qMd&YLzx&h zilxqK&9VOrnAxdvNg8 zABLyD-PSk9N0LuVoMU;bW{;&)SM$V4vyFoSu)e`cM2T9}Bg72T&!s( zyyKK!Z&@xwF$+@}((JRD9GnJ~t^g45P3D*KC+B!S&>trO0{bp-t=JZflMqf--bWW} zc`0pkdp+o*g`OCTCQ}x64_c2SkyVi_%zG`kF1UJ7(7n|`07OC~BM6c3cMv}4c-9^k zh8E`VJ=2m;W)1as1tQ@vl zlpN=RY!fI0mzYhxP90GwcOfe6ol{&P&4x2r8smRM>+C$MA%!vU=&DO@`u^-A?0Y;D zj{{D^j2*6|{oBuX@=LUYfCEQCuGIIM_^P@+Q^e@H=Dhyr&P0YyM2iSbA26(+IS1J8 zb4P%oW*5x1OKrAxGuJnKZR1A|&3E>$?deqh($;HafgHZPwi0pT(9d&Oci}N-Uq% zL|Kw-4W41Y4Z7uk3eK8rT^95WD)4Vh;Jkhu<1IhY;P{yFd^5WP}GutswLZvVd^;&mT)hIa8QA9g3;TRWAWX`p|2`o%T@Y0#NL?;*TzmQ&_0T zffb{~y>S(bT$&q(!h9AXUjb)TLU27gVqOPgBMk)G;vacG)6mqJpggu2XFCNF1!mhd zp1=ok8?Bkwek&y76{928d_M^nswz|q_6q~0%pAAuUY}8%?)Bx#77(H8_H~h3MNP;V z@(;UM1miA;9rrh8=! zDJa4r3??bkq_3^PxLp+**5RB)1ZlWs{0Guj-PO~vLZzJTaX>Gdy_-|EM-9WFG@}gxBZ z2*OTu{In!nb0HSp@MA;g+mHr^^KE;Md=Es%fddXIs9%Vjo}xqMDGgkJQDluOqw~?K z3w8M!9zqi4@x^g`AUB-pM*99MQW>3A>HT(;&?yWKJaAMUTeJ^sMqY?1Ocps|B7751 zkVk|Gt}xF}7o8zd*^UUhy#G5W!`tiIq9^dQ&$>qI-qR=O=Xj|zRVx|pJK=Xu@{cnY zBgS#2x~v)O{H?$p@DEwNRbs{DJ2-o#&v($|6dFIMldB~)F10PT?!_TKA0I)!yQ?!u zwP-8Liw3K)%Ayup@c#9Lk;H|6OQ+us_D_O)rWPS^VAxLjtT;#%{6@k_! zNoQ49=?4e@hh*u$OF%5N($4@vdivn{;HuC^&8pBPb3GfvuYNCsB;Y@iPX#{J!?8vQFo_#mMP37x%qReu?I(ct~ zrWg*BE@Z#*^Lr=AV>mqfnY40!GD@!LC|T=yM;v6Y+}JV{BLRmPBU@QD^(r_8KZu`T zmFP?QG-3rEN`A#~TnWFR3zUTTA=9MZC!pKWiYJ<&)2?enW@MhVHY%~r&%cMYk^&n7 z<@fN3Oa1Uof8mFpEbKptc_qz-sl9R+qOUM7A5DDH-unJv<`38eGzISW31~uP@4|2u zW;*z?9l#7}u<3e~nB_zBK&pDUY|!kDpwUuwD0C`hJ8Xs*r>(~U>OUz#V0-Qw@x^?$ z(<&5FmZSDI)Qo<>Lk4#B^ntyX-|%yXTfWmqmS+4>Qb&&O26u9fez?}ZBCAZyNES+# zIJwIn)FJLa{yjHh34u)OX{M8Xot(LT7hvvL)NhjWu1F%r1ENg?;1#6jS5dj<6_nr* zh76@nU8Ig19>1C#@r&z-LbEs{nLfffZsq#5M0+~-Z8kh$wP(RmAM-PuIto19c;nLz zCCPS_tZAy9x?|Vw04|z0ri)EZR1=ncNF*r~2WV%k?~^2mz7bB3I`>_48IL?!x`<=Anm|F5{A2y8aEMA%x-Y|AZfb z5plEn{v+!=?lohaIR-`j7Vk%Vw&JFvWC<7a`UL%vNzI3hXsa>QJIQku zZqpyA>q+nX5x7h{Siqxj>_+^I=8}wDVDZ@|4*2cTSDQN)7~HLNqLFnaziFQNl#=ef zJKO5(Yf~pOza#$EFX1jMaxedo3rHL~^E`id5qd~iJ!aL= zJpBw5X^_qeLxd(!iFy2`2o(&ZP>DGY(hN^%FyoCspN&dYQ-Vmd%eDH%N3ekK6sRZ{ z=t7uSsc_og;5Abz%FspQ0EvQ$lvKIS_1-1d(o&DckRBTbKH7VRxewg{4|X!GO2~TG zh&)-k@s?=$bqoO6DEs!1+bH|BqC*`d0mp{V^s9OY zi5a4+uZV>Mpx`P!LWQHx7?`q0Iv239I1axN_V4w_UdzB#htYfFKpKIJfJkau*!4ep z9H3XPd#La!e!}>nuu$Rm0{2g1-lBJLdV+j*^%8dF8`A))f{6t6`gY+`uV;{{-%mQ? zF2fJQh8Xkj3W%mC=NWK;X)FbLu0?UOkm7R{r8@wJ#F3*U`kb`Ax4M#!h566ToaSX ztC;;YVGUyES4>OV%C^XpXJew>*mu(e zR`v*6!^UxKNC~)y@|2E*)=4xC zOV?5-%UFKY_Bu^>Rb^Y6XrNTXS=&-tVp5q$2E2T&K#k9Q3Yyn72IqkeZw91EM8_9NalLS*i7Eu0O5fp!ssksAu9x= zY6{}sHp|2qg{LYKNi^TKME!M^6P?4{9mTbY{mn{S^-6XkC9~8Y+Q&<^)? zUY-F{Nt5<%Ni&%>KcQWeOTGjM&8$*g@K_k!$1B{v=+k6i6nGXFB-g=xK?Q z#*16N>G-r^Tk0P%Q#ovsu`@L+gf3+z6oYf z=VhZ10o!dbaf5;`CdpPS*hnXQ7)|}E$(_;tW}_Q$H?20mB5N81U&$Uw zVU~wp=mZlIK!g<~nUb^<$P~iO{J=^!wP^p!anZO9S&PsS{0WPNTJW~mF5DQ43&p^; zhCCT@Djx5?;?4MjGxn+RhaFpnXcM017_#2NgnI5(ywoxUMWYw) zV^(CKSL#XlK_z|Ub(j2`P5j)B=8Qp)iF0ka+xJdqax`BQ)1`5orCyZ1ZY}pcjh&u_ z+g;a-t?ZF+TsRm2T^AD?aSlUQUVT z&eILEX$Cal6+|dncPw+&OqC^1KZql8vtSe->~wJvvAbjd-u=6c@{p9?8 z?Bp>3x1?e_Cc7AQFt%Qq+m5l$rrVX5QnlxvZ;WsyhTD-M&&1X+YP0hMN2$fv2yFG) zc8F9~U5x@ZOnyzr=LuqzWSo5{>$={)Z@jnlC6`Scgso}vR2kMIzzPV)@>PEQ8k_th zXwhyE7U}0n1H#TX9Nj+C@3IW55m4$o^8uG>$8V6;3Wk66gpK;!k#5{*d6-<;F>>P7N0+hq<07}0(>+{ zc0}}J{b3k&y?5`t1|LqbF1lH({P$$~8y_Cur`_B;Q&#-j57wq~iWQaZx&k>Tk_r98 z8DY+v+N^QOg8Py2cIc)Xbs0Lbsdl>U_EUKBEe88{BO^Sn-KA=C-8av`6*HrpIrdeJ z?;PK$MmEW3if;0gV)Ezm#>QlL9v@Q$?|vDYE~E+?Gs(y*lhIKtP3%ohJW{{V#bYo~ zupQtCR{F3Cw*K7m!hJP#S@aRmJv*|}$3#dB(ABU(P3FCT?gNv@t#i##K6u^Jn|Akl ztjO`bdy9*f<@rt@&ndX3KEAs1)+v@G|Bx?z6>CeVIk1-sl-jePYpPXZ)0{M^f_gxw zQd4b%tBIh)vE)F}c=*xFla4emPoch@@Gx>TMLKSpX$9CUmdu<}$}Q6I!O*?TN#>;B zj%*bEsJg;)9A#Jv)PYL;NL$~m6ZNrYeV@?85opMdcS&@)G&r$FF@)D_h2${5UVh0+ zgk(e2=rg5T)y_7P{IU5KRIUN4s@mAtFn1)x3hCxjznxLw!A8LP4Ca)#*&6A=)__CZ zhW=!E&>hdkj_Px?G43=L`k6CNRE~--QAui4+2$!B9*)>U)Q)%T<(sZdCm;$MjG&f4 z##4%FtL1(m#ilP&w4FI(dM&dz$ME(SFu2{K{mBC2SDCtk_*QJ%Tg&rN^rZ9gp7;ue z)e@ACky+#f(rBLABfCT41L#j#55cw)1N7{mIwnq>_R)*LzSdcTC)QR_9TQmSfHe>vCN1ve9FLpv ztFBkFq~q4q<(8OM)3w4r)^KCu#st09*d`r7tnx& zU93aDp+IV-W615z^%C0Fcfo7l%R5R2r&7YWDIYGbUxcPccB^24S0kWvHf;7)Pzb zA5lX~!D&cSil!weCQMf;9WisnWx|>PwNMr(cGD?1fV8=yc&u0=x~n1^(ybJmTh=Pn zK;jx<(|{4EWJFe=K_x=5e!3Z}602f6g#+K*;M&f4^Y3yd0`-ONhpPoWAS{eG?;?#% zxHkw3bE?Z5pJohBVB#(ohIZt1QE+Ag$|p@naEz)@i;+tUzSL^e8a8dy`gOHaKwKc~ zcCn!RYC~$cTVeI6<#P*K;7{NhnV%RQD4R4kz%^URs9Bjxb03sTdh?0jH+ig zBYJs!V~6;t*tBJ7m;)m=ecrw*#BhdzOXIk|+srI4GbKA&b=s&x^N1!6eGBvQjYuBdCsFLblA{12mX__%>>< zDPgS^n!Gr*Fd}Gs`C!Uf_{DPpscE|Q93bk%3zN=^l&)ooBDx)cym(TX zLhVXW3`#!@1f`#5a)BaW(Yzw^TLv58j^dp>ZQu>f(+PN(dn$Y>O*7{6OtfVzi=FpI zG4srh=ZDX&A4d8*+s5@H8cEsSbWBcrxc7JVX|wb?L>5%LIh-_SD6{mH_nd!tr-s?T zM8AJ7VSuFj-M@v4l(ieBY+OfHFLStQ&T|1ZW6k0SV>}?f^d9jKPw56TO9%B@=lo;h zHqReq_>Vyie{Q;v)T#B-nk8n~CPW9kZH@u!7$6dN z1E`a9h5C9a+h@zaZY|#RT9B=>wwu73v47o2CkpCNpkal{JG;zjkTq>TeXbKg^xjs@ z3p;Z75z#+)A}?4}vd6i*mFxBAS`=`l7ODmIV*2-VjeH`1xv45L6!Ggm5+uUsyCDt$E zLRr7vljbtPnB;fKu)m*9#CZfZQsAS&|DG)W-QRUhCR&0(j~`I!+1xsCIm;|}z~kKS z3;Fw@^Lws9vQ6bpP+gO@^kek=UV&Q}%0&KR)(f7O`Dr)pImg``MJB1|FS0-hHao`h zYuQx+2fKA1O^^4KpFL9`x~ai$JEY@bTUebu*o6o=qpg}X6~L3nDunN5z`d#T)4<4m_38k?fZMoDPC;^GlHtNRA#)Y zHdM)~F!Xgi6G}UAu*179PKSF7H)iptxU)Ms!)x6XQajakE!57LPX$|wZ=#H=d_N_* zcj+QYW?TzDeTIs13Jm{lZ8sCh%9$1Ml|g6e?xh2DYG;Im0~GK^*3$H*MnOxLF8i@i z-YRfn7n5+S+*j6lO0ZRX+NASMw#DeH;!#xa>!dFZRi+HWH0@h?d7akPmb7)*G^$|A zTrCb;i?$&VQ37Ah7o(}z%;gB__TulYeOwau`AoS=-{q!@wH9tVjW#kycJds0s_mf- z(DMU+&F?7ivOR~_;_oK37bK5R9t2grwrH3c7&I(g)ma$g-d-@^Hu$)GWSQidN-pTvkltuU6C2|Zur5RGv5*wuHz>@+Pa=_wbAM+ zYbsEtXIOZR!d+V|vWF@=lqyy}$Gtb-VONV(E5F9guAhwd;BvnsvI{ZTU?Klu8f9DZ$SXyuh#9ryI~5eYGA8B$ld0e$0)oX{kZXWo zF=3r*Ov7g@J4Lx^f;5JK@M%d-kq#AYcq$K}$>`9f{-thMG=gS5cehS>DeFui85s6bX-- zkk(PCS!P_S4U;6>Um2yzfj^2U-X8nae7$bI_>eims2pQi6JS6`jMzGwGPdvQJ^Mai zdf(^72_n3SPV|p=)>^Vrs6AfMH)34?^a4wKPBAbye?~r0zlDsHt6zYCF^rlImpvKi zXr7&~+`b@K%!STaNT87%_LMhpCs!VvX&=6C#437Ni2Jj_CwHAf9VGQxoIrb}qZgdh z%yw>X*Vn_7kT1_K28}6EKbO;HwM|v4`l=IaydLPSLA%>|3GF|wX`>I+3wPs4p}#O* zQi;~|j7U+8EQuPAT&g0M)kvoFLZyY9jWY`97U1-q2Bl|GTy?o!ogY04?g`Novc=nC z%BYphx?es9IF4-&Dqxsxp&L52W{$13aUZbTFcoE+QYp)wZ~L|zngmE!Ar_}*vU#9K1@lDsqpk^t8<$I62`qf%*T$QKFm+H z0|eKh17(P=DTg6Rlu=kANv3(%q5k^y=kPBQQw>3)EJPG2BRt@QwnS_UCz5|;!B1?w z1Wqz-g9`q;y)`uZpYFSrelavK$=}xgFp=+*i7JK=BKgF|9_xxIa111Hw?YH8TV;Y1 zNbgSG{m-I6GX4Kr6k-lQivkMkKNkgJ<7UvJ5GeD{MFAw+R3s;fVgKb^?*4Wz zM{GdOr557f&LvaAe>j(LL%*F%tWf@W|1^XeputD@%p-+5w=n{{?%y0KEerf_(eIyTg&?h;z#pNN2%g-8Kbq5= zZCNKQ4?mZ1fmY8t1ObQ>O#H>U>Hjj|^Op%dT=Rb!ycXJk|3z%B)&;D<{i4Wisc5n}v*yqV#pWz~R+^?*+I4_62@NKoYxE@5a^JY$XltC&TkAd`1g z`=$5je}>10LIKjrO)Tzz(OZD!iQEo3%c*^Y@#roa0^1|wf@$@dOH#X!&fDp=Hyx#n zn}avHS{${+Ne0O44n0pqrJhl3C?t!onDcqvPOJYUaz`^`+LFx8ILdDOaZ-Z5Y)__z z&Z>IW;F-|-)FQh4PLi&3ul~jUgKt~%e9kMqZ~FraTuszA^SskE4ByuF>nwD#_TdOb z)#+?7Odc{=Irah*MycKF!;ALpI~hoszQoJ*A_>#4Wb-s34TmasJhetx=8;>`_AI6r zxcSL9)5n0QNv-*DLfPTQ-=#}}8zB9Mt&vsDy|r4(%uW%=g;OQ-#(nZt3t`oQWFSq@H36*TppDh{7$9{#0W{&LqXs z_Iltp^A-co7j2>xbth#Bb7P%X1;ai~h)Kxdw@7ZspGmwSm1sBHP*lb*_x-YkxH4g0 z!p-rmLP|`PClwAHmmPI!xl8WUBOU5)vUVbGM!QrjE+@{bIxN|~bK6uq#a1?yje|Li z&6^}a$|*&)EPD27zl%S4c-Z061P`u@S_WFYVtCTZR1eF7JCx2>o-J8+3Z4ylG}Rf? z)H9r4Z;vEDqHLk7WYzWKASADIeo3$wJ0n!3L(SE(Qi`x(w1KyvdpOc7yv zr6-KK!44^MQBH9xgaOO3h(d(FF;|@h2`#3NLw{lamI%3v=(ySzL=g!7( z#hivteoDz?&7?lkIuY(l&-G^W-~ooN++OXKyV#OeYKOk!FQ0Zu+uHNv(0F&3Ran*3 z0XdE;ukr>#r=j zVN?O5eT@>3sy5|UtbXV}D{L1BJn7?8Svc@Tcyo`S%A&ow@w9Uj4i8)}3Mi#6mBBps z_fi1_{cW^J=d8dM9tXz3Y%WaVg1WcF_KHLjLj-G)#RGOrY_8f`)^&V3IfH)v@cF%g zHWn1#u-d1GGX$NJ0M4!zh~08&VT5I1cE}qz7jp` zQ)Igy??r^-)29V|nIPlw`zi_u7fQ#-1Tvp|MI*mpj-dsIA%rBX1Di3Sf=?R$bd(6n zX-~?UnYLHxHEk@>>{D;|zSQ$u9RRVsENGAi+~TEtTP3H!TOBllQi=Td1JA;hY|)-M z>B7Yu_xdMa7KsMPXBS=DecTqYWTAgaWl{hN#&!GtW5;p6(hTP( z>v^-u_>>>XNG;ISD(Xo^e+r8->RM--$Hi*5d1x_%f4Ju?tTdQW=3je@;|CGmgL!NH zLpAn7c{5RNUbm$%fxp^Rx_Z{%J(QAos!}E%#4QpsSk0)hoFZ=xzfM5xZn#Q$#t)~o zV^T3PzBE(gK9rMhs=XPrx}NeM0^Ad8*66(z+}9!zgA@Ds<$u1aSV?*%nq%aH-ne^x zpK><0$I(n3?+Q7x%UA;oat%}@aCNbxTZv)upvNvJT0iHfB}|t&ZV%@T6^V<|s|DS( zECLGqhdHVzj!mq7q13st9oi?PHGX$n#tgEf+q}s09p792%-45EN;n_On2Hiz6v^Fb z1;2UWpd#G1wU9xHw7K*p1Mu;}jY7s*mTwGtv?}x=F&6Q7t2cU9A?D1KXf4&v>j|ar zhUx19K&k>F5E9^(iiinscEnej7Bp(ApWtrwA*GQxq#?67xnvgTU_$8XdwYEzyEt7g z4hwnf6n<>6g)z;LJHuLY+wfiUGAdZ?Yx0gQKIL%y?4sW2bKB>j*L!0FE_rhTqqk(Qv8b0@7wz$wZOMcvUBP`>~F#&#Fcdq6BgY} zC*Z;BQ#IhDdtgmRtL_nx3#v>=UXCfLfvBN+5k|jvEIB@$3Ouwg_(CYbwEA*?+B@le z);<|I-e)tqk_wF4>~1=7cZRTe=8GI!p}xZ?XmbD;wvJYoUtEfn(|z7hWGdv%?XtJe zLWT8Wpor&yua(d_u_q-6I=aq3Q$Fp3CBYwB$y&CK9$xXN@o1356l%qr0n~jt>x1FQ z*;JG*mzT17lu@lZH}y0Hnru_^zKlw_-TR*(M$zc}=JV)>7r8}MjrowNE6`M1rh z47xOPMd*OpXB^s<6xHU)o*dQY#f1;(v@1NNPM&InD^99vs7ubHsnVHtAdSNNHY9Gz`j)g1=)NLx{i4xCYOpE zn}<)!W7)=kF8@FqNI}Z_R-XTj@liZ;55s9ATI!Yg8Tq0@pdF|INx;t%nKanFr82<+ z5C42kyZ?33M>c#1m#NqcU_!-zfTMRT+n_PeR2iNsmmQ4obs#I)Y9)haCPo->G2PbT zk_oi!l@g?xL0g+l>)m$nE(~f^ZDrTny%X^KO{Wb}{5iwcV^^6mjCE zbG38T{}eeGIYKh)34Db}8*%?t=ngs>tXXj4xbix(vJR!PO5^~1+D+&9iL%&tjH6iXy`(D1%*hcw8RJ5myo!M1K3^6 z>Y{b@fq9`eT?#$5Mp{qlHeKA6y@&gG_QzD!wc8jV@BEhTDNHL4R^eUu5prrOU#4QJ z8t$l>NoMruQj!*jUDsJJ>>lVlvZ~w~W#DbmZEG8|-qVyQ7fP4~>GBEp24D8F4q{Q% z1Zjou!T%P;idGJb5k|eiJWr8gza9uqh0nDiAA{BwjIiW~CPzIk&t`A#D0lCmlC9Ys zMwa;5gcoM3jC+I5;Eu#eF&Gv}`wX|-)#I^H+g66Y--N)v6*;Z8b;JAh za4>l&o*V`r)qIyMRZ_x2)=PG@Wuh}T-$ngF3@~Lsnlg_Zqu_u2Wt}dBwco2Vfo>$7 zKGm0nvuL>ai_|?blfX4x;%LF_pTI5KsGoblqlMKH=$hrNk51fSHJpu*zTW?A!mo?Og&v)3T58ujDSYg4xGl&y-=Z6@%8Zrgk94l)bjmymteT0DWVRLV2 z{a1t(rSS@M#9f~$-h`8uw#2!0J=530rtq0%Ut9gumGCFpLc80{Cphi)g5evoD25-T zam9YjsGrv#y%n_uv$ju?;^qUj_E4zaD$K{q$TB4G+3cozBkWI!qhWWS@(EI*HEqYs zv|!=umYWS}&+UTecDC4Rt@O=LGP1=HFwxxu6?gICohi`DWBi$qV$)^^{j(tv81&8G zi^5}T`oS^R`ej49z59L8F##5g*}?}MjLBTv;SCZaFr0t*yWt<*pSB2P95|Yc)i}Qo zZrl(UQXOTJFnc~N>_ox;W%lR-N0S3<8x=>B&LCSfcy8@c5FMfHUxA*59vAK*2n@g~ z{6i~Ka|WspT`W`x2W=+~pzy2z4nK;%)GXg|Gl*{}yEAL_ecioYc_?Wha&dfhShv%H z{cw+T#dXJGNXRC*-jVYeA}-~bpz%Fx1}5`=#~#g{yX`!dv)QV zX9ixQ--w@N17@91xGVSUU)2%+=_Gwmr5W^*-ia{t^=NTp0eUDd#$SP(4B*}dep8v2?QvROKvXys+JP>`XK!Ast9 z&kP5=G~aIn9%@_38qfCYxwqSc7WJE|Y8|QetQR`diTUF!Wb_nTGBaS#y-RI)>caq@ zR>mkhyg%>6hu%C{AkTORVVovhm``ZZBODowEt_%lkY2i&<$QfHqr(=%e<$93IW0g9 ztv3|Lh?H=6y}GOr{4`(1G&<7wO%~W;dt8dTl-+bKmHFv#)&|L<_jDThdAfHVJwlnH zpJ3#P&oQLta0P5L_RM$Q$YGQR}9@E_QY&G3~nY((t z+bPY~`@lFw8Q5o+7x1a0$jwD(e!Yp&2CJ0`tNQAIx4s;eY|NkJ*5MWy^-jyC9aVRl zvy_+Tc5w$?$dk*Q_Ep$5DnZ|BymBaH_XiZXKFuls1y`1Z4$C?VwC zM@!d=Ec=0%SPeEm6i8Q0$SO-w^g!x`rDr~B@ENB%!LqAkO5C}dDhzGFQo1Y9gGvp_ zW`3bH((6TzYI@@Y3eYTYJ3RaUu=iHcb?n-@ZequY*)cOSGcz+YGcz;WF*7qWGutsU zGskw!6f@grIGJ;uxz^tMo_n9}%V}y&Lscr(s8UmvdZ~Z<^>veb3g`F8^{ogg<))(x z^RU*yaIpxhtZd0 z&7ib}v8CO5sf_mEXO$FbM|jjlhq|PY2%JxU4{riSx%~}gK#n=$Vq!xcDPwkOq+Y3l z7AqFn0hcN`E`P^G2>rS6aCKNpSM5YUO2_VQCFLgp`T@x(zFfLWQ5d%;_3T28+M!OA zPi_T{BI?u`=CNYB)3M?e^eyS7Z2cscV+M?}8rHW<*wMOB$`XI`tZB>1E~GK>=;&#HS^j~k1N zo&04Ea=iYrlRrBY>kbU>EZ4KgL~Jn2U~4MW!Kedl2RR09P&b~Fof`Bp1Eejm63q&% zBTHaix+%rQ#ZSI2z3*8=ocR~PnzuB zjuB&cF`6N4f4CnoG@TkadNRy?PT0{vyVmq#kywN%ttc>NiaPQ4C-|`Vm1V!$hrUdj zd^|n`>PUk)M>Y6uTF#ei!Bj6;W&%C&T(O z3AHQgQO=QSA}m|<#mqg-Z<2dmp$*$46hjbT08(An*UEX!33MS zTR(tU`UCDk&8&PZVg%q#Hx-t=Dk8LD*l&q!tn>jinHQ4}q1n@lY zKX|Vi2ReAKoL-=r{?7e_C7pWK0G<9h`>(Vo${wEgb9K>7{r&}%`oh=(@Tph=F<8I* zRK`9HN$~v3rvd<%{L7 zBTUnBBAXDhc-WOWuv42!j~(GAyIp0r!jw%JqJiO!?hKZ&0SDauqiu6ge%}(<{{b>`q`QLe2mLuQ2EQmnj70~qxEe1Wc zEtnaPtWJ!2qr%>7ud~xa=%m!AlY7UGmKv{EkzJ>xn8`siY3lBZktbsC58qjlXy54U z^Z>JunXk-C<6aL9L+-`&&#h{CF)&w=&WC9xgeN_$)eTC<9amO_XW6KM$9LiI?}~qF zRX|rqJ_Fn{tAhF>lV}<^pQDuw2V9|ts z-$~3*m$}I|%BMs29@sgsc)KTw=gJ{7k6r=r{;x-EnFO9_OT5~4hj%rX78o+54fse^ zse(tVQjtfzaPJGmZ&C?e>T6gmRzgmy5S8WBL8f-v(R7R92@(oAAikRR&%oXG&s%H( z)|jpOwGAJrnlci(W9yW@>h~Zdj6FYJgDlifz2JmQ&CeR~BFrXA7D{BFM*dbkvk`u# zWl7lz9mj$uxys;KD$0tjV&d}K!_xBG!!k+v|I)*fzlKtPp1rn~%;1{zhuvqe_fVhT zl%)%)wfW1z!v60L7QK~xTFlUS-o1f)c9Gv+&{ft1; zwn-}^5Ez#D!mwjwIQnPiTVi(X@d<^w3KK+$&QB{nA_aSAL5#9qSV%@!z6nyq!__M( zp~4S-H~Fb{$m|eAy}Gi+mX~|O7Z+kiT!}lsSfsJSW+aG$4g7o3j^9$lveU0GN0G5d zC-HxkSEZ&gpSj{vEBnRGkW01cL|NB$Z#PP2SSP>-EdR`=lNaw9rP);HSf+_6ZrU0_ z$dllE_}fE+p5b4h*JZL@%#x}9iXzW`{~(w3^mf1d^h=n~8|5{~!^3yYG|Gst?0R1n zjReoL3)JFe&6}c+68%p0b@BvD*>mrpD(tnIjdEZhisp6y88ymmz?;<`E|OJO!Co|`qEw$t+f$La{TRlNHH?^FG5tm^xa_Z~ z6-`ltz3-nN$MwHIKUUfXZCRflTso@id{w_{L%X#kSEQH&rZ`+db^QLo=)U%TWn8Ba zd2_rzf7QOM5hadcq>9XRRZ8da524ArluX*gU&n3%p2>xAYx?O|Pa+cLSAT$MO=Y8zIDe6V7DRmoamS%txmdtfxZ-Ez{)4nbGZz5PW0@TAZ`LJ`n!_O? zgh&|QZ)W{Z*B6bX>3Iw`lN-JK2e5S_p#TQ#yC985ddV#iT;&m!s`ZVm<-qF?acsSx zy`!_lEK7jC1tnPlmrM9~x=~}tIVtrY5PAi2OYod~26BkA-;~{x`=@9Ve|a@%{X42_ zyjF(Exe|CvhZ<>;icpGxxr?g zPdaNU2V-(q?ux#CShb~^7=6%FDT?-!!e{%x?4lhN>9tM`(?W+Pj+>YGX^)W7DQgr~s$EPI9&e=be9@u8#Y*VcehZj0Liy}c+h!`)V(Rjg@*kTAR*IoH#Z>mPW*nT_fdUT5I;NiOgHyz!#^Ghj#AOgGx~5oX#2^ye=il) zTYpftl5(C&r%Ce^LJG3Uf7XF!mEG1z)X;%<=SnjDB{4uXQu>9IVUtNt;Ir)ysy^TI zoY}R;xcQrD8FYn6d($cB7B|oTYZwCTxc_Sy{$IoJ|6~}B1;N@|NCGCU7y0TiB_+3x zB=CJjpFGp$5)*z@6IM0MhH^?Wip>rC42D-6rE&EJ6P&Sh9k7J7Gw1m5{~LWy3>c3b z+?ru5@w5NpDnYYJ9BF>VW45*Jp z1O&LqNR7*!3h=pGP?M;X;J-y=ME-3~D#Fwp?+m@uI^wV)hU_qZ(K@oud%yr%XZvqj zX9x7%m_)PwV@v|;lo73HNJ{*ObSNyFaQX|@c~(vZeBQJDhb?J<2HZk0rYOaY(|D#| zK5n=)?>zTZ-sJ4sT?H|{0 zD!WR!p{qqY0M?1Yd22c;ItLY&A(k0ArN3yyE7Qe9x7usy4{t&8?zr-NM`>@prbzjPXv1W zJAsb(^KSxO<@MhQ^x5pc2y|ko-vqjR>Hil3orIa0Xxzd7e=sGTMmXe?ia@wf`Rx^ts;%`rLm-(9eqi2zu0ii=Z1v01))hvzz11 zi5CEa{t|rIEe-azx=GA^Tcnw`+ydZwx;uh5U+^?;?5nB)To3)~$Xm*8jG{El<8f|6 z)xxv6Tc<#CXa0%Cl=Sghb6)3FM&-Gg)VKwWkam^;iJEq|jIjRG zz$D$;%Bi;Q#_q;*Vx+T+)s0PY^7}}&KDxuB)s1C?&HEQ zkAl4Ou~<$UAS|773<68nEXtD`*?i@WTHV-CIf3(gf-{H2pH0Wudhxsp{roA=pZ zMX>N$gRyU&9Oq&J zB<|+HBwDv*02uF0O3Z4U7$yVgK~8ryOm!*Fdi#S+PQMuPHF}0=qPD8@T&>Fk1R+T_ zTUKkj+F7|e%)bWN{UmjzUCB0Z=caaTpL$`Pm5r2iLoXZcRULT@paUIr$0(Pcy-0iJ z(2KLz(tcVnt9F7WPod(R#7LOcD=#a4zI%}TnPel`^hXbp37`l0qVg+ZtTgx82zGpS zF8dzY(bjiZv$>)L#l~X^p3oG2)}$_P+I! zH2#eS0DlqBXb-8QNshJon3wUT(?h%QnSa>06UwVt^;enY2OykJ->H{c&U$t_Qpir= zV3W@nKkdbA$aNF6-|r2Q%naM1)ut8vmV+GPp#cdZz2^$(xN9|-o0sS?_9nwu#`+b! z?y;fSfyRdw&`v#-p;P-V2TAZmTPvA@zY(aP5p{L?ti~YD%$NlHE!tWq6iWVt6WXmw zHU#(rH#S3F$Ud^;5ioPyc5Ubu>8^^uJEyq>R z+Ux{gEMEfB_{;@JfXk*S}%w|Zpcm!xSsAQW~(4!le8M#olF^Duq4IhrgcU-fz zT?i2deoKB(7+O|D1|2@cgAil0;M1%+ZrW4XHtr%^WW-m?{Lm%}e)&AdX_dB#u=(-Q z?@PH%!*A{07thxxyc4j5&cI(t~2$P;5I zO277tZu-&F@Q+;@miOVI%deuX&dkd=k&%{RcLpf?_bKO=VQU3acUq&mZ-W8w?#nB-8lCF0P&;npJTDMS2aE&Z`ja zcM80+$U(kwlRfnQ;_hp6v+tlU;9=LklQCkJ2bUnqdmVHbw_&;Qb8{vINu7tsV~;)? z-Ivbsex~J|;2gcw9Mjw~DSPB7;H6eqvq~}=Kn+MLlV8rB%kp52PcmI+knT5TZVa5#8PDcq@F5Y5k~zP+$y3)v?1KyRh~4#=}W3rz>TzZY9eM#CAUOI=H7kRs}Qv zlt6&Bv3IhS^o^1+*!}7TyZ*-x_a1A^`N$rF@}E7aO^D;c#D?XvcSNDnM!@|#nL3$I zU&Sr?KmqDpf9Wh?8x;51q6ElQD}ui3E{OrQ=Wun3b&9{}6pwx8w;Yv0uc_3c=#;aR zs<;FN2h9lpfxaRY9x7_=8{2~}T7r0%vF;5p!v7OR;6L%$7rb;G`T+ zD&Xz`YRsR>A8|U7gI|8o84M^~4t0Ty;&7i*-^AIZGwP!!^El64?{ai5#<)3J@1V7( z5B4yM^5GOcjJjgm!#1PH!4O#v3v zDWj9a`EBd_1q3-itDOcaY9>B#d1Cj4!Ue4_Bo6Y0cn+S;v1|0=l4^xRt4 z$s)Jfux?|~+x=$iW^(iP+g8HaOZH3IecHzIIE%3gQvJs@cJ$I=%b zwDnZzET61uV6UD<-T28qcSE}SJuA7M zlN|2|57rh8gO2&88*K#J95!g;4!Ej!-mJFpkK&)8cuEdnjISWI{kyE z7@~U$gTIu~3x$AO0#n#R<-8qi?RwcLb14=TBRH zU()phVLylV7EvBLMpaL29 zoAhFtx5b4Pa8agYfXa&<VE0%7&_tk9o%^^1bG=%+0cVJKx( zbJh+BWCdod7VDo0uIc6l`vN54Dr=@^&vr=k{ot!*tEZn<4jfzkQ<;NgKM8>gxmn|9 zIA}wU!S?Fp>EzutOkY4-#JBjp7XxU_5yxo`ku|^PeBqm_f&HQnqTk`n6EW8Cxg*Q~ z?gh!n-&queSl4N`Wp~AIqv2$b3WW;g46XM?@eHRK53<{Fv9C5&*-yQ03`m;hR4yN7 zfT;)rmee!JTrlMHUJ7b7{4>>^g*xcj1Jj@eUY47RO`04WC~qdoC?x(K&?uye(RVuF zMAYgrAH&ZSb$b+b(tz!h4gRFVim>qYnZbpd`yUMi!8d1vY2WM=O`yvsQ1ktQ3%IC$X3`~9ut z$kwS-49NV}dd}9FNy#Z05L7_GgqT^yxka*QkFkp@b}g?@fl$Sftgr9I6AnTJl%~IX zZ3%3ZWwv@fLYUuVKxCsOx<2tZcaL#$ySp@wexk^a<;5|C30?W~rwoYbl(NDCS&yp# zgdBA!KInf$fvBKE(n<%?|42rW-2?Q`$VpWfH{U;|5VB2dIe?9CPrxl}H4;2o?ix^S zGOND-t~BTK5<2jNSk-6U@74e3V+`G!zI}Pu3xr;}`+uL<$M2&8({G8nKoAu2e~CHj z{w3zf_b!E*!w1MaiYu-D?knB?oe;}#2$7He(028v#XR*_yi(MN3JP&e>b>d;nXa#T zACZiX?NR{9nHw4iQ(>|xAty*c;2<#t4Mp-P+c+3R4+>Snm~b+B9bMxIERn=m4vBY` zxL*Yr1i6y!hk!uW@HQCjoU?6K&79jP%Q{2}F{K5TsGwI&2N1b^i|%VV9C8dG)vdur z9wndcP=4yl;*hX)IrIew&;mqhgK?H#XY3}r+rHcE>TMbcYw2UMYJAK^;?7^d()MB~ zi7WF2JP7Voxz{0QayFj~5v#>NwjuoQXxxdkr-?g#zYSsk4ad4l+Z#gz0@tZgoHr~~ zWQ${iO0ZMZFDD;JjO+&^Q@p~5eV}IZcL77du5d&>(svz9l9CVVfik~!FvZAzt6;t# zuEtf*w=y<%paJ()8NAd2;~tK7l_->6;$9x!H=mU@ZWV?8vjsq!kDNwbml88H-<*AI z`n!@zP(}4#payUw&=xd&aE2#I#t&JfvfyC9d&#F1Giui(hWCL{846_8+_ zGoDXypb*+{y1c-;A4kZ3jD=b*#@iV6!)vqlq#(+ueKb~b&`{T1KxL!3a^EaSPfH1^ zAh83n9d}CrdG#Q={Mks(LRhW&aTW2O(X>OGUUR+X#e<`FJwT7o3YRFm6X=NicjV*q zQGf~OU7*nOpRGsxU#(|O8PIwFc}KIQRW?AS#ghejm?bQ>ApO48h)%_qW7e6;C73dg?E%r#49K8|=w`@>GKwZGUbjv4ykbbX<`cO*cSR1we zSuLs_Q$!iLk41_Os*gr1y)zC?i&qaSQiRCXs{J;zD!kIOj{v|V_L z4@fzCad^EQ7d?*vOXv_Vjw3iiyj>hklHx3}i#jh+De5Q0PkHd)U;z`>MbbK6Mr;Aw zH}{L%aM_09?=nWRbzK;C+kF+AjH2XZ@FlyZd{-4qRtv!zG)+$Vnk|1US@TV_LOdfQ z1#IpQ)i*ozFRIViRE#)FnEyEMx@v}{c1(}QZ2+b`YfQRomnAE{D_OHKD{AqHjXq|$ zoXKq$gNx328zvkilfmqqBTn^^`z@8~WyTxxrR^=r!(v9%AZ6_8VZiN{>J8=}Twez6 z=9&^)7CeCKGZP|jrBG_h+Wt8*0-r3(7gJ*d9CJhaW#55KgF8VdMtP6EN<54s&9nAY z(IbwlqCiBxt&_U_r*Pa=9ET{Q%9e5wa|F_T(;8nAquTeVu`#`7sL#T8OCifh$IH=g z(dPq!uT-)dQ-=1@ZJ&|xXV{uEemsi0D|N1+9gU%BJ^@w`_g7J+qobAE<7WzTbFJ1! z&hlW^esuhFhq=xa^xQ;)PQje$boR3yioF>=Uzjf9ZZ~q=JtK05WPWq-s8GMGxouGB zGi`JX+R=Z5`&}tk+?1kpl~7Yb?p)s)Ulb>I95ilOubg|K`I?X;DNMT%>~mAUJ?cAP zK0So_fiqbGch%GhnFQ_4kb9z)T+U2jVzo(g|B^=5mZye<% zKCfQc+CmSSlt<0gS!loNLR|WN+4$V$wbirNJKUW=+wBi=!OYrr-W0@{N?D@!CP1To zEZSan)b!tPZPvW*)EFu}iJJH?v|rQpZ1@VRNji`T%ooXi?t_UMxbRa{rH3hxOnmth z|2_0hOx(ID2Yi{C^*&A`YxFy%pwrRoRLqYA7?56d-qki@x4qUsRZ>M0c1I;r(UTIf ziC0EKD08$acC^0n*HyEQYJY0#j4eGa*zyu>QS!n{Qg(Wc?CXp|o{u<1hD=?7Rk_!a z53KAS*^V(~kIFYa(MCn4TCQ2JK75pQ1(m6Dx&ucGTEk9Z1O}D0F_!(>#w5TS>{l^9 z=}*Tasr+Qj8uwtoAjwdEtWVzT)WCk;cq3Jbu~u2*j{fkNAywGB3gzVJd6HCy+v%PC z*Hq;gIknE?Uskal;c>DtcDa#!JFQ-~bPc+n{)Ya33m*lF9Tt~c4jtlP8aA$I-O^Qo zLH^eC`8|^vnzxS;NyXu?5Quqt8TE=1T`eg>RlR@MSBPj3vokZS-0|HICNfN^5# zW*Iobb+qE?Hjb0eM0u(^mmPOdl7D$w>V+Bgs)B%%)?hzYsBF^@gBom@tc(ONvu{Rf zo}0Kbf>BSOV4bJAbQubEq-$+VUfxbT&Er;uVo&cL5FytiRNQ+Aj$fvH9CrsU#bT9WjE!CW>I^~m-aDIb$pC8l@xT6=7n z^bCo`;-9eHU#2U<`n^h`*qZrH=2>J^=^G<;(I z{<($w)p7~d__C$qrfsTjCru79Mi!$vbo={V@of9Cpb~@7@JhB-bi(KH);WdFoRwC9 zQdx>;bxgnyF>ooYq#r$Jb&P1l-An}5FV*l&+ukQwlhhjR^+TE0u|FW6u*s2871 zF5vy1wTQY=E@T#lZ$aEboaeEQxl`+ZSibCFrRk4S2w!;B3HLNnWHp27ow=a1%jFQe z4q<)DQ}EM8D-EZAf$3oj|V#n2m3pm~Djw6zWn!MH>Z~AEq zFZ5WnU0I~rA{TdpJF@%+eNke8At^TnZO-CyrQjH(TSm?zs$0f7uGKXge--_|MNQ<_ zZ2s5N$B-QpOrq!=6H~_)o+eNo6KDsHN)>%m@B5wb8QzQ3UFz|^7w&ES{qr;v@J-A3 zz!4BZ&FKXo3MA-Wv#BFL^1JHBBYzY32LyJlBtUMU5nLzKU*R;_6WuL?60;_I5p@mi zcUXaKV+0iByb-9PcVYS+8ufKivlo{~QcKGhRZHxK??~s}&~9R!)k>R(gj-&-ZyvP0 zB{#gCF}XHEvaY|l?*7b3YS%>F^0`j0(fpN%T!;{eZcedQ9L~En5Wy#~HBgF-2hNN& zJK}#RFs_~~^&aNh1;^F@n`qTBD6iNxEVb#cs7<_<%4{Qdj}j0ak(zDrJr=vFhy9Sf zYSeMf+dF*(W%@h!_aS?yo`!)d8NUmwFyE~PL>Z;%CtR<&Vqr0@8si|Y`k@F9KK0s)!uRld6cdmVKD zxua{MQkp=r;+jf~6rbyof)RFWp)k{(RF9RpBZ^J*HX_)LD*vagUUG=20ElhCN&tBg z3jFjq=i0;!{#*Cm00cayfio;m=p^+JD88g#@0+mz=iU)*9A#Mp-7|LCV(Up%BGvA< z3q#|RoeP8H$>cV%c$MZ;-dj3C%3-xa!H1r-m+9Eg9B2;fET=G4wbU1<>j_%h469&pM77x=|tKMGqvciShmK#5Aa?LfKr%^p- zMLf{3MyxwmU}jS^TLhSFYx{ew`?2i#hW19E*)Dtc;=)S$l&NkX-8`1h8(hViHHxyv zweH!iYYNOO%PL+>688}W>}&dlJQ;SiDx|8<`+JYO6&AryWWO#cdY?>c#zMZB)Mt|k zAW#>#xPxnFDaorKxvU&I3MD-hkM8XYp-u?Ts;aqqGdS%GA8-USww0%^o{U93<7(&` zft!X^QYGBQ>2$k!ogg=yP2*&J4@~QD{4|@oH9q#t6j5Ch5)hGU`nYxZvTY$!5XiR#u=CRB?leaIu~g z(ohnfb+LZyNWspq7jumIXiQ{{BNknQv2JtLHg!e>-yoHsv1AMzOufN6o;8kyFO|uz zoK!B8DZ|M&jtI7>#AZUA{;dLC{KYj|xSx-Xat06NJVU$1`GrHHjgAwTS%Wd-L6eO- zw+{^!KTC3tNhyLWQ(r6J~+!5qNY05Bs$hrq4`Is(r^#F7 zImwnE&J7B40-?!$_%Rm zkG-Gd65q7n>=};!^J)4G>Fsq?8=x|E*ZxF(3;e{H5rOi-a+`a-*>`P**}ivSY(YBg z0I5ha_NBFDaGvq%plg4zmyUudiWH`dL}yza7h&veoB^76`etPqv`P8H%nqS)%?E0O zEoHmWj$Z{XGf-&>Yb-?oS?w0}UrlN8f*Q@A77GPI7knF9tjMIF;;d$#CT;Q2i!aPj zzAEnM8+$C@PfA^8ZGQe$ySDQ43h7idol(hkr?-*9)dUy;Ibyn@E`=%{Sp5}R#I1F7^lNOv7W#6p4P2ow%5*Xf>^g-pD$BIgNtN?9htdFHVDQy#=Y*fF1ZC|2baGT zS|hhVb!{RCA~zMeB0jNBS6$TyTH+aIrBrY1b(vfK!Ve<1 zVpZ&Sgv>Y`pk|v5VOH9$J7TUO;2hDy&1!4s6GrUOfNt1OZm!1b9KlSTNy4%GBviCm ztSlvn`Z7O!=%1CaK;hR~*HoG?VZs6i@oVpDz6oAOg556Ijh2xpdo?2+mCo%RkF z7xW+#Xk@vs2r-x(H^cd5xO%^;h@P>Wm!aS@MR?ylUbeqFR}eMMd1;fG;3)`BB5<`a z+{T{P1`&I3MLSMRaReRR*v}q64Hv3}lPuPU4tQmnH)rjRvy{TnGyB59SF>ozsfVdH zGrl-=NcpF=QBNt)r7TSa#!d7}%{v16j!98y^zHmO&dTFVZ3VrVCX~I=)JF=}#?prk zo70tup`7klj#0AAg-fVtyi7>;o#QLsuGNq#b03B~luoCZlny_1?vcv|D`}dQjFCjq zha4mU8u8BJ6*f{3+LKj&5<8uR~N7c&%r3OYSn@-73y4K*tH&Hd*3$g zmwG^TD8q(*I=y|aJQXG}7WTZspn2&PppK zTNrlYpU0xE3u@OWlvftL-oxGTQtf^H5%SEeXc4^CUj;bHniR3jdintqQ@mT5%rNJqR8rsEM z8XwvNG)i#7B`~q z$KF%i#m?Ylty>OznHS5;PNX_0Ht11J6Jv_L8i7 z&y7EM*G}hTV1-P+vA&HJqe__-@7F4i(sg3EC8fhWzE~;Fdfk2Pe+UP@t8wOfx#XQo zB$>yv>`Z;z8Jy+zK8xx)|H5jq`E^`41UD6K3nNUGPo%s&F+tgdmA<~GrByS zZhOnlYhk#(of^;h3A66^cDg!UW%p*Qyg1!&Z#7J$TI$oq3cy;-YtP)Cmeaa8-R+-l zQ=wU}usvUn##J}Y3CvZS_VBH>GCJHIkBUz8xzjT`tc*S9Lb)Gr=kJWWI9;z!2Kt!n z@-|#tF_BKIXS2f5jQQ`njS1-%%*j(fNG%Gs5c!BNKCfDGrzSvbj8qO#`SnM9#GVN_ zFD%H6NhcFMUzMvm#@p0Hqde1w(l~dcBDy)qthlciZ7B?~up1DNzh^N^{Z)5}$0r|0 zG8w+!iI{~2ZmG;!#;{={v{M-Dg60*VTM;f0=UVDdjx@pE`ljTu@HIhg3rdm6mVk6Q zbP|eMNPOhE_`yLIz3Ax@gUN`c^6U38wa1H|&tBxk4CX(QG|!^Z@7JALH5Y|X#tB-j zuH7S;RRI*df1B!3Y4hfirX)}jnhE7iA4H~d!ZB>~TJUjXq~{%`lYTFkSJi|&o{Lpa zAYg*+xnM~yTZCn`Y5*E~0iUU^C>gw@T<`co#+_2)0D_`ye)Sja=BKS2 zI3zy(&fEbHZ`YgW#d6xs)y?HH80t+;C-_ry^Rc9tO*x@>%Q5G94`wxb%-ZJ34GQQ6 zOXu+n=j*ggrKZh@m1R5AK*!38n9hcKjtc{ZGwlkWwCp5ld+Wx~3c2&zj-xxxrfpc` zQF}N?PkWBBHw`ce4miJyJwxwwCoaox(Wqgs?98pm)dvdJTg ztfD#R>Ikb?JEFc^qok{5qrb&MU&S97m<5W7nh@(2o(iQ#F}-Ln9^X|~^&}p?DLT(A zXK38mb%rS3M($Y(C9-|VR0||$R$)FEUva&*@4C3%>xH_*)j>d>YmB)KifEFTxVCqx zA21HExfvfvuj7=`pAVX~MyvAw%y35fs&uh@W)R)H%{gwBn=4#Z-f^TDA3F{%mXj$n z$zNTdJ2N|3AS1mr^M#ZwPOdwiPgxg`O;Z3Pr+|x!fEeobDU{7y;ESMVa&98t zH_kNfWQxfTVJM=g@Dc@b{e19n5NE~PYG%B73|gE;3yA`W$4hjn0(>I^w0xhW+ao^V z#;9;Wt8qGDJkG(`V=lGlPfV_c1^Lg$m5*zSSpjdLivX|E&h)&s_LCT|A<)i@(0#ug zqb&>-bnv8RZK%^_@RGS8<-W5Niy1vPu~c{?kFAnmIep%#ExJ^W8p+H={>7{;1v-j3 zl)&P!uSAL;u)ICRSum%z*Di{8tWQcPD<`-@nA%2?;C0M@hgh++H^oVBJ#Mv0sE*l2 zP5lHVeC~|e!uVx&)%)pot@D1p2mgt#=t{g5yAY>~7x^2Q--GoVY1X#VT9+CldAmtT zL{NrR(~cWs?8i(;PYx`qTBkkZC&RZW8|g|)_56$Z^Y~ZgouY8&wPd-NE-Mby0O99x zVQ!~^Q=Le44aUyLi=etBZqL~Rr;Vopd+e@r?{yb9PL$8baq^%hJBNnfzjaoa(D-uP z?^F+o?CeRcP_&Cl?o^1cSJSs07^z*2_deGPm}=>xTppkMl>O*dEcPw?rC5}db2%_a z?%~PIyS10&ecEqjXUl3;p1I~NOYp7V)n#o+6zXBKP9g>`O@*>ScRd(pgR^omzK2p@ zg^H^zP)^`v>7{Vm?y0~6%^JibxI3JGx>F6t18i2NlMEO^ywm7dBrqRrHd8p2tK@UReBylk)nj-0Ou2p-~}gkXq> z;AP)_Oz1>dALsdN*bT|FqY#;dI9X^pxPc;08IUSswx&<#=SQ?TcvVChB@%KA(mD7> z1XaW-#bmi+VhPe(vh3oaQlH#R1*O1Q(G!xKL?N+KhD$bGf|De8aX3=cRdQurr53At z`BFbiQnB#rL4HLZ)}eWMt13eTb4d+8f_boF@TVd&l#*gZw=l79N~1;>Ow_ zs#_#O;9WlDKJ}sc(q$yoVe#nFLGEHlH9zNp!$_*6%kg&P z$9z=R-LwGd4xtN=qg(3Dr~B zM7*i&hUC?Wx(agsa?!#X;4?&Iq2bbSdOJe|Ko)^7b%@2#T_lu~Np`W}kMru8eBJ6eq(1pJ*0Fq7gd*TWB`mk;p@?NF zlsP#zEC%xFLtM6G>->;f7y%o&QQIhUXFPEv7~*(>`2;19PvE3ib}-+BWF@v4LgV7X zMN!CM<9H;1Xuxus{o1zd!t2JrAL@@3b_*sdy~pA>(PV$e!=t6Qs-I+V66#`_jk<7f7y0=K|%fJhNe zvRJfpNb{=fBu~%TjgsyUd@k#k94luiiQ%&tmsgnvS8yxOnaM+sq$ciFfI9-x zvzoOw*8Z%&1%Q372~i-1a(RqHEtwMzBy6|Ug&hicgh1Hj719-OlWhgWu$VA5ToVTr z;7fA@Q2A8|4oe2e;|YV6akPA0K(-P8Bm^HyVX89sFG8ET>XfmyI@_KH?F?T=>tdV)9LV?hs;P9#W z(XGPst-r=t1py$D4+ecKB=D_2!~*mEC5#)vKh0&Jf)R3wY4T0*XNj%cLGYtOZ7>OP z%`a+6zv_^XJoyM^lz!MMo_3%M@ILadzZ0P|7ol5n-}Hv z4UZvk0@P6m;Fihb5gQSXz|;Y^e?TSyc-0mnpd!gA7^v{bN|X2c39`*|Y;T2qTv`sW zE5#dh!GO=L0~1w~Feob1p}?Tk@3s-gv|Ru@OCbhBfp9mb_$p3WU=fxY%{8ly zI}<>>P#doXV)mpVZ_X^K; zvh7U|8-N9hTV8;_uq=`2U%zf65{XFS^a7zGvCIp710g|qZwr8T<$G(O1Ozv{UZ7TR zc|f=k_yz(nm;lvbpmM_0+e2Q+At_IdPZ(iq8gG+BfjgEGOloJwhtyL%LRBTF36(R?Q4KV z9&-_k!BmAMhx#J?beQT8U8d#GVc6HL25-JAvVd3i2-_e=tNWfIu38aKcWn1DM;vJR zu7NvL6|*$qDe<|R2mY|_@$k7zWJBu@As{t0J&|UV%OT~>2Z{j~Ap2Uv^CuxDKsKSD zBurKr(D{5U^Ty(K`P@Dr5=c|=qb*v|_pe^J9%5>dN88^GuMB7e{Jl=xdJ+NY_d2-= zAQe;s)Cr(Bo{JkP&1Qg#$|&voIxG)&6)zSm#1!jCpVlm223&#-u_~7?HvqVHy-Gd= z*W4C((`NKsiZ9B#=NcdhB}&a9ml`0c1PZdF8hGWzRE9O%rf4m5=&<3*%c*7Wbpfm@ zj45J+*a=zL1F8XHpqQ=S-?%F3P|k88iO;44unjQD$tFrc)BJ{nbq9}KPG$w#NJ0@J zP#XwvyojV2<+`B&NBx_zks{Jxh5fSZ@e-unw#i*m(?kSiKiuiFkvde$qXbe*#?$t} z6Y3i9vaBWhmkljvp!oi>1X$P7fRt4`UyDyioRQE|eM;!qYi zPbdR)BkYuKB-rxP+aoky0;Gs|iUDNSX|d)j2;XW8L(I#W2*fK z(Dx*AK}}bNY6?YMR~%OQB~t~`3wv0p$3Mn zLiN6)35QH27vEgoEL=oYEWiPbeu6NvRV55?T5>hpPXd7{fo(A2x;JG_2!Vc0P7~57 zf8M(e-t@x0NENk*O?A}%1vZcrfnA&*#XmkE3}#B#=pmIEG9W+)NdRmW5~%|B;OQ{` zDfXW-82&4mCP0GspX?R-LmC&8{LI(vWcbS;=s1A#(jC+InhJOx_$#bD;;#LF3t*+lz#)&CCplt$>@eAHR< z*Nkno;%Ro(+Y9bus1uikIj^HrZQQEE`UB;fvNzXgrq#XUaYWP;ZzC6JU4r_xVS$rf z(-Xt6xaAyIn33Tn7N?DIhb-Oc;rC^2f8WlSSw&*7$1BCaGoz4h?mygg$JWKoW*w37>|UPZ6vg|< z+6n}W;On1Kx@empqK2DiEnz(O$UK(5dbU>bAP`b@HCt>*bp2v`>RGIyklXQQVRzST z2xpmAA2Bf`!=|W^;9*wb8X`CDP|z7z(00;-3;duXE^aWNXrFqX=5)x!ri%@0h#vK8 zQ7d__dS#W~8`rOENGA1-p;9N2S=&{1H%p59$?{(wy8%;scXC7e~;Al;gP^{i*0>5KtCX5*1 z{VZ~;nq=IZ78NCBGxU0XWb$dHFOAxgIZTkxE8}2bE8Ho@X({dYI*#CDf)*T>Rv2 zCR69(ZYH8TYQAet&a4_rRB{_&zLsPT$qXi)Shue4^Feg0);ojik^?5Q<{7K!HIH;n z2Ua|f1^njQ<#;(8^+g%bg`p6U*X3HlUnjN*`Tn88iB2-7}m@IMw?y<7xDFLeM$YIi3VfbI! zt%IpH5Y5o?85Ibpt3zgpHAhJ_8_KCn)FbzN-a{EJ9iGv~E$Q!8t&s2}Xrb1|6UMJb z(>K6f*7wXO^BXObvep~e=%s7nNT(Zp@q0t7cJS!h;{!Q5aGvs*TvjaiJy|Q&(QO}; zZ7lFmJ`eNrnAp9=ABtbs&Da>NXsCjKk4{bKj1RtDyteqKSp=byT1p}ma*pew?rF@O z8{j0jo(S?P6HL$SvTug^4X(}2pnPhkQr(JSOD3qZpTtt0 zZ(Am{v2d~OIO!;#$Ia@@g@pNvVy(5?<#=evOh%_VfDV7)`MPd#$9ZDba)?#;t!53S zPKF?*-&Mrbkaacpg6rZp9Oi{*OCL7nRX9ESdymV`Nu~9Mb}h|?{v*^K1_PSxeh=kU zoyIRP%B$M;zVon(A9Mb9g$_`W?c<;7lOh{3ULSi^OZU-$EO04SnPnOIuaSVNt|PEt zqrXPpWR+KAr1!Xxcyd??7j1Z@nj?C@2>-y?!yP)B2!byl@vHmxYZdpDrLNwkwpC@8 zQ-!0`h4qj>d`WADF_0uSw~I`ACJRC#BqS7P)_FX zmFv`9AM^kZq{DHSAvuyD1XX=f1cq-7J#}LMDpi#f3|ndsp?KKYv`;!7*|iAXfd_h`hzc8Iv{sSWJR@bqvVCmxH4Us!$7#teQj z>UP~+eLqA|XY@3B681m}x5BEd;Z^%C(i(m9ZnSG%g0Jb=YIOVYw#dH1aHoUSpOqL@ z^6=06Pfh;JdkVHL3kGqvs~YArBa^n7!$*dC@O}0lo{%F6vx$D}AT!d62j1=Zy(0N~ zvc>YKj^%X?U%L)PeD-`?!ikf;|D@D%E_jktNhPY5>5~xQ_aqdI><=&N^aCSm-aJvY zzH_bdAV&tQaqv18t)LuHsd`oV8YtO++B62Tev1!nPTsfli`+fNcTd}`9RM_`2U9jE zJnZ>8pEFD=O)eRyn)`6cN}0+ukWw`0NK#+w0Y#7iBP#`}{L_FGv?*&u)Q$1|dx3(1 zCl2&$(t~c7Y#FZ0`j#wM;4>+{Fq|T<&+S?Ju_s*gk@EB8#kNFvUQ%0I8*Z|dyk~h# ztRk=;#beg~K2Ox!M|$jgRr$j#&vSdefrgsW~Axs6` zBiE5%*wE)Ne^Rkr;Cg4v2RbMpeO|R0jNFr?oiK_kID-4ui0c{|gA_EFfF^c}5R%e= znZ3=6s?u?C``M>5e_+uU|I9$>ZZx;MT>HrS7V_iNTBJLjpUBK zV7Y?iO_Y^dd0l~nJ3S$Dr}F-oCqnM}rgF6C$C-~V!6 z0x4n1@a^7uB8g zKl7Xl?M!KVW_-t#f;I&aL68bazr20ST0iYuVBt$~h0$sq8q@3!$1_+gZ6rfKl{6U5 zdy$4FOd`>dKShu8LBBgqL*bx5zHL^tr6+v7$KfsMHjKxuvwS3XAG#_|!t$8ZfhO{* zrzQn{dIOxfFYiWl=|U_SgvF@{xvq9?+RgG&EX4^=B1VO%?}^7kHNABC1LKT+tQKwU(T~=%gy^L z-OhU#92Ggr=pZeAFtA#I#Gsu|#Jk)bIj?tZ#7)$HSY3CoGI3Zj6qh02A7wla7hR8^GTrhl843OJv3lEX zlez!H$8ypIgp2bp3@Y(vaz8(wyc8Po^71|tc*=_=a;~np9h{t3W=ga+xMMc<#yTjb z@X@+oKE~F5xXs6p4ET#zwsl_T6wl|wYcz|Nsc?$-lhTiTlMkmmEVaM>{xmC9nfcAi zutKkUX|mJ(X|Mmd_Bu1OZH%t-rTIj56RgA2e(=`g@%BTmW`5|^>#hBL!G#ZLx?5Un zv@g~1d^TG^na5~#Gki&L!G&aHM|j2P*1J*~Cg)^r^Ee+k=w{}#5a z`hSG&H`8XRtrg+5w$HA&H}g`9gEea_r)A?tm%{5EPj4rUWL6og$|pi+M3{7ywG%<< zZ~AlWSS@forA^hEk8quUr*QoQdBRk$E2al}t#;#`tE|te%^T$>4VHeXfn#F!J-6*n zPTc68XLkxKFLwkIx>hb7n8U>}Hyzwst+ZFG`O{l(^If+U`?~6pXNy#d|J#9KorQ>1 zlu7K|wd=+|66us?q%ayG3X04MMX(5t%ofbjTFww}F{4a4o7}BaB`}iI*;8*-i#FT9 z9iS|`wG@TVx_f;3!ld4m{aCUkSgxofV>x%Yo5&gVqf}>1zec_2?Ch-6igemOcipUQ zI7iA1D|n(u``)atWiG?I_}W;!UcQ;9Y}De@`9Y}5x(-`|;O_mg)kxDunsKY3=d1{Z z6%v}iF5^ z_NB3G_3)3nU0RraZdppVeNLK5kgqXsoh{vKolZH7>R%N%x-6@24^;@o)cle;cUbKB zyjqk_6RT)m+#vMyW9#}Gr**kk$}f9M*APlIiH^7K&I55)~Fl*y7%d(eIg@C+LZB>s3}p( z*1{+Yve20Mmq(9w)I=jqBL15cL_*&S+eKhSi=;m@m|v0`-&WZi$nlQZYhTBF=Cz{3 zg_4x2V)dkGhIO*Shc@pwAC2Hr7MBsCrqgYRH;CDd)VOPATXEwU@L{D`V2+l+^;<^f ziAW)RF>eW)nj;=z(rYxLKFFSOP$0^?3}C`!6YQJ4Ac8S7AWj*RD_15?bF_O815LmB z3Nca+cQg^s4#W7z+vfk5x4r!3ZBx)L`2KiX^TZf2l3NR!EX2T5Mshi18zd%F8*`NP|%mRR(!K<=vfK33*lm)i27~WqozH+r^{+oNVF2g+t@uy#D@H z^DbPtY;Unh7+&d7c+-i=Ye2m-5cl)NetQ_7YsZS`shY`ByyE{$-eSceLH?4rd_lkD ztsj@uE-Fc$&37^jRL%T?%OClcKa(}=m_(oUbUaiEMJgHK9&a5#9(dNKp6gP6D489t za@IS->gY%QW|e24{o<&PLUGK};hpTS2cx%a<9$^VAee}$5N zh1Wj}!`$phm39aek(^bovJ4(mPdsXI?2_3YM&$j7auUkT5{ZU)BePsc>UK6&7XHpr zw_TY=PuLFz@vsn>gAaL2MQ=bn-NL28&+vs<#wJaOKi-7c*8$_aP70<`v-T1c`Zd8iFE7=W#e~i!<$`Llx>rhcAeeO^4BNf0W^-coOMGO-C zU2*Iq_CRm$oE#+fcoe^K*I)=P1J+@sbMa&dHj(=L|Lp40NhOPtNMtZc#tKQNizP($ zIYOzUg5zD%aGfCt;;PASo%-@|^Q90oMJnqONau06{8ulKe_#*AZ%}|x^~M+Y zCG1luqqt&@%18Hs0LRIc1Z}LTAaJG%>6&HqgeYds5s7j8R9C4D_yFnwsvsLnRG$_g zmQzT&9S8kD9xCE93kiv(oQdm~HM2lE;vkCy#TMiaMWjj=;pUuo@>c-)k9_*4wUFaf z!sEH)Rvxs8tX!XU{#?e(QQbxye-=@cy@aSj2l7sP+?y1lF>@c6|AmZ*HgS2b z2GlSCulk6Q!ki@3KNEEOY(oS-JT64cBXPsb=V&ns5CeSblgujZygh!lQ6$tl#Om8% z#ud>m+1MrJ?-NL(T;fG?YDlPxbz2Y+(2cBTJZ}Cubn7!HQ0pLSfad*FdKj~FB+(lJ!$V6|fxB@g z$2lS+@|lK7K8z6_C=hb^-@NHTdys!sWEj6)jv80T8{Ula3f0%oFh@3RqX#%@`2)aC|pR#{4AVh!L?Kvb-6lr;K${5OyqCBV+h(t`f+&K=4+%k^# z+pkE2?4le}l4UUZ4m;Uu335cl2T+6Gl&bu`=Wt8trZY8nuhivi58&U27 zp^#F_Qhgvs5u@)hpq7s-ko|5bkpjOT>*U(fQ=^y#qYrC<@2e)M>N`d};3$o%Jnix; z=Rs$a90D554|GQ%%dEe_Rm`rO{W6`XMG?OdNP~(}vf{$WT9^<8%K$=203%^QQ&_%l zK!}-V+8R_ZhCtoh8ng!mLJ9xhia{^RyXr`#NXCo1v{6$}9Wu&LC7%cA6;+fLAP`uP zIsPwgtMy;nR_m{}?flTTFTWBTc9rsinKmWL6=E20YWD8rFD`mXi@%44A4PUz>N{-d zsEL`5NW)$wJwhSO&-7CmF;Yv7cPX(0boj`~qnnLfqqObGk_@0z#xUzvZ}*^M4Sx+) zc8xY4SNdhKeaqS~^|yrhDN~)H+KkhGXa0PsaZssluR^ansJhahwq(H$D244BUt6K_ zZod+Onp6A{wqK$C6}CsgU!lk; zkx_z?wd4u?FH;JtqjX$z;DSdFNMQCG@1sHX%}j<`-85P$_2QM=6`CjD<@omvL3AJDXwO2Q$bx(JW=; zSCyd%cgZHHG(B4*D|Wh!N|QU8?Z5bKKG-svlknfOeMdH)rcCwVd}dUJ67H6LfJgwE zA&=k=*X^fP95p7#{zQRHRwI)pb`PJ62A=IGlF1HM&pEXd%-(e`!el|DOJp?D$0(eJ zXkso$io)HW!hzWL~KfX z(n&n^^=?d_lk%(zRy&!ed0KTSM{~UkF7>h(2VJ`)UvSUlZlXBH%UkU#lW1LHvKFPu zEzrg@h8IP{>nwM8-qg)31dP3vY0i%5ip_)h;9kfBn%9#Fq2D55q{;Rnq4$~wtivF) zLr?~29cbP5qC=2DWvQ_(BZMrK$|;dTsG5@VTsZS%_(u!DY3qQ6Vv6M z=g{+{+@8_DG4We~<*x4i;vKw8qm_>LhUVR&W*NOToi$w`9y(RKJ%{TPrfUM- zaxs@XWMPePp>FW5HKjEr__=%^su7JGArkf|+NttM>G}7;t2@WLqux=+L{D{IXPH91 z&F<=h7;a3L*S<=7>dnvo5&7#_t&&!YLQ;4c6bP-%B*AQ=BXS6GVhUrmK7yh>$c^7d z$XVu02)E|o$7h3(Vh1P;D8h$4uw#rxM}n!Lattc;E@dszwHyZcDad-=KJijiZ!n`4 zYdRht{G&&bR5HV`+p-F&*seVgA9W_dUE7?*eLZR<@2z0WNe>GUWsmxTl$m3p84$(w zr;|HpDMaH7$K!0)^X6I$vVX9F62-9-K_FPpN;qijwC17&)(k|CweF4Iw=hn9b5`Qk zXGGI(W`~wok!bfC zLa6_?`Gpm>j6KX@xALj?INl02@a%~$mU+C$m`VywLrTHlB%flzQ}z3Ki6%oI~9;jM|CiSYd7rg+DHDpNL2U9=nT$bw4Pm*v9tJ3B`}^@R8qng@fnPk}qaw zv_;S!3=GB&FxQdsWv5s3zMOx@#4?Bp+R&X>ZM41Sk_Uq`tb@6$yZ{R^m)L|sk=ore zNl7gN7-PcZfwuNSC-GH045ttowJcNSAqgx{Cl~iO+?=E*=(A+Gff{#9jjnwUgX)P< zl(AriYg0_|H;pN;nKq8Kf|D9SN7CQk4*%@=K#>Gdo4bn{u+z)th@0A~x3a>}Th+{2 zFpks3@(=bj8!peYz_M32UgiS?ocJ2iuF(~^PVb;DEVT&X-mMdfBHjcqG}Pgf;BasN zI!InsdLTLivR?FmsdD$N5};ye0(Z}qJeUQ!;Sf5=4FbIZ{0m3@#^kk;(IVp^@*QGl z^_N}}kCS$OX(X7@To8U$ZyiW@kl)ySzRXOSh9egd4)&m4;N$%dWLQ8c4h~S0>mDnj zC4vGQfH*{mi2eC^UVeXo2VYXcHf9dCEUf@JwnISP(OM;BiurmUh9u!~?g}{067V|w zldU7=riLxHvb0|m9~Os1QWr6gV1xKKc}QGzrF8OkpGKx+1n~Kz8Nnbxeq&b?XgIHn z2OkiD_$=bD$Ec0>n@nJC(pKz9a6z!0hP<0g?AUZ)NxL|9QE0$4kiXd34(iYQ;9C1e zAl{%;0lEPEMUpj@8b2`P`Y^Lh+BX9b5QhgS21ExB|Id&mr!Tw!@Nus`$sm9i0^-7l z_nS*-F2t**zOz6Ld9R$M8#o57L8_zoa z$*3wU04+P3j9(O03zUT(zV%*@suG> zvU2+b!hGprsX=~YXS)UScQ8t z+h_w4hvaB_3FsE!FK!5Pho;`}A_BsYe$-EMKoEexN&l?Vq6z|1FvUQK-x~z7vra6_70V(pUzWO>Z7WNMMpi?t?e4R^tPQ z`vNEtCR^cz2kW@m;Nz62E!V{Xp{6l0*9{s|^8~b^xVgA2DdGMsKANB&9!!Sg50bdh zpn*9gT%N8tQC*stB++Pg47GA)QzAsKFEwc9qk`flNMV<+Rpm1Kshj0oFixBrqY@a< z`Q|A@MT@O&Z1nvA3scNxjILT<&@0VEE6LssSrd4+Kb;v4?YG{l8p&%6nSjMZHL2RD z6L?W7qNqEBR3AMfoiE5j&&TWvZf)$Q7eV-)0YMB-_^Nix!oL_zd#^&$#X15K-7V;n z;ud^chf}X`n%$);MK##9-Y?Nx^W$D#~tY{5k zaFsi5eK0L(Xci_d-@pW66H_B4W=fm#hkJXLw08ODDrPqo(#uZPj_q*D=vtV=AVw6+ z0rnc$P40$E{%E7S4yHzR|4!-T2YY#1@ z$Zn84QO?!RJm$iE8$=m4;cpn4>sIR&F0&tL?!y81ofMRz|H_qqqEmUR33i?5QLUVv zHw$jU>)QK+LTEyA#@eqK8!s+49jqn*5C7}Yrdfay?vFc=w8}t%WrZ}la5%%r0SN@q zAiA92THO~&=+`aC$9uFpj(xAy`p%`G5T0fNxB5NlFvbpfbPlOj`#l|9OgxdcjB)@j z|0{958bDR`) z?2^cEU4odL9M(vo7-De*#IBry-w#sbxGDj3(&LC@Inz3XK=_6CQVxK$%71srzIDgU z#yP+~@IT<;OlXZxbx>Dox zr1*!7Pi1Yj)WFxKp)_u^33Ukc*Ff6GD5S;eK=$WP`Cp1({LzoM6Rfv9zE^g zHh(k$WD`-64R$Cj9m z=>zZw`d}hknifTx{DT8U^0{B1WVq0xR(Ercy(=lvCTzuExKcMO+ZSr6(2OJ~ZKy)E z%a>aQnka4O*9>nT7nYo5AjAOA{6Y%N&qS1hc-!md7i#=2pdxT0o=>|dKC2sZs@XL_ zBW)d5P+#dw=56973KVS!!at!dqARdXEC?jfrj`}!q$nr|mEVu@+NP~LM>p-SdR7nf zK4qGIOv4x{0{qy;>sxN4Ve=atx#m|U2@;>^!ts<*njxmXe_WzGA(e)h2kj)7c843t z&x0R?8>ZnPWGSVn<(JFEAdo;*VoaKe-RgQbOE~dRWe}?fI=wyhyc*z6dh%k=iS$QD z2AkMu)WDATG^_c^8XogZ%9?J+DKR?D1(6E4q?q!n3lwPs%8OeWBZ}*AY^#DOP1a~; zrK#i-CdgKUSCQe#EhFmWR}(f|2=X$Wgrc<`z9|79JHae-B?!D%(be7u8bj- zmslBsf5u~EKqu;@YsjmpJ>R=8XPyQ$aIZC`7kcz=9{bEf)4nWvW!S{{lNJGHai&%2 zakp^&(=x9`;@Y|JBPnU4a9XHUhy`e38diCjN^2I~);u`e-aePpHWt(>Gd^D#vkq3G z2A%o%FjrSniTTgMbgjPq)d>YMvKIq*ZgZcIvy+zu6!uBubXU&}QX(zmye>hW#kB2W z2@~ZmwQ*1KJe?)!P16Q*j=gyz(O^0mz}j}8M#4IiY+Q8o*uh!|M=REq1Bv_;Y$LlW zY$xdfp*o9iAALw1?oRAakG|ohTQ1c5@*BI|a^}C!KTs^AuoM^xYO!U&fN8v^MtYot zE$c)#G?}{HZo?VTc|H|PpSInH@AG)9zqef8xWH>46^*O431Ugn1-??PD>75VNGdo5 zM-7apfAr=ZpE979*rH?PFg>2ykQ(@CV$$0nG<|i<%Vl%AuVhXAY)36?!j8(G;Oj_j z2R+D$dE-h1H+kjniV8PbBQ=Rg{h14zYqZ-Hm0#3k{mO+h!@Occqr>?83iCOE+XYQD zIsbz8g0}UNwv{%uqm-0K$3M|>6ZqU#U~Sj@uxYm+uS~1dahgU#%yuZ|t!aPI%vryN zolJiiqdw&&o`-eDUPWcQ+75PO^2fOT?)Eg!;ux=yPi8fSIFzH$+96# zW)S6}cRk7v)goi;=1bxiO&r1*M`5`7%I$S%I(3jdsZoq=X!#&yA;uMyTkS7ADuBAa zpS_ivBBmXYH&yPwe3KhTz8nu*#8Lke$10IjWLTy_|A{yoa2^?B+kCbjbzpj9Rn016 zW^eh!=6gK%me$h50?QUV>ndZ4qnO~xNXFV${c|TR&%>q3Y0>O*LdWBbkTo5mDleZ7!FjeYaukn z71HwY?0eaA$ry^;Pl|DFwIm55b8|wST*DNPCb!Oj{j($}a-?0SqwQv?#Z}P5s=ADjTVai>|ek;==nWPgALa=twRG#{&J>9 z-i-D0mDL|}xNL(`1Ye44?UrYkRO6>eaotWsiQDFS>Q7y_O*NP==PKp}KWM<ybM*`&5B3a^XjQTRl742Y=P;-vDM?jbKtf6xHv*#d2au_(hH`; zPQNRkr)OiEm7%ZfM0Xljo2Mc%T^L$Nv4L~8X|2W4s>fB9qDLhe_Dn`MqaxJJQU2S6 z6DQ=`)fdm7PMp@&;5wh2Ae|1UE@oaYy}@}NW-h(+y1-R%7%h@wOkw$ypYLD@K<-P+ zp9BbcYWwa1;C>+qi|f^T)87j$!Tt%=x(YxFLdr>OF6pSI+qYjnf3|y7+d7i#VjkH4 zpZiQywOR%1G=Q9Lv`FwUM6zy!4vinObTxwoq+T*3Qck09b-YajhB)w`@Vok~$M0P# z?}=w=G}&Z(Y0&PqG2bDcZ``iM+1%dma_@Z$UrYIaf^|vtevlcFIgtE}c3xNvsD{UH z??xrG@!Ep*)N}fBfKRww`f$?$_|S zbm>y?>U_eD?%?Z;)0t}!3IG8hLAqoa0Qi{}7thojp`w>EAQu7GW+Dz1d1@LR@wVdt zlu+zJL(OZM>wRa7pg2u%L{Qd#7vRIzr4I{?6X3tZdr?|dec{l%1B~}F?E&4ucH3;~ zLL?=(2K){GZIhQOC9W5A$v!T-HC%_&H~eA{Qh6)Ly1FI7yv1#Acf1R^J*$Ue7?W*1d1;IB| zN175+EZhNzw(+MeVB8Heg)gg^&=YI-`Fru=S$uAsCNz9w5_#+`$SmzJZdd6kW(xR| zP7E8*p#W}(hc4Q>T!=jcYrglkV`_nouQ&-$wg7^_p>ex;{%k(DxuR{1)VzB?uxqWr zDHGT(U8i`h6#8U^l^OO~Y3q0(wma+C^Ljcm-G;Ml4pr&H<-cs6>`JXOx1`^9T&@hB zKYyItG~s%{zR&H^tmT9kCicF?Ta}Ip+LrW)`!QRd<&F20&M~jG%)xTjhFS`(v%%Gd zwJjK{dA#B{B|^51;aGZQ}BiU`RX47Eeyx-F@n@x{|QPL)@! z@c&P5V0MI)N34)>RQO>Txg+-A1sR+(jRl2zq{rKw-}@?G=nblCXk*`40P_%Z2D zKVXN-wYMeN2(PurycDShuPI!G^4r!4_Q7GejWJD9yc^EF@PZDcX1x!fC@0z?xaIo$ zx>bT1ue3(Z!xsm(@CGcHrCG?d)-%AZ0z34I=W1TJPRsTusb*nyH5mT7BFkxAqXskS zhCE2DQK6HO3o8XyT?K{xbl}mE`wQ2(aQs%7;8<7xK2cFSF){GIOkU2>1ku9u#Wa~` z8?xd$?LJ4MtSr5+{0S<5!$kO5S>S<-4&eH@il0j@AM^k`BjDfY#mG0{{xT^F=KZEl zapio6IJA!*E!D({kN20%S*RCz80W4B4zVGkBCs96zi_AwNO56=KP#F2+-?2Bul<5e z0u=-1jrVue|3s)jJbx|vkc;BO=f(R6vWz2XWAa$Z$_U=r-F|pg2mhZal}%n7Ffib6(xo2?6)&!VjI;(JJmTuW zHujUcCO=fqs!HQJ9`&T~R_mF|{7VxY8WmkYVx?{AobETXaewI_^n%4Y(3#KoY@rKB z@k|DPOwZl%FVoZXeJQ^42(D78g9W?gxbxc#bFJxb(-ZBrl=L{8;tGfBhehvm&yF89RYqwZFc6mCkk{ze3yS*YQZG~@sAD4FB9 zyMCgmVEX#yYR%5Ll=U-0quTFKR#`(okSC-sQki%!jNdnvcHO2-Y9-Cg7rCjozr;h@0od6vAP1phXL{Za3(1^)r5TLzxhdl0AuRMLr!ZOHwBJj2aEf9t-~WJ%4YWiNwwWL&-2T+ z+%Z6H{_!Sw+L>RV-p6oaH6jLm34v|ZG@qOzhCM*?572F5@<8XWFrIzgS^8AAXDp*NN zds5BQ+iU;Q_FI-L{mm6g*A#pd-y=Umv?;a*b_@Yymw%Lqe*HnFR3{3XBt1wzl9sYY-OqFc!;UY2WJ0=kY;oyGaEx9h;Kaj=gG=hVGe43Xb#1F>= z=KDJoqCu%rvPe^ezZgZuedrREP}5j1zCRQqfs~*;dxhDB{S0IXKosxd`9mSrTXQ+d zMN@3u_OS6vX9*@^I}q6cIYBf%P!z;p4sLq*pSuLK!Es1XXOIQSy#2j?BT373^EAIq zL0W?P;)P}xw=pON;sfCEhffsn%qd^l0=8_qXsIJkdBc5;tXH4s7)PY1^X@y);MMhh zW`?{BI?a(s4x7lAj%5yFHp6|F+D(7%Y})XSD;SGZLWZmF1hXIR<*}uI^01Xwd8Ucu z_Mz59lXD_aGRD_O811qr`D#jQZ09pw5)B}&XmU`Rl&?B+xOAKb7eK*a`)9y-arem9nV2gdeDZ&%Z7{YqT5^hiN)SW5e- zBd}bU?fARVxn}At`^?*ACyK(IsI3y%?c;{luJ?i?>oBP%r%lc9tLIh<5(E~5pD%VZ z<@u{8EWQd1FeW?`{ezhm2Nhp0_Vbh7{rqa1xK#4GQuF+UiALgF@_|=R7L+`uuy?Mf zFTHM?xa>Fo>(=eri1^#%hdEk%*$Z}Qgl0Lxn|e)QN_Z0Kw^o;KpZ!u^x=M%5FPBG?{y^8gx-J{@S{P+-D|imI7KA9K8hJjM5G;w+?VXq- zxbucr5kpB9#Bq7hR`<1gs_HbBi*`*#15>x~?XWq4lv$2G2cZkkcxMyH=?giE=K)U4 zYS3$o%-ChI-W}PQ(x;Kse_~u6mYG|% zY%}wEs>`BiKo-uA06A(U;=nEZP&Q)GD3t(Erg9dWoErFE_ejmnE(Icg+J=}%CCsz^ zqq!&Wea&r8@l)AN*ly#>5=B#0T$?$jQ>xxm`D1+RsN0Fi>dD#j-w)Ps^U6(b~ z>Fl4zb^3}-#YKC~?M@hqW}QtrC7bx^aUlM05>L`H@dCq6*lTa!f1K|5wl91-tFS|s zCuHhnLv6Wt?#F7xr@*J6Vzu0)gcT+sbBtCSCohRU znV#h`ac4TQ0A8kJvmKZ7IYHl9V~)OhR!I&3=lpei#igQ-O&xMP&A7qT2m_}MrA%x- zf|?*+rMwWY&J-=zbYY+*{SI4!Q@^(BM-_`XtQs#zs-VJ{;bw+Rm9mU3cWGT{J7SpN zZZABe6?7>N_~ce{8@hkvHF&`QimY32kfu2E3c!8Xg-29H)#w=zJbu9zzBhhzk9PJT!suxhDQo%(tF@r+>^Q z{r!}Go_sb(VL3W?P7J`LZ0QpKARhoc00;n11p!2915$7l(VQ5fN_d?`6a+C)Fdt#m z!J&nKa(z0rA6K@b>X4c;1gej}Ho-^nxpgl)K+!_jRvPPa8?;w9uM6%1_yvHsYx40f zTw)&@Vy>OApGqI1UY1`h2ND9x$0rM)90KZd?^#vAgRgm(;?7HVF#2@Oa=59eZ_4Ltxl^WjE;?*KYW27kPe z!%j(BU7|3z2585Fdwx}vdD1rnb{(!3t~b<%HMIauYa-yWby(?E08*5{+%Kl@W!eid z3xpg{%xeatP>7A`^Baq;uWB)VFM~57G6*O?zcf6u9S^tuI83N#cw3fY$)Jf{3_rIt z+#K*NANT(9-L-W}pDMu(Q;q);1i=Kh&;YQ27d$=)1fYNsJ7Y)kT4iQ5@SND2_Nn{@ z_zR$C7v9DGNuh9=65r6fNxoNI7lbne1dxvxK0d?&43<~QG0+!UX(~{C6viw9{C}rp z6+(;1Bg5}Y+Jof!9Gpq5QcQ;iZt5bhO`Olgz`jd5lE({5HB8ZofScy~x7Aj`Q-eTv z3w#uI9_9SEj()E`@>#4i!VnSi_*39FfbM*FQ~NK0e)FOD`oQ&w{9;hQ*Yi<)W&>H3 zg0f2vk8K(JSk5g=5p#%q3>E~qn~xqI1_U_WM#!%G$=MesOYvxsqYi+dcM9$X_?3@$ zKQ~h-)ng4GyeRx3dQ6WT{og|mck#W0gYQ0;@COh18!V!?Dg{BXK{q~u2n3>!AAWYM zDVR%D$V-q|A?_-^=ckd7XyT>X*c0^7p-%o9X{z)*6ru2LQES9B5VCGjqa^A%b-C%v zA#_s`?=l&DcnA<6Z@!Phu1J!pTB%TFei$wOgnrWTjH48dZwS+r#H(!(v*e%F{L!eV zW|zGvu?ljH;dov*Ve273HlG-#9)VvB;=eY3ea z6f>}x3ca)?600ZE&p7e%goj#kP;i@Bg3hy@1SUoC%8VI+;$4VUAk-hl%;T=a!n))Q z){MWZC>|ZXKFq)S9sGu4J)@?dE3_UC>lqgEi-msF9uy6qHat2Am^Z)n6h;F8%Pw9X zbo~sktX?w11NfV_=LX)xzFVsInIcwenqlroQ`5==sz(%9(tE?_gMbI}10dl0XgNM9 zNbrn4sucKvVSl%$s5@G3DJ9}=7v{5eEb@A(XowOwgpmkNj&1K;O;b})?eVl1kg6@i zc@Y&AmSY9K7#xaD9dv)}>kSMzZ9jTJLOH*Kbs2ipCVxDB;;r`}| z!7EwotZ4IoAS1g4C3r4>TTFRU;%5V^wSYewP3N+F{yok9{ zVFX#Vq9)W*cSRkcr)B=dz}Fk|lI^51$GDBPGd2&}Hpzz4Zy5n2E-Kpb5rnyV$G)5M z^PHXC`T>DDY)cFJSu@^6H-|mtnuXd?w?2TYJHA#i%qh2GYwm2>uT*U-h0mT3<4mHU z;+y5P96oE}9nJ3}tx8aM-*T+Z5+FPkov1!-m)@k>q}-5A($ej}!&ZEG8o6X5DqkO| zw0Ey&bmwNrD-5j|RF`i{g0n2p9N<*9H)o+QM_pcSvMXYACZoOG;*R`Yn()A1M@;p( z*KCtBG@lP-fsCGD$MjBa6?pSzlJDCnJQ49W9}GNj9{>a2H&^)YB{Vc^kR8ZT_ivDT z^QMhraEd0W3UT&TP-Q@+U6fTLDr`;iy8#!v#jt8RfDvCJNlRDB@wDR_F#3~fs&Cq< z>FgERevDojs2(8ixDJf>ilhYOZp9*ey21{8IZG?!g?_Yfjnx91tlKa&c=^zn>F14? z17e#{nFkTGkCq~p?aT!imb}Sm=Swq-Kfa-?wP#p)TrMkOYP_6My9gtv;^iTBG+E7> zV}80?Cy^l^Eq8uEu8aec*DS|z;!0^hjX2L#Z6Jqfa~R{Gz%dbHkXgyrd0M!!p!487 z(7NCE54T>kEgZQ!Idu;v);N65wPqDvaG-uqaDF5{Z1S_GvU+R3gh%5bKMqV5yf!lM zc!fEoS=IMX|G2hdP8;LRj&De*)F5>k+vckF%_IL=P^z78E8r|w-HCSt*3NG=g>}QD z;8F=5$7P6me_ZiE=a;^jv!MZPk?Yg~(V&Szd$QU|1&jf$Q*mQlF?($8)=G*4g=^p% zi)DZtgwZ&nMp?}|Fx|SnDX*?(RPQ0p;nW0d&@XX_vE&rNnwc-PUwkpJj=~`A;&A0^ z#z?Uoe&B#`@5dA&6Q=c=KnV7Px4$1_lbyDC6b;hZZbq+rx7r4Fy$5%Bw71(@dTizS zR6dLuR)dr3XsuY>O}rR)QdNzb%Ske+#6=!gY$noPIYZf;BFM+tb4Ck%N|adez}o4m z#&A}r{_fS(8J5BMBBT&;gwoeq9#KaUw0lY{$ zOt(TV-T`S9#b(Rkq+XG+j@m)Tcso~qa47NS087cjw3bj@yy6zguDPim2_}!B{?{f zmRLd8Yu@)U*{|PjQ3;|jN+%;Mr9@;B5;aVUFQ5%Z0YiUb&1f^Oqe5>qo8|m(DkZz>AJ7v=; zEh*jI9TL(A(%sz+(&Z+<4eEQ|^Bd9Et+ig+j)oGQA0l?Z4rrZ$(#%8$2bTrp>o`SVc2Ep4BxdFMyT&*hjG%bk%!F?8Nfer=!Uk+{@su;V^S?%sKQoWhYV8PwUMxD~G6K1d01Lv!oeVqbB zJ8Pw9yH7dUsO3Zm$+b&DdU;J^_=&=$4NGIx&Eo^O3lQ@5ZbL$0;_6KW9)>NOIPzp6{D@oV zAJ@5R83t-&pP8uUaV6?*p=oWV^Ux^p({vF>fY5n)sm>c=-nN0_BxE^tk&8@6tvPdc zw$s#Mu%JtnZK6_q%_dJk8QA=GU$155$=-!PU#oPF3w=iUmqdPAL+8iYxV?x|)pEHd z=Y<@zAYa#Mqw1p0vE$ zB2WVIQ4$UWpUX=FBi)d;MSu$YaVXmjvOrweTYO7oDB>c(g2jPutTcqO&KqfDuUU|6%@_)fv*PJ87v?1Cxg$qJmCmCgDG}I@}p@HL06~5o^x$m zez&GVo2rx^5MPHmMwGWY{EGDtikYVEp$kA))JX`S2{RL8nq78ie6dzomPvea0^8hG z(xyC1ff5Zthxc_Yx>ZDjg85g3hb0PR9>_o((3c+&$+b_#aH-!Ydy{Is7N6QjUQdJ6YYk_{PtG0DkaFUHS?a|?6Iy!?TKKK(C5kSX)!2SUJ&Nu zyC5Y38IQ52#_J)FQyK{|99bVNho}x#p z{O^iM$u!!_5cYsp2aYf!35Bkw=KJ$f!4VqLE_PL0uOzeJ4YCWy(4Zj%W~2zGi_nmP zu7tBet8put-KkE+-}Sj&{ZsL{Ph~*_vx*aI?+-oDIySiyp`Bn^v0l8a>G2O`6wtzE zc5O6FSV{-RV+>e~&#BXrg=P<_|!T z9}G^=qTL7keFOaB%KIK#Vo{}irc|BDAjJPC1gi$592-2%b${?M0e`=eKVokn3SSm$pIloA9Q} zd_7dz_bdq-??;BwP*)008fWv=QgT;tsv@*&5w0vy1DM$^=i0$4qhM9`tXnUgTm@fb zm+7?(@n6IGpTL%YA8*Lc zA@x3Ni#5y&93$@(3NIUVEwisag6Bww?|uBSXZY<)2z>~B@Mn6qdI((AM)+Teex9Wl zIMLf_?*^fwx09kpvsV22Cj9!|xxmrJDzc~Lh0tcY89Ri~_J-4j;=adtpAZ{GtNm@D zdi!eQd}|kBeEVx8eGTSFuJltd>Ame~;jjKjpib;~U}>aNe6BR0d3`+=Urlp^<25Ou zSJG5NXOMqxbIW0=(Ad1GflXYh$KeCBA7&}vf&=@{Ymda-d8avS@x>Uja8Fm-hkbp; zpi%P8K_QG_|3Pzh8JKDFNXwz)rsZ+3dZUmIQ zqH8&fh`cuGRu(Ptm&Z~}$42jF;yXnpP7P>J6)7R6$w~s)!yz-?$GE6q6)Xr*)lr)~ z5>;B4VcM1DdFbKLRZQ5|VwAxEiMMN#t&y?Q;A!y8aKoHR zSUaelg{ycT<`9B!JL<{7c8c#${RX7P#p?lfUFAMemN_9r)scZY~G-o1=^zKml5O*L!2pSL0!p$g8v3gn0-L2xF|qX@?q zyJI`K*v-4|7LwfE69tt~g+H4Ng8XIdB+on$q<$>^7*@hEpppS7zJ|jR(8IrGz3p!k zgj!;PP~v@!hx)oJ<2ATew8GEY-H)RIhR5M=ao>d2v5669W5IV1=Jd#TKV7ezr=Okf zmNl*&WHNzHmQ;RK0fg$oH7mA>9Fe8via(Ql7k(*x zSaj%Wo*dd7sWBfx>bU%EP&84zH)MyOaCIxL!Fu%e=e2^ZoDuo$y%emNh0WVSLv&I; zHpT6Wu|@jB6u`-z09-DBQG;fXeMsSqvBYjwO}X|k<@6E!RUhPq^Z$w(3fC*f+%BvRcD2@))CjgkynwRtVoE8w?MO#O&VpJeCFupA_)gBR zTi;22d$Rrd=>@Fr01h5+C;r1AYk;>T`XlXmJ&ilobw@usV%QZZAtMHbgc zxVg5oJx%Ew$WA=9wq3tvOb&LbNERxdfP*7EE?{8J1^gV(NZ-Kl(cqiSXNih1DaP>3 z#a)4)&in!@hIp_ho^+C6_~?&_Ni+{M)_7!>>a=iYYCM=UV*RPJ1rPgGvK&Hqzyzd% zMSp|`7ZQB^8VU+L-C@9lU5=eL#P6BD8dPiDkajrv<`e3Jzd6-|-YP>AJ=;tw3&boFEr6u};R za?i>bC2?xfg(H?Mihq5MY}5ymcV1MUY!>;X3Kc zidj`ZA5kisMamk{*&wzc>SBbIh%Io?AOZ!672wdgpLDC;7yZBBOi4jm1Q}fXUR5E% zG3@J*?ZeO0GK8d%bus*6xetFd!e_1OIpZ1)XltBQJ8F>?>fi6=m{AGX_nLJ6&xD=wJMOL91j|MNJL5b6##BK!r$~W&Wr@ zH29R*EhWOwER;RSTVHoP^0e9v0BJ6uJ1izAsoK3%Oc z6wVi^BDM;$E6^|*$AJa;66?cZK?M0`Q*gkjTp^xN7N%Ifwv-d<1L?PZWxa2(K$7!| z@;o+)PFg}8@(75#*?w&)yNR~j=@h^=9b1bzx+R*X69t1d858D~siSfBi-(W#a%9pX z$U0wj0x|5XpJ^7hIZVnYQ(1New_G08yQa7GQDDS*bakl0DJ*$(f0R3rMx9jeH7l)V zg|htgPQEz)78U3AlXn*39xP}Yv7O1e3godQY`bpnQ?bksK)d+zniL9NNEkFtsRt+R zx!$?D%o$@WqhpXzXS)Mp@3|;xq+-lR>vQH$AHKYIVHz==yxbU^XY^qKmgv$DyA{Q& zPQc_Y>i;hM_48SNvRG9$!dZxvlYZGwI>7m(=t6NXMt;>ix}b{*(zGBnBmMiw40)HP za53s{TT{AU3sA}dJugLr?8kC!YwV(xro<=|SyldM#h?jbO_6TEGHsVjN*W|vaeFC< z;(=+Lv~R7n%lO0*_}H|6)9#X5i#3aH0$>Y^0F}jJVf!EVfA~LgI}w2W0DL>^Ws2W7 z-x*xYc>S#u>Ua~jRHXOqO9c#bVM?(P-}JGjlVRUD4vAu)KxJZ(G)-GngOh$(32VF< zR0t=P*|~|So!UswN9S41UVWc!P0{tDem}@C+yGh9H>OjiB#C|F@z63Nd(!@=5*`Tn zrxI3EqJR9jQ?96|!%G+evwvc7Y2@QBIcg!E62{AnK+D_f^W4XlIpKzI{SdkkItoIq+QfLH!5WP8Oq%zJqufpRL3&Q6`SdPBm?!kSZ=om`RlrzYb8)k+#4n4koc}UMw8(Ll7jH=8|cmUyWag=yIo~Rd%TKUJ^hQsPIW@lhXdu?zLFB3l&0MCvX`u z44>w37BbAaIM%QCQz&IYQApd&A?U1=?U@jXK#M+9^%3?eI6E9mv{ZRA0U>h>FLSpu zyzK3e>~89PRL$3#Bh8}WwqFkD4B_Z@-)MS^nRA(%kLwcE64j=8mV;Pvyr80w^or0n z2I3Last)f#$LmhY^Y64pZy7-)u)x!*fs!AewucEfriTYz)Ht4|pDbCc<|2oAs!E{} zNK=s~_k$=H7>?aE^r_)z)$>7tIPE!6h$W zx8pteGf?Vc)lDS7QC};_+6JE*|E`F}2`hi*V(gVo4Cm(@(3!E5GQ}1DTdv!DuR2>T z%%x&;6}X|k7i0AhKs+3#MZ*{^U*@2g26eI$rK8MU1XQ4C{z*+@vk4_ytu0>Jj-yY2 z?|pYad^iGXS9i4`%D%!|qYU_Q&-#-M?xtIy#Lc92ZHfK<+V{rgYQ154ByQ0Ns)Dj{ z@8bJr=`1h7aOfTTaDk%$S{9qOOm)?*rMF|xMRvs&7)i+G?Xh0tv$=c)y4%tt?810N z@KWQCWL?rmNWzU}xC-Vh&Gu$Zdb{e_W;A5wz4wvhBCZ+uL~uvPcfMY(@s1-)Q^ngS zTrargTd#lhvEz53=~Z#>JlC>4!opaFXb6MLPQK}+&Q@*TIh>B5C8=eSV(uzqT?|$~ zL8^Ayr~bizFa5Bvr_4}6!dD7Yty_<3V7qIfTU$@hT0E|76ycf!7-$BF2f%Mik=B=f z=#5pUVF;{MzEzKwhb9W-Ab+D%5ov_Eswf5bb(NK2-KoYa2h$DbZR=%C2Q|K^SnmvM zS81t>cNZ(ei-+Knf?1o3XMPo)L=_hylcecYPg-o9`D?j)hd)fDsg2ZT#{)GclmZOXNjmySKokos$g<12lcbtgTM^($S%jS zGIFehCF;izwG%`b&oCyNdhN_~Th8}pY`97GPD%?wtk*CB;0A(8*RM^V(!{IPMvPRR z)C;dB1Y$0h)edc?sKN6l*o(~>h|wjWl|CsGp|jR+fjTr=AnAJ91K-XDTf~dm9z?tEaoeqHBeLqDdq+U2}>WsZKl%`%P@e>mK4TuN~rV~ zE!5{f=nz1xwcym0*2UeDZri%qaTim~n4f9yXYk)uV(LYJS08+~8>%Cl>*Tkn?19ec zEHajAt__(((mpnUYuac&H|}k~ZaXb^3EA}rklUc7HFPMq`rzbtotno`UwfD8crr6F zf(h?r*SvXWmOvMZP#L&A!`vOmu8P^_AVJo#sC(}`)_yFH>E?6!%Bs+~&B*RVJgVsY zMtt2mCV~89cvmGllyq0Qo3=3wP2OgtO$h&mJuCC2-XJ%JyC?4(*fKIV&|7fd{H-XB$x)36DTp;u>a za(WW;$XJ=s^{gA=J-W%`nR0e1-)3&=dv3qhiNw+gA5S{N0zGHV+?bN22tS!5cH}79 za9Qd*2*0Z$s!DsjG{CUJB&q+2rDgad!Keqrj){%TaB#mDqdP^j0Q7(kS4~Xwx~UA- zFc!Ff zgAq-nDKoj(%Loa4?c1*(7hD_@t=0_@h`IT2fwi zDkv=#v;mAeNp)m-*#U-8jn{6`(K_J0hLJ8&D7i9ZHwEO)?cJ3y8jkB?C zYBjGxf?&&)CQilj4DzxY%);g}k=i;Vc3y0Z_b*YY?6v00m8id4sJgR-@5?vhxY>xC zxXq0x9{?P-LJq@Nn79oJF+v)B{!2?5$MH-%(NssKvEuAGjbGa4HXrxu)J>7?+OXcd z&78^9VowccxWF~B$G!?qy!e@2$>FI#7PUj@>XA;y;vPybK5O{65u?X&Z1};9tOVqv z)%T6;E8HJkdjMhUw?EBay=T--fJ-=$&B)_#(oXAuUE~vL7T|`ozMaK0#=Xc_4qlXx zRXt$`nNaBdpiL=Ts*Fzr zhbFg0+*H9lfO~MCz+pvMvXDe}49U8#h${8C0W7|mUG=y{e7iy=o@WoIDX1d*Pz<26 z8o-eDAx}S44R7701lXFURYG2LPzuQ)9Ui9W%HyLi723VJF9e)Isut*fyh9+hBJRiI zfFXtK7i9i|2%2yP55551VU@qFJVmpO{+P`RR8lXBz=-MWd}a_{P=v8;oWMEV2;s7K zd2`2MWVEyS=~LVht3J`b^HNY$6rcWB>_kL+{Yb*WjzgbR4b8;_`V=hly~C&e5C)*h zv0hg2%$j+)B2|54-GvmUPDyx%>o-d9OcZcuJ7>WT>MWP@o$Y3oVM*rjEq*rbx)GUJ z5^YmfbU)j+PHIo~RH=;p!a5~I;r2O?m=j*kFLsTTb06_;5XYKYct8Oceyg#w%KI-{ zP(^Q2?3MM?GKm(qKbvpn?1O^8N;R}|v12gWpq8M{BVc^V`9yuTteb-;O zIB9SV`zB2DGg&V5Zy4a231AD(kDS_>^b}E6XPfd@t@QiC{=97(V*7)bfc7(If-E5R zK;-C2a7N)3^cL1llKCGn1P+3`>&HIKp1)_d>V&ujZ4>zKoeSh`n%$;6yIcwu$F)x% zlqH#e+1X!|;58P&n@&&`2+JjCbBSVxz$JK!au4~`A#gehWQSZX|K`9oEOsRfS1ec_ z@FfQ84a{FRKixn?!4X0jwBLg^<_-S$E)xWyeAz|onF@+NEl(aCcU+EERkKajOu)o+ zaOT5NcrQ)A!{=lYxOsBp zufsudQ!Zys0Z32=kL$ByA&L2qr&yJpr(DNK`#cryn3j@+z`3cEqeZJGS-`*Z3n6+J z0{4!4mDo8f8OBnU4kh~gloW(U(A3Aj|Ji$pu(NCigrszJ6Z~>r&*H(0h5%Zxr=?Mb z)3QwMp0E9^%@yhI`%o=OK9i<9{$--zNV(g0vW(Q>=7q{@U(X``MWXxyN6Ovyu1Yyx zy`2utgmV)r{}FYH{0rRMmv9XhG|3ean=^+UBZNNhXF7lW-p^ExrinL(KHs=+mby7p zWhcWJ%)0KEw@Tf!14wgJh2cS(0GS}X0z@2GzT*LtRgoK#)W-#iM`WhM|)F}zZ81-TOvpa5+{j-~g0o|60V}ZZfEYN;F z>%t1wGDHBhHzo7I>$PY42V&yI{q$I<3nT(BiZ~ya$yt9!vt9@-uCGCv?)|Yun}zXP zs2JD+FZ+1Vc77CSde6$j2k;BeRHc?6Il=yi0P79U1QB4MFQ50SL;r^W+vWRNstZnh zQ5X;L5r%8@MFj%w<;NP4fhF<$RLs5$5`2!Y#evO91v^frt$=?T*pGLrgW<4e|L%lN=oH7;C9&fXJuRNx#H3GX+Xv_p^e- z$~^5x$Ug-=rfqmEVyN9ka|8OO+~5^TNHYrKDEUm>|c8XCh|C&wacKo{C5r?MamQ2X&Yv3gch(!JgYGl-o(azncpXOyPGQO{Vj zzs}pQ9-~23|6Qi~W)3I(N-JS=(Uev&_q>T3_WKgyydaILv`+%7M>@u*|E}fnF5im} z$#?1UyPic^(yKFYHuSH7DtRYtWu6bVD0m?;Vf-#f2W(N|UpLxhzglpri+9*7-f4NU zwR3GYzT-~Y$gc7uc)uNSy;R|OdLn*hpRQ}RxwtX%1k)9=0F$HP^x!v zbs(02x`34*-d|}2yz*fF!QXc8g*-)MEntw&cs5U)l zW_2DKd*H_LMz9y@VyNfm_U+Bx>bp8!jo6ugV&+9`9&e*ln4U7i*YV8Q^DQZ&R zj(kMw3^}7mB|{%MsUYAffH2qLTgaC~AbL8%#Eabm{A~68I`zGML>{J!6 zM{S>DlXYJ{Lq~Vy30FJ#GJexcY=UimX0CQ+=EuN73PD=bq>Z7wj9YgYaLx3A@;Vd5-#%xix*q{1*n!CUCw0cQ}0R3{zZE`VSbTgw{3AfQi-t}#*^3Unpg zj~`^=^ihs+<4&K_tlAg}pA^E8+sPbLs=6Nw+jpI09AU97Pv|K^!u&3^9dK^yQ9@vj zoZ`Qe#bxe&&RWT)m+3}@53NZJ9vHhcSa5!o?f`73>z}n_=h7SNHvkBgZ0$Ifs8E@G zQ)1iRX-~U=SkEQpqvpq4E>}(a3n$1Q`_Ptjg*!?C(A1RO|iagXox~=eok&s z5-MF!_jGO8C!^i_;-OT}#k%gulIAT%Q#E^Z9g`V3^CjeoSZJed5pAH{stHiS^=*l| zmd&>?L`V4PcEe;madiMZQntp_pmb`0tBm!Mc z4>@wnQd=+CUB_hVG!o71mgp(E63dYuM=0m>Z4cgi@d$-r8McJPK~l!m6O&pM23b#f z9jIpphrBR3{}Hw#pOywoxuLK5bAF{&Xw0g6k%8w98)84LodJ?jVrVDjpcLU{uq#C~ zZvK*Ha(%~LflFc#W+zLGPdw#}R7&D7g=Yhco#~IJRBO*OQ?!Y%C^P<7`VXJ0y?qEh zeNp&b2;qv?{9hH9zb!~IbVmt@uv>-y1aB9QmPv-%CObjw3P#`yYu4lc#19MlW&#Pb z(H#GCZ{9%N^hqC}KElWYcJLnN{2s=4Y|sFD`mxjm^WUwN<#Sc8Sq~b19Un?_u=d7| zTx|z_Dagf~XH&^344Hf$yKf7}VV~xEEjAGs<`~jug%w=q#(LV$j!bZQx`|8g%@&ZJ zthn<$-ZlQB$M1wa1^2Y)=NBZrH#>nW)LMf?WELWQ4;p3seR*wxjCl$>eIKL+d>*${M_;5XBBTq2 zIe@2C)2l~yhZ&F_^Eq%+h+P_i>4^L%N@tP4p1j?v_fSySHoK`2wXPpZZ7Huh74fae z!ks~jGc4T*p;>qavY8~sgw)6$yGHBuNuiQ=CXA%}+pXAJSPj-B4DSJ+ACTS3hRxw} z_EY$A0&i!DMYq-$R+c!lBfbLP!6eGz_Tak==+OIYtKIf(eeCnUca5=6gTf^b)V0mM z2N^F7_nebLoXHb(HE`jBlPzZ+wzvJf&feo;YN|rmg{|98Uakhtm)M60=z$iA6=CZR zmda^C{4#Ji6|oqkficlP>0*+a-B7V+9ADq@vFoaMJtTS&xgb!`MEsJ`9}uQp@IhH0_m)0e;l z_!#Y2_Oe5_(-Chst{#J%bBg@~F?y(*s%v+L zfTo4W>{1fN*7;XRd3h`a=#Ff|hgaSZ&&=85XDU4ppbWC(pUc5F+co0B5d-{Fj=4c&g6e z@MbPoZYN|B7_~1#7DQ1dxPppG7J_K^ zWHiM`uFwzB9q@&n#f3Y{>+8y#=yHJ{)~80l7pr{WC}*kPnTLqX8QU!MpeBET)V#73 zOqjyqK$Motha!LB?6Fb(8ZatW$IB!vn(~b#+N__vYLwVo2;ehEI}d_$JU#pQ;i^ugFJ9~Dz_hc%xvSqzj#YZa3elxSsi_R z%23ktX60wxj;_jau4n5vUSQ)wYw0<2hHSz7RZ#JeIH1N~2qQtc!4!bBnh-~z?0DRZ zTRB#`kG`C&#V`UgfS4oH`eP#QS|9BRY}#Cty?&y=tdqqffJmqBz^CRU233dZB3&=1 zGf!5Wy!OKJsE2(rzG8d}`nLPCJ3YO}%d76JC;rx7^bxCOdO9uN@FVuibOs`So`zwn z8F9lWl4qV~?1}s@5=w3Q7`fnEWKU4DP1{4^4R}~4s!k*}=*03rBvfHj2!=(|d5c*H z{Vtl0f(w@^V0{SdJ?8tw*ve)sjmCp>Y2rK7tAtUO8c#uEE>mMvZIT+Inlw-2b?e|h zW^9u#$^XPEigyDn999Jb#_&hOU7X6@ z%%Wm1K4!M%?61t=Vej|K>cQ)lT|f5DS1q3CM4HYTnBmz-(=ycn3^wMCJ-PZe?Cr6K zgZhcm3%j>ctqct|fc`Bt)w(SXj|{3S+Ai@yxpnV-g}f!)woKYLigHH4ZWMh~bOV{1k6snh0M|Sui=S)zmIc(0f_wRWsrZzj;$P zvT?%@?CS38YKeDH5>og)%A*RM=(w~zDDRHRgy+G9lRpq-BmN#LUBee-_H~A_ zpS=ePVP!_JF#nSX#)T|k_fAZh!bv#r;6D)XxZbcWnhvw(#5eO7;(qLXH#3c6F>d7+ zA~8tkPKRpoJjMr_)~j}fj;}UK_`@A0t(ENpLUpd$YsPW{6Xl`_9laP^|l z#oNUxc8E8MW)K|EUdE-hRcLUEULtO(&NjBQ)k*w4L2FEKh;IT3#JiV~L*B@BExEHy zzZ`SsC3_myrOFmH$pGZLB||~AN*9HBZAkY#Zpj+1qzS0{vaQa+gd$n?UvK>$3fW6b zNe9%*lv-MP_u#Fu!EpIYMj>RvRG_iHizTJ9O-pzrXVBM&TI1_2NVrG5QO3FlDVp{& z;+-7RhG&gyMZg-N$X*L&nV0-kbj& zo@EztT*NM65#mKGk8eCdYCVnTQ!MP$qOpFQ^1ZYU9b=?zp<3x^|3K?8|MGq&y(4d* zsbuzAV|Flk_^tor<@Hgo^|z#PZ}t%}i_=fe@vt=VZaxwo0@`|?yc=~{je@w$${9f= z0qbU|%gOS{&2OT;>$1|~Ur75uHNoocEOFq>b4_rA8~)V=&4uFsR}>tC$sYdPUZfOQ zlV7A07y-PND*%Mi3UB;{+M`nRE;r)uJpWMbRE;f{c>w_HKw*#S(lQ!lv;v(b`k>xo zMF*T)#&so8-W{sgOK=12H(K#OgiA@MstecVu26GNQ}CcQC!Eh8>gvhO_csMgvCuI_ zKV})3grAUezmV;L9tXN+&r#l9=8N9xc@s_?ooBXPO*u`;lRDsF4R|m*SgP|&q2<;w zyJKkn>ql2$C8Da&F-r41I}*axY5ulV%kq}=3hG=<1Zxan{m6SlE3CAeE)^Mbx~hR7 zCs?EAEDS|Ou=044q{H*f{i$m?RA%PVuPu#*CgOwNoX|aG1*X=jU)v1sceOhWId37o zN`j11Q_M@Y3=J{ElA4T4LY?5^xUgHwQl)wjF{`#92s<_;Q zmrppha}AxHKzshQc2}Z3A)^^A_+5@e&paL0sVaE}*~~dxJ1Id1aChIwAwfI5NnO`b zzC=~F8QT*$=FmF0%O0u1cqLUyhPo{zkCl(M$?WKSC*jqaQ(Hik;~PRk_eUQPv(V7P z%W%m;&cilYBgV>_*?~_BhJELB|txJhTVZ$RcPYFTNPWrl1G4SlS?R_%Fl`K#&m+a zsRj6%6Y+D#-;VB@u0;n^U34(~X>rj<#f9r~Vm^|!?8nE`fQ+X`^2Y6f58%=_LHSB< zR%gs(oP&S`=hL**>u&CUw%3*il`JJ|j)bEgCLIYsXUJ*>Q!CbLx9aNJ+M( zHD3S?(EA|4!)~cl1t(HU?wDwFPlwkDH|)5jdr0GJE0rm`n=y$t)_T$+6F);N3x^(J z1h?#iQwnVHs&a9%`B=>>(X#9Y1Jpl5elK`-I8NTVy8)5t5? zC7e@gUw3Zx?izeEd(qmMq&A2_ar)gkN(YIW%7(BUGT$en2dJ`W>@vOXyvlp!vM$T{ zx%XkbR#TIszMDo{$MC-$D~z~Q)P6y_UdXP|Y#g6ox)B2LYE;MO`P3X>UN=XTz}$&;ZBspY z%XFk822zdsH^K?nf6WKD*X|#2#|-E$YMrx8p#fpad8!C~Cp;`Xe^v5;f~?75$R=?G z&j!z-?XTWSl>uK+ri9_K4X$-4(4P~n&o-2>));|}P;Dyug5QD82A|o4^)GLUoMtSu zuNMFDpyIy>PD#CDlW@)QcSsk^;B*yk+rEe0V=XFdmhJa*VlAI&pp)z)ejfc3hZZE1x(oo`+ed zBpu0P4zKB#kVOWXEES~jxz!#g31<}uHCqvcHxzKu^O8h1{*Y&&%yV1Uummz2%D1PG zmTXl73GA{5@PANDg9E_BrGW$}i0f6>1LyHis@N0Pr^aF8M;}v=Ocpz{1j}bC%_)@&eDI}sP8GC4s^YSKDIv{7$t&A0fwM2$Wu~?7Qq0b-#7eP2^H7MlZNl$q!vRm7H?} zg^mmDW1{Bf!EdxY^cz3jS+n*Mw1=9{2M`8U_s6qcG9paV4>=1gZOgfX0=|q)Nx@s>693686HDyP?Jt>eRvkAezLA>@>sQGn*fThJ zmuaBSUOa8sS74dnohCF(ObZkC-LMLa)|p@AFa`6A;JGp`v@sWkiT__mZKRT_h_P3& z9JmQlED6Hj46&48f9IK@AkyVY6mqYHn3ZUbjA*$#^az=k|4(IoeF%%V)1u}*} zX?tM_4O;G3|8f1;pItw>m+1M7)_;D>1}aJhM;wLMAe^&^XcP;kN8~vX|Lj_t%^^=A z`k}pX|BTv3%<=KMs(;oHS|*8I$EE1PDF|`u`$}!1EFnPC>Fi3+UZ1e~p3@?FDGqo!{Fad!F6Bod0(BG_x<; z5=XM9o`~Vwaqp?xj;?TmW3H#OKn?bE$Kh$){Q(4f(pjv}<=(GW_&YShyT9e$H|MVo z>{9-}6`+7W3Q*Xy0yM<98$vIp*`I9cd1dfz5x8>4Dlw6&FX1Bj?`lstI`g*z#5zmd zZ}zR8!$mC>Vcx|e!)B+}V9BBICBK-?(8|0enQh(2f&M|fIzlt5_44OiR| z;SY_NQ0TUKvve8Th~Ku?O%pZ6c|=!v*!AjbuD^y_5v5EsKnF4E12x{{STKAd^#+rC zavloYX3Sg(DTXFlb|fEa_92N_pG4%Qep5tawAk^kzS)XxVHH0T0z<~OVDA9dsw@Bv zv2rCsn=1(aWa7ilO}9N;ZVCPJ9QoBJ@)8(jRMbylos6foP8IoQ{Nv5I(=Rd*HAn_Z z1j#_zaA?qnM70KZr=&40rJan^$Cu$LkWsd~sa%R4UkwCCdb*~iF`&50R9SfUOjPdC zY=||yB0wrorer8Z=?U#g@<^~`WqU;FM46*X$Xka!W~6WJI2{D}=I4>T$u^hqc^^z~ z{P#3jfA?%Lox191ku46UPH<5=_}#NbE?uqqPtTV5`M9!gJLBs)mpULf&Sn=i*(qR0 z&ch-uMiZW4djR&y8?9z`--*4A?ig_$pjywd?2wWvK#wTdi(}N?#qg`?r|Y-+9`4e8 zO&f$etL^`jNlqP|7!ZofNWZ_`Km4>3QYWu!z&u3^fKkwH@06Ojg zo;<}vFiC7iRy2b##DxDP(F5Opgv+z0GLRQFDJ1pXF8*Ltno0LhxvZ@WkI>Gn{yPq8 z&!7x{%w>y=pYh>rXYt(~^1iZ1MdNjXTR-%}YEa!tvdNEpsRcDq z-K(v$@N_e}-%e=hGj{jTK5U`K7uyGz`|JHlT(z_Ih`#6maRbuuTm={q9-f7pOTwZhQfr*Nh_8mYUfx zW56zulUNb)I;NK4PZtl+G^L)az&42I8tCT^9bj7xdK;QU|9uw<2?kpta4)M+UpS>$ z#*fMGp;_ez(Dok4{6(cfeJA{sMTZoMzAPLu3oVC)77;9yfqGpG#DIETRPSM3Og;oe zepNN>*Pt~6d+r_ajEnH$OBXiBnLHec?r~X>d_udxQh@pUa==&-c zbCWTBkeRs0V3qH~Dt^rRoAE%ozqlmNDhW_*%8lSX_mk^AVDR|-SOfYgoREKi2Do&D z!Dqj+y38E{Ls=y5QcR&eCMz<(v`%%Fza1p@JbP23@hk~!o(M0K>l8sJb<4EC{r%+W z1`7blOCc0>ntc-ViF~2IF8qbfeSeSS+uWW%Yu?JZy*xzt${TBW0kkv}-!6l66Aa?t-~=7qUI%={Kw&={mh$7@C?L~s## zJH(O$>=lQUyI`Lb-LNw6H^j0<5v0uF*0wl^%GRzD5 z<{Ai44(0t`dZ7_wx>Na&q;oth$R1xNeMHbSLawn72jw0?-vo-4m~UD6Klc@RhS7KV zt;=WV8)rexE!n5EAAMf`z#`VcWz$xKh_iONUbJ2IUccYagmb%K*QhEiwT)}|#41M` zl2^!Sxm{oKF!dVw4*pXxoIDo{@*mlY>x_^aCClTmIg+Gsnf-@|So#o|c~&DE?@%58 z$*VNsmU@d-DA7ogHbOr);CcC&IXwk$?d1STTM@(LW1b}AqkC;u`5|TE2XEd(p$ff! zjrtxCR4mTCvI%S{Y>;Z*QSlb=)%%a00ib^3Kuo9UT<2 z-}@p^qG|E!4Qb1Md8-72-sr1@$f}9AF1$B#mgTJ)z@=5aN?R-Sa@Hn<;C>>VX4LbT zD{=v(&V7Z`Zf+lm+2?uqNr`GR_RVO+E!OiNT^bjvdJj#}n1Wx@*`ncYsvy`sDU zx4|AH*u{M1>Fcj`{W&vo_Auf`lg4Iy*qAO$Fb{Vz;LxSYaSnp@UUE(=A9EpBJ2*~} zJUJ#_bG19ERXX#gpu1S7$PP-KtwUg0N*NiUAXw*HknR+QOaA7LibKjzLMSf$E z^rt>g>wI@w@m+zJu0){bM2=NMy-kI3hgf&D`@)vpW4Ok`^>0K*vMLdulPAvs6ifS< zFUTK`vAPToRbDd(Jy&;7s`WvC!JmZ*(mZZ&GOu>SR0Z8rRzc#+NKl|i)9{@aC`-ch1HEo2!wLn2A z3$}~!mlFbYaxw*|zugkrRio)Aq5W6p$IM86WqW#PLa;r1uoP5Mz4=QD`T32MtrrSC z>NBd-0CV|Z{Qt=o(P1MNa9f)cN9y$WO_vfGKY=PfRRde|zoDd}MhE?ABFDaLy{mKB zWWn;SD6>6C$mecM&rO*|=-=*n2Zj$?r%f%RUa!{iW(llx3R2h-bs<7?V!^@qebOfa zP28!xSz>1_-dD?b0(OtDD{Xb#nsH185J3&_Ku2PiuA71Ex|~>5Z?!#MR}f3|WjIDS z+WqY{)y@^{!~W4?)V%!})@aW>B@+Kw#kqdI{yvJuN$}Z%%~wvJG^Vb!uL%U$G+dM6 zl`Cs5JgXirW*y>Wdw~!JQbAy*m
+6Q=1NAB;6E((uC+QE6r&&r&R4K?R#K2Uq( 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͉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

q)(jiwI#xIkDQ~mzPV|#wqa99v4E!w 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�B~uv~p*W?S#Qs zw!p?&f)TaA@n7FQo}q1*SgBA=)vaa02<{(yn1;&G;n<=PBw{GJP##&y5m1{w@~45t z^f(3cZYG2>GnIPg*gi$9pgupo{bom1z$GO@MTQ9h=UoG*)siet$H)h><47|Fgq-(U z=Y2Po5X~b|LMaYW_N<~-rRiP>?|X1zxJT)YS{@Y5W!yq-4$&5&C&415HBuR`72h$u z1`8E1B(lfrHm^np^+V|n(HCJ%OcvYE(_p}MscGoK5yNgoiPR;+MTra%6WKZ!Gg|ah zDbDl!jcjz?7~vCmcOF_NmAdo zihBZr&CWV}-(Az*Y8{k?_feCv5~roek5SDd`7r*s$-?@M#?Rf)912cDm;^cb1LpUN zEk5bV8!}3tc1XA8Em=NQ@c5MNM6HZM(eN7H?>C$g7qBSW7MynlvN{bmrFf-K)XFm- zc@7~ldSzttm?V~6ow??Ndt{@px#nYsC!lA)>YcgzLkmoH`zdp-G^H_hBE+6=oxHKM zqxN^FATJeYvTQFe$S$1V+ztZ7GfCuQ3I{)xX>_v6Be*;^P1z|m=QhqweDllZ3si0R z&TZuVb!R6)+icu&9vIA*o?)99xUGtv2sypn2F-2>HI9w(gZ(o_D%lF9meZnM(86Xc zdu$_TpyuH<4$|7w`O#cjmR^U>6RM+bV8)uKrOdjrmR1VqR8)OvStJ)rOpd_Wm%L=F z;9;f1(`8zQMYf!<`njOiLB^y!u>s~qP}JX_`n59G27+j00@a2rKNMYv-8~b3(AJ$u zs7xP#gZQ8$74=lJJI*h^*r3MFK=drmv_2-(K@NlO7%ogk83On^@EksI^Dtvn9ainUFfDV0q(I*`3IlrHIoa2 zcTJKbtqZ;$&}yCIrUTkmqxBH@$_B}F%`IQmRNR}r_RHY-mO;FUafX)m>DdCe<6 zpRwCvR^|j2Dz8XbR@Q5H4!`VvO}dLB<-*1ENta`Qx^aH!Sl#EpBWN0*s$A){%`q0; zxv>&e@g}fHk)Ny;ldRoVnp&oo_xsAOD$PJmeVM+_2uf97dDJc3qCD(O%{1)Q<_T?!>8UaM&_<>r9y@z{Dd)4pu9-1uP%p@jB(TU;7N8&AYo z9J?A%7<#&cIkKkfd=ho8i&cJD^8%4K{BdjEpp9t$!u;K)$N_6!;LmoIK$9=kst(uc ze`*<#VbCy2#jUSu?N%arIhusR@59>PK*&f~b-Ics^~j8}Tn$B0=j5j~-~akYyB~!I zXR^BwV|`qa^j?b_TY(NsfyC}gn-THT3*}lHrr)y3_OrB)7stK4N8%}^OZ@h;?F>N% z+R)HtU2ruNP-e@WTpi3Z3yt57l+L;*_tE9u>&ra}P+EnVu5CY*+gqrPoy3vCh{}Xp zlYDb?cR`GD7J2rAW@#yUT*v$CD3d;+VZaR7yc-}(d>;g(|1KG1JDjW)Svi!?kDxJY zFRG9bfR+y>e)`UUsSX6|)$kpJIo#X@+urN^ zN8@PGZ)rIA|{r#(;B_6f;?A`Jf%3NJBMo&3S<+gjW1r*3PMdDUY^}!qun&{Ke5E9W=p7yr#2E6_CF42c&1%B56Oi&I>D4wvWp`vub=M5m=0Zl`|X*t2>VbEQ-W0Io$Z)ef+ zn-g46+?}MGmnY&(p4X=w&JG`a!FaZOU8x-rq3PKEJQEO3g)lIgk=%@LcNaK6?2Zf> zb>Co75GMRaY-LHN-;PbUa`5rhDq5TJ>YG2yH_##R^k4ntUB4ja7<7qbLM0Jg#KU;eS^AC9O=1-wI9o ze(V{md;9w6`hL}o_r=qoF>PA_9ca64zbrUYYL}|4=^lI1>yYRL7=j_2si|d5U7gu) zmIKFeDQcseVFfDhj$JwLN9Hx;2HXl-+zOue6_XQPk)&|C>+J(ii8uNf#xc;sXf(d# zv}UIj8SmFrLmGoEeq{e_-SprUH35!}+AFYvv!v@%*jALjgwlUBXR-RN68~pp>{R*w&RM&kt`EnEFnt|4zPW& z8DRj(MKY5L>V-AaiXVI3LKmM%@I75Gsbn9`7BN;uqQA`yTKvA+{LLD)0^C8#RN;HS z@x1O<#J92eH}O36l?Y1D2RS~5ZO?mj+3CHmkDgdp zzm9j%FhbnP9exYgb^`8%`i_oQ7(_5J0m(CZ1L@xM8THZ0vwB`x-OHC}Nsr{N*9XjH z6W|wAaX<;JC2*!W3oy24c%#(nlDWql2MU3OL)3|-ev2Y8t zp1GUCy_7fEf|8rh{kGk8leE*?5hpi1pu@!AErQZ);_m;^K^(TV0!C08E=K@+tS6Xy zxN5`@j<%bto~zJi-*l8Lk>oQ9e%r55xwt>7txXFD{ntY5&}s$9Lh0=PM(f$0iON&B_?b;7asLSQ)P^-bG|cL&)gcirsHB1<{+Wf zNc}L%WR^ri?kB5Ok)*AY5_<1pC9*6YQS(KdXM8ykcxZ}@Ouku6xh>5o7~v_`%9$xx zaL6_?iJ%zzrtRcFK zN8q2d8V9J434~=5r#$0W$pXBnspL(496iSC_z@;});o4zPKS7DO}^50(!cA-QvHmy zSA6-Q;mBQ*UNUY`Nko#{xS`3}Dz8^aQN4xTsA!Q#`YNUd;?Uy%ft|(*5lt@Grj@81zaqqP7IkBZ(#9&9fc_qP@H! zc=ny?MNKhwB~X<2e7z&9lnHO2vxsg;NtIA$1_K5 zX#^w;o!9GH_8llDsq0|NU+KfImUB`%=Oy&5vwM_Y{8M{roj*nnv68SV0WBN#mhsHY zm8$+?If~}2okV-As^iR1k@KaBhf6;uMWB?RF^X8D-if~;^n{$VPcZ?>yh=qLg?R=` z<4=b8o6xCq2+uNZZ$ew? zHk@dNzBinZ3iRW>HZ%)9NA~kTc9MiuSN=y$Bf1N3DLyjM#ZT}y{!b(cK5gHkdQ8zmp2fyH78pMQ$Qhk8C}Y-;h) zR)X$8A$OKGGViIQf)H?xK}Phfnb%0fC*gCKcbgf7v@3&4#n*U!y~1;tZ1vO9iWFnN zY;zv>_~1*&x0)+UE2q)ARKB)lC+{}LT{Iiuo<=y{x$9{e|JL)>8@WdW>I{+A?lYNy zEjl->s)hdE`_lBz8I^>6`rdKd@um;ENN*2XXV|rhN_~C!tNyU8q>WL2c5=$~N6GLj zekRbsKXaM845ngPgjy0neOj!<4XGlOpg^V!qhiRmy?SqV_U_e0(#v<5Gj&Gn2~F4& ze74C{CQTuA!vRZv%w0-(TO7kpnAaP<`hA`>w4ugE2SF+_N0|~sYLzA5z58tysFb5z zmg#w6eQm7xaxlb3>10FuEco2n+;pe}*{6qTH!OHJe^pcG982q8Jn89z+z#e|b! zSuhuQco6xrG<4GMWnr2pY zZC;FS$l!$KY`e_8l@lX*OHT-=imkX8;tH02r%~|nvO2$>Hc`O|e62t>*vIEDFYRK> z|G_v1E7mjTQp+1ma2S%xCE360t54T#D{64&aZq|-&=i|>5V?OiQsqRq_xpM9^9k&3 z6%2g~UHFzGD3kx=3ZJi=TvBG*OMBaM`=ywMdng81y~7>#jiS~8qg45B4%QN>J*uc= zs%Bxzckocdicbj*Xsej^zf6wmRhjE(zZjTrtv3CruVXeIQ=(5%6Yp+(4q+i?HVzNHeH$uyjWt)xwgqYdt)&uVLkB2nGVs+Q!0f{Ct`bouwosB=wN z!T{!#nbI-D(bIcyB&tx8X{B_{3HV($HGXWM1eGEoJ*Wf&M@dEb_RMyc&-Y#*(7~i< zNoxcB577vIJb&c(N}=S13f`{a%zuA$8)tvcl!0!0LYK%?rjgUJcml^@Wj`bVpJ zSus2ONY_>K>)ct{?=>o>V@QdURsiHRHs&=whJG-Xhn$dMR;g?(M0;2JmVMQ!8jiwB?c5Nt#FXL`!_GV!To-r>QsAL2)UD*<+Tb5S-8cQg4|C( z=`3YqigfK}@&3a1eB|~84lSe^Q6%w0d zLv2{5mDHI|w8n58m!;(*Q;9|9<;%cSTt1&<#%O$BTk~FWXURS-oIUzy1<_W-j$tnq zPAP`bjWE+a$9wGjdfD_am2c^#In?a%)g9JK9mNKFL1f2>Sg7PamhM|09>^0Hjjug) zTytJw6x`N-V3bb%;Oeu7HuK=>(oH7{&i*D+LMr<98tw8G^D>Tm9wc@*EGO|9Add3b z>--7}&vLg8Bm4skn~nAaw=Pr2s^`b6NjK^}wqPz#n<@0TPFzi!HA(b(cXuCuspU-9 zb(ZF^M_Yq68#|C)=?9`HBDj64qib#^4F|2(mq|W27gMTg)-5n>#Yn6%dVr3kDQTm2;zuQ}( zf0wZ?;E{yeb`!+*!XTt z(KJ(*{{)6xTxM>hHG;xPrzNyB4TrkYfJO0qX6n$4&Kh<~E^Hfp`q>BYj>w8+kQHhW zgxMFK2y76f=Ai_&?vl0StWu|?GS`)2{RL#XXnwx$vBFN*xt8?gb7 zk^o5@r~X^-OkqZz63lZ%OE$UGpj~J;qXhIHy2d=~;cJOriSf$gnIK@Pox)5N01_V8rr>T4+e&1592z_+NAC$82ka)X+%Cv0-{>{m&z# zwAsowzsod1ax9BtK$xXK{(wS2UP!?@92aLeH03TCL26)G+tTnH>oW6{5XgAKF zf9Kyt^hV$yRzVffzhpxe#Q>)EApLy)A#f0z@b+waBWD!nD}nqnge7SJ?SRtEzw{00 zfAr0`J~#GXe!0#O^u50AtTo;r%qCwQh}mS&SR$`akpVFq)_!kc9VIlT9m<-ouk!o1 zv4bQ1mfSCbMDgT6A?^z2f9_NvpV|4xT)?V)kD@zs+ukI^Dv!XB8XPtfO+9u=F0KU= zmBM?7@NUB@Y+A_h_i`??h~NPSMPjfLI5P46f1R3$F5g$2+I^+qe)x#XDt&-4=7jwH zFJ1$dPVz5a6Yfm%7qH3dJqFyjNOjG~Ip9XWijEynb6)A13;Yj;L?{yAs6fbO3iQjr zbPcbtGxEQ1jV~NlyC(~qV*Z`m*OqLtU*g&H(0{0MsJq3|sO(M77As16vD_Y$%9)7| zQbAR%Lz-gEVXu%E>i>Ye8iA0P5R9luWI(J41IoW_&BqU>Y|cnIaz!x*Q$=Wgf4!(t zc}^{w&^Z!CG04oSAb+i>zLN%6GHTS>0&i>$R}L}JzihGo8(Rzskpo{81ABq#(JCbP zkF^x)Cz3Ln50KdT2vF~zg87dmH>a3f2^p4gS%ba-X&xc(#k;1 zDeth6HPOHHw;hf5fd&D$RF*vY)egh?#Y5kApWbGtcc9;mw%{7>mclvMt0wgo?0K)> zColVi<1c{lJK6+yOLqh54{$T_RsOL=^&=?wtOzKK)&F<_9}7KIq_XbF_GUyLC<9fH z1pjzZKW6zKKHaz6_F1q?ln{V~E56J~fZ@nI{fE65Jr=4yJ>BwVY!qHfqw=46qrdPy z-V0~kDVA(sBs>mpm@#(1CjJt~njty)f@#eZcei%h&)BjZSSJN=naQrJkcCOv^QG7L zpQp=wP3m+#0m|c#8lBkjOZjrJ1W?r9Ba~6v%NAl_MTW~!Vqj;!E#SwuA_ZGFt~>ep zs5OjjEw`O+;jP}D$0CqpDJ67VKenuSO)btA`oDLoWz={&GkQQ=$6_UrY&jcS^QceC zh2v&X>&VG!aXS3C+dXRCo$a_bblW)2fjHdZ)UtXOuNfG3`ts}PCH*OL9W&kY%TBwZ zKsxW?ZR>t3>q9vUH`#PU9@jmfF>Af!?s-VE@sgO&Ewi7nhEQ(YhCGThfo|~^g&CIr z5j7uMdIjPT!gEMrp6?Xpo#g}AopJ0u)J+_K)474>z*+W zeJxp{u6aq8=sxkHU$R~?RMIt}jGj5>QPJ2T6GC;Ll9{`Ke@{nS`+tu;6WxQYSxyT`z}K- z-d;nkS)+W6p@2sD^>tda`NSvC16bvSr*t34k-2<0+kOaw0x2t6u1Co-`~) z4Il{lT0#0pO>hy7X-f31vfSMlf$YxZhmOlz!WjGn-Kr6K$o1qNkuMIoOfVXHV z6yP*_U+$Z{qR(mGvL<=0B)BcLm1h_js7!<*0ipC&8L_1|pO*b;VHmB?L}q&eqofK^jkNTmonrNWJf3_PP1m)(I_PT5&QW%YmREDM?ne?xVm=qhCliWOat zgG++v5hfdrSN0u<9L~o#?7ZrF|v&<`aqt z9JWZtd3D-(q(8%8{z^&WNi7n#@wF};Z?X3gINSC0 z=(&wFLmJiLut`#p7dZYxkt|`<+Bw_2BU%}Y6g(4Zu#SovG z*L7txy&oFu6+HpAW>Y4q^0m20RAmN^o$pO@tJ2oF)$;>fEDQL(3ox>8EI0iJp3fg| zHV#!hS`T8?M$bL%B?rjVlqTAZ8J>CFeF!>Fzf^F?r9||2$XQamo1J#bxhS`s-2%l# zGFWTs0P1@R%xSG1oV5Gxb!mZLXF=l?ehu{DUA6a5M^x0obp)5EMg5!YW4jGs> z02HT`0m2LNPtr!Sv9@no18JL;kG7L|SCH+3r~Q*2ObQpH={|ZcV=vlAR|N>CLUq?$ zQ>33IQKzAWkRbLTFSX`Wcs_Ep%MG`=AQichr;MKViTZPyo$vVXRSTJs{18>@F# z{e-4|2N{-{*7Kq63Y$(q>Ne_AlpP&aTwqSXhVJO-yL187QeOqv9~YO_oV4y%Q)8^a zL>YRY)kU=wD52ev-*?R1J>zF4aBBPy6+3FTHV$fkAy68gyZrf9+(nY0#MaXN^$2>? zo?ifrBF8TDl|`pod*&ql1%pC7u?!nCr%QnJd|K2|G?az_0{@iOcDKyo^8QroX&>C! zz|~#MX9UM_O~FNCu9=95268>E6eNppc?*Ikt3=@~xy=ICwPkpe1w{!)Z=*grn?x{)bxDmAiceoV`E1X3Wm?hm zfi-$-=f8tKXW_V;DSqLC?%t2>YcGcLZT2SryF^c~@~1?fT`CY-E@habf_m^Xu4akf za8`nhr`bNCK=jsYWiXO^0jM_cW;?(3M)q;1gW^{0zx(q2gCW3V{WVgCUB{$DbElL& z<0ttw=xW^MM=ttzSb+u``-@zw1#Ve;*D1CuNg}k&S>fMK@UdSHc)p}Fh(dV%pzN*x!dwXj!2 zybJGcgS}t2Ok5BGES8Q5oJj4~E@f0Y*x>bnzvnkCD;v7!(v;+>5F9s?Q;eO)Yn-;@ z?v!bt<$QoAmn?P6{%VEJVxv+QU&?Y@oUBkgcR-%DFfHP(w3D}*i9o9?da2rXn>%~Yw3 ztl{L!zg0(0QfS+SpqT&I2)8!}FS-*x-0`E@Kf#NDqX_I5tvW$ogQ7CY^#8K?aj zMM_aAdROa^jA6=G2BRr;IrNYb3)6C3Zbb|^5;>#IYSGPRRIjAUwNE8u3WOk&v$s=B zDt?2PdrERrX{#JEJ^^;4x*4>>+<^0;Z`FHO;6i-i%3Ws$QD+7?gv7EAlVVF$%GZu( zd#DxsRaZGIsJvI7v)%TzEz#*@wjB|y5X;4qaNgkV+4FXES6vkcs24kB$yy?Nb0ECF z?T3t`mAynMYSDVZn_j#GQ8lHD;q`vgG4gNGKqpvCbhY?Dz?lSPkkNkp@PmIe=);RMIrEL|D(mt-rp z$!M`??XYh2pUOQ2Rr|zaQ>aT0WGf3V^Q__{Q-`?wsdZ`9BC56o(4O#F|sv!iab?U3XCmwF7)EhYFIsI4l#m+J1;pH7YT*<4?s z+iZ(c?8CGQ+b+lFApz;96HS{L2K6e#TPX#onftc!qs|5WD49lT2YP5BXr4TiC6E)~lr?$G`3gAqluY zbxNciqy75k2ZzEGr)c0)iN9W7s4-Xv3aQ9|qK=akdJ2!Fk4bM|2qmdITMx(>PjtQ7 z(N|c=EyJG)-`3!0)op!^C*p?@Rfn{;Q-!Jre~{7CIMSuz3(RW^jD%`nf2+k-vtFG5 z`#-V9T-#F3&GuKT-o5biOBk{BCo)~#&Zai(U?2WUoZNZ+6gHq=<2g*x1bkq=Sse!( zTL36|Fq$jq~FX=QtuS!l9fD@inRMLAlz?~#1lEKa%B^`Ve~OTC$UOkmR{TAvGY7o0`cjXWqKwU9e$)B4US>@W()5URW(Pt|fG>WBa z_LzDmGjirDsI{oQ5v$<)a-HQy4gRRlLKs%12rekAA4rR*s#j2`-A1Has5wfFp(|tO z3Y52H?;nK=+S)R$xF)s&8%mbPen~dWM1~Z~lg*p&(N9-(x{?hn&Z(HO@_A}2ECETm zl>~PTZ{73dbGwVA_Y32aooyU>;+Qn&1o5U(l8R3RK!y4*ZCT8HjfO8 zk9jW?$2#PMFlUZJraqw zGUy3oXziqf&n|`*Qo40^PlSh+_X9Ot&gT>DFPmV8{4=%NDyid)+EK^qvuv*FHOTQ_ zY;|YxVOsrlnOaOXC~FW5=kFyQSZM*A8M?YGju{=cE-gqMP&U|`_T(r@ZGo}3@0L4d zH+$4=_xPrt{bHqT@5#4MAbY1c46gBI8(f3!@8Mmr#l3?CIaVAxrjJcoc5|(;PM*eu&ooXuxOvJ7X$?k%g%NvJ>b2irU~5P^hvSz zC*9!`DxI!)CwuTk+Nag7(lll9`FWHe=f?If~tG4w4pTE3yf^7{ zT4a!JBP|Q&p_Tb{Urk`Z256 zLR61C42=ycqJsTrY%qgYXUx;ron;)@d|J32oE?ah(m_a0Ca#)%5NR*m-4m%(oTfddFVN z=>}(<*jbPs0(HQ)S`FomZe!YTd`Z9PW|+5?S=Ofo^dn^TzK}8f-s-&`a3a>$`=Gr5 zua*>!`GxyFWadxMxjD1Z(ke6E1Jp9C!b_G-O%s!-f?@tDeIa?KC7eUxS@R^j%WBG zVdqyg=m`s1um@Qt94ZbQg%bkP%3g8!s&Jq~RCYH}`_oUS) zf`)dAZMrPeY_A&pj6!M9g4UwJ>A^GzuM+)9a0I>YA7|3nYm~tQ%LVUZL;SnVm=a8A zkoY&ULsPD{w|H@SgNpp~icUNLZ7X{@M5%T2B0NM%gz7uGqC06uZF-6qHWXdaWI3?~ z6MRcxGfe~yZJlqP=roB%bdy=4Eh}7pP(<(E7CZB}gYp~+a13Cu$*3)jmWSn&mg(*H zX)_MRaHdH*5jr!1x2H{FiBcb}{j;N3@?nM_{wuq;A~8K1=DzUTl)yl1k-{PwdYOxA z(mGYaK_9Yr&m@r0pX8(^3;-8-M*>=n-BaQrNq$oYZSET5Rl;sQ&@|`iISCtey@B#N zCvc3iZkf2&5+Rv0uhsR1gGJH1$9IRlX38$|vj{s0UQA?iXpN_ei`iJmJfey>)&s-n z{ff}^@K6S8ET&{Q@KqT`W;>gHS0=Ql;?`_LwqN?rjfoN*BK%|1)S(YnaOtRoyWxST zFJznDZ&quChC~7-4_YZ6vRs{T(6XU0Ur^+vpKMabw1jVnA|bli}8_adEb zG{o!ua~ZdJmQlklyWhN2^glxu>Or>c-4nxTh(=jj5}b5Z(1fp(8v(uLzf0(~a-X95 z`Af&A^j2FXqjae}&JVi){j`s{9r(aIFw1>UykTaprA{23QC(G*q@c$y2A(`;_HU|( zSvDObga3=v5}cR!m%mbVW1OLMa=$w9IPZ~kTBiPEwfj*1TZV<-qh`JR{_@Z94|wi| zttsM3ef%Ua(gKtRS6hogaay{BGlZ9Zi*0H=v+0P!gs+hf+utmniI4?DbsdAp74htCWJ z8;AKcWO)^Qljd%1W7|fStc5x){ZWM}bs;Oo(YKV>9WTiS#q+ z{Y%XvHY8p$fWgLf$D}M5BHBbf4D3%&B@8`KyR@^8bXJ{lsi(ccTKb=rg%c&q!2Ihqo}o5{hzY)j)9qlJoj44Fnx}NF zJM*EQEsk zd(t(x(pL$t)iW`m3Jnn$JuXYG z2jp$#$C(`tFOX5=daD#mGM{s`E$JK5OD(rw#~I}h9K?sMkr%!L49qJ6;u8@woTFM( zgL2AUG)EEQPc9i*Z>6Nl)1CY6cC_35Cp9IA>(TRJw<&Y+KNKpn!#GW|I?%YEwh~lb~>ry9b9AQUl z$I_zC)?`cip_jzgXWY4Ri*;FmFUBhS3jKKBhA1D`eJfYWC~XQsm&Zh_l@(_C36c=Y z^9teb^(AJmV$8<0FDu%>A)P;Nz1ei2Gfl`*3*kj`Qkz%hG}zzVej!#XHCA!;w|*(F zS7FVs`|ietT}gqql=Msp`6nCZ^Mmte1zUWOSrL$C*YIlG%BDS1 z2cZe{Om2Xg)LScR+O8{n;YDKvf7hcAnH zK*87fIEi!x_WV&`a$>&4_fAabqY2cc(+EzdH-`f7@Xu^X7F;OLBUz7&Db#P z(6z#c>b!iAL|-y}81;9FzWGbTg`(10Y6}}0US47^V$TX6aEuwl;o<-32QRHbr~Wht zFTc|CTB!?gvWm`8p&^<@21*v>3}@lr{o_t@_Y_xf`%#sM;hAAj8$MNJ=W=v)8FE2< z#BTocXdRo~>U&}UBdn%hVm6sM4Dez(6Kk{YNw!t_vX>e(Ni90*!)QJ)0ZtVudHdHo zrXXC9v29Q}PsqYU#;?r#2oOlNotJ=ggM?%Y6Kte7HLP;3EfetJjjhAOEVCxm&B7|T z_F>aN&m(J78?`UZP-r$%t*~3CY5X=Qnr!RJM*A}%+mUavV70O~saqd;?TOQ-aX(f4 z$dE;?+Jk z(6DThXQua8-=NRU#ni`KQw>}eY1iR{kma8nQyIkU|o|pdQiOBA4GM=xr z=3!m_``U)i7)F2GQPI?lcr!t{-%@d^U+AS9*$2(`kkm|F8KHgIj!hdut#^(MQ$%W9 zYvpkcfAP`#%L6vL>wNr)MWuadt_vlnIq6V<5fP3AWb9XC;N`|VHbJ*6pg!Ihuq@C} zksw`C$?Y0^-x68(Ep{){?={r(HQTdco~q7encvhuFDh_(E$6N#27a0V&A$5&D$tcZ z-~w~J+8^zF52Yd%c@?dK2zYaKKmjj^4M1SvxO*p?;zO z!&VhgfUR7r0))T705~Y0=EssF8HNukBa6ekr7CSHu~Q``$vPe#n&~>%t>_j*L&ilF z!){hSITFP&%xL(cQr~clAyWiRziC8D!`N+V$%Tfs7JVTmj;CQ$5}MYZ$9>bu0j+Y% zxdC}Dbh~adSSm`|XuMAQawR^uadz>U@C@8eZnxv|7uVqZz0@W*K8gZ!5-Aor|BCqr zkEWPuq;aiOq?J3Ow-NCJs7u7S2i0YY{9n^nUqe?BU4&MhbiPW#4ZSc7C*VpFQB;qz z|La`w{j`5jg#;T9^q!rP{q}9omiLy&-@ZQFt2;r568d?wH<;NS>SFL;wB?7gXaOeEkM1ttCnjr=YEBnONk zxkB}05xV7fUwD>xe|H8y--bC1fj-*tzCP z$aeWp_YJsgc$7jW3Lg+i-$VZRtHsFfErWl^vfTDp$`%_ImzGKS&rMf`UIg@b+yFfu zOo+ch|B5^iU2xU;;6%kKUuAOm>|?&KO1xJy9-=*>I^R>M;`xjOz;&SeHQ)6u=5<$} z=PSAM1Tcg(K|mJ$+cqjs;D6qcpPCVY=LC_`h*aCvf65~nJr<1Fj z%C-zzqPZGMlX2J1`%QwOT54BxlL!ml&qRkr6 z3I4fS`4i&3#9Vl{Q|fWr_}-{ zw0;=dE{%=@SOu&prbaYl5z}G=Xvov^wwN!QItfMgfcN)P*Ic){(3yWU68pxI(qqN@ zTeEwsK3^$B34^Vy%4$CM(bhvh#z@?*&_2l0&jmHFnysuIBgo14EmkUfQ1q z$2_ZgJ|t$@!x0)TMXk#CPpIbvB3s_507Vi5Kud=}hmxilFaiDU(1Uds?e^sQxnq=2 ze0AOOWJDQ19cs7xUTb_L@l&Stk_y83OQg+jO-`RTs~sa$A<^I%_cDyAfa+!RcQXl7 zpMK3apDa{;^-Wp9!#7>N{<@yb;S=1w&IYzmmXnmXuQq8 z=qYD=xj(^eImyckqC@Q}S~C2`8uaQ^bC}RBh6w&+R|}v)>QBJ4>FfAJi1?OEy23(; zyZg3!9S`VN!BTD(Xh-V^st>a?qYTsTR$z2m$3B1$>IAOP;UR>hzvg@=6%MRHLh?Ww znBt%y&k*`Zt|;ugB<4j9oQpicQee|jOb&$jGnnZP|53%{QL>!FuTprHpY79|s%_c4 zP`7YGZ(Z-{@ThN*p`Kf%-l-#$Asx1`r?~l(iZqNx^4Cw*cUb8yiJ$m@-zDg_1YN^6 zXp4`+DOKhhfuNj-Xqe~t+zis2e|uj?gQ~e&3gKEBB1yIYKJyw!t4X)v4*$sb`6t)ZR)R{>2_@f0@9@B5>eVs6zU9p&pfo08Jq zXA^|EpL?bT2%~u`3JaZN7w{ahhm>4=dN7ll8)uNbYkO3z8ksoeE|!|uD$|yoyH`L- zjDy#}m9V}1!vD`eeBPuH4975LJ!?|HEEyfIt^M%%{2>cL+x^yJ=}T5SkCn~x@Is)E z4}ajW*Nhi+_B`*MGJV_Xq8vrW&*~Y;&c|6QEOM!MD!(zo2Bm~k067I7KnrfNbTX_nz8poQNJYuRuo2%nqIITdmH!r2|&%QE?&EV{-ZCa;wE-HX1X+k zR5bC%HsSa_=2fimm8;jILwwLs%R7}N_mxxu;J*d`mzWF1$>TL`Z))*Ugg|0uL#D4g zliUPnmtWt7MUBMT4p2XIu!u9fDjI`xE%jJ`gEA%xqz{p_be%3@qwc0@% z)1%7jojp}7i|@G7_e1f*FvH2{PSB$sW!C&XcJQI@A~8&BKR{C|w`NF*jPTsBLsf8p zVIRRkZ#|E&wH=T<&=naUVG}igl=JJU{8^rMOLzOeH)2E1p>@~I#Ko~EeZJqa89t6r z4)#-}LZ|D=HC(X@+#%MoGTMcAP|fZW@oK`f7*(TE-q?P}$sA8Ni>ymVDXL+4fSW+X zG@z-?;&*Snf=gWFI6u6w`_0>ph5+;I>50GIhX3vf*x3E~BgmMRgb=VvQ00E9>h(S` z?6DGSrk{po7V!8?4{6MROo?B)#_%fo;vQ(2Ghr6eo_ zNF@gi=hcchE2cYoNhotV-x&S8PgZnY=J{q5U<*O>ez3U-CsVeGi=D2F5Vp_eX|gEK z+<0pw=_upSyKyjPkre?-MR-_{%*9@uat*PWoGFof9R-FMC`)KBrSy=|7V8_rO*Yo}Dg|NIl}@ERVl& zU}xPPRqIEBzi9{5UDwo+F{<^Gzd^0-+|RZ8v=ur$vxx#ny>Dlx^iJl{ij&~5J8zGG z4T6G4#WpuOaFe~%a}O&$-H3G-U?XDn5+4Z3ac6swaCyWbPTqoufGQTw-1>rgPOL&D z;zaI%vr@bchf>U@SDhZm-_&;(PD>RJ<9QN%2NJZrJ+&NP71ZCog;u^x&h|#L+YT)L z><8vdrXIoTdPDn--~$q{(Evi*#n>k`biy0QRtfJ!iKuVfUAya>h=>mY)dgw?f?uRO zm863ElC|^I-w8(_ySsM4*Zv*$pHXrh$ZMnzMK!)6{HyDm+{+ad zE+OxjuWZ#?;kb;$@KB7ulTCqh{uF!?U6a1Mz2&8goukf1 z!Et=pLh5rA8Rt}COL{P+%RUUTbN4u|*8L3(vAtU_dlYM<=f*$%^ujI5Dh76?x5R9A z=N{v|R(7KP%r)u7nl?s7Fa4{>RO^9_rNsa}i-vj~kl2=esb{N+ua!WRSzGp$njDz4 z4^4x*h+w9ja#ycv*4Q|8&m?B~O!+EWajEn`g{LkHD#bAmcitnrXjijWffL5KlYTzw z8nl&)U9xXXwKhTxl^@7m+=4@IR(rl!H^cBE(|WegY#(CD)V_DS)83)d>6ghcT|Y)(E%I#M&{(L_E)oqH1Fqm>Wf0 zt5@B_>=LQ`%%xL_9I$0&8F4*O1(;g9&jG=SVkE7)%Ex)fGmSTze2Lc%-lkkpri})ilTGwBeNN)`Lun>>^A6B0q zeaCRKFIuuXJZ)YQ8ocRnFV`&;Y~weymcL#+Abw%+a{oly^cLja@dLeky9U3r{QA5=NBn?A`6X<&_1q+qW#!4u=>~e~ za$SXmWi-_$C@VO{H}M)fS!^<U5C2qmiL*c}L-;+P7Og zv*`^08YQ>ha}KL5@gXmqrICxVF(x~ShArtkqdP7j$oTvMh!mtRNuX%+kXC-ag^oGN z09JDY-WeYK6_GFVFI7l=mQY=5+RvYaat_doaG7m zD=pBHeKl8InCSZl{}QM)ZguZCQ@{Q!Gn^}Ff||_*^zB{FF`7{Z|8ejEjeO(oKgh`? zZ<&AO#Ygv-7k~QfEHjRKy*N4eB7AB@JdN~%Zf)(=*ys@X&>&kdk*u(^ZOYh!SlVk2 zP=gJuUr~?kv~yvw#f+*CU;n*ZdHmaKzOXSsDEgjPz8iAD7P+1jh)V4ru3=mzaeJ^} zI*t%1Hlo1z+{2{r8^Mp9PyNo~Z*Qm!>*1~U167OJa z#hGz(uYiI{MPkdmuXzbsrI@b$81poKaMNW^jyCdqZ$0udI?rRjo<3}j;LYLAgmXQ) zGP&Egys0rd&{Wm-eEU?!^K_A1<#i(Oc1`?)#}N2Uo*X#ilAhEYm0hD++ToQ4m%nY? z*h$Ctgu_yoaQhoF((RnDKOY8VFRx3o%<>+$4)MU%L@+ro9zLa~Q6EwPgD3aC2$e8(Hcr8u4p?@az@3<5Jx$Y>9VR%FPx-8NekArfU@RGoQBxikM9EU zMg9;`mAFzoF-?;7aAncM`a+wwVILcQffYHRe#BMBho`0~^SE7Sfph+EDEFD~Z2p=LjOZtemi9VD6IIoFCdq~^Lp$CEGNSk6PQJ59Pw zVnV~5>(y938D80zvg;XW8=fl>2vM)&wi(-dX4>Vo%BVKbC}2+}Zn0kIH9aAWbm^XO zriGITWRBlH8qyRvTKtkGtDaykA=6X zTBfhH3DW;j17K{APN$;=IC7q)_>-){xPYbkknHaDV@zj*owVY1CljcQ88p!3Yjx_B zi!DNTCDH-;h;Nw0AyE_|<)eW$sbvJ^NMVA6rjIH$NJe)b{Z-Y1F)KD^%Kv8V@WO9H zalQYUQ&n^VVeoXFt%{|}d~FKOpbM_y}kUi`id$N+ljCCX#YjgryW?4@_{JS21Oxawg&7DhlJJy1^{H)*9@ z(A-qB@n}F{e)#n5iteM>0V)Bl*Sip3y$noJ$fEKg;So3Mqg4Hv zy1q(8xGk^Y$)IIjUh#v+EY5AFu2(W5SX)Z1w!}0YnG%I_-Ckx*Uu~F1i(dzC{0vNQ z7Cy{h*Ac@v^lY=(#uMSnzKMvbA&~@a+7G#oerE%GwC~{|z&m(pRn)0Z%+H^_Xuf2J z17LC+B5B)n2qhL#2^#w3o@L-s!Fzb=OoIFIg#o`)^)MOwCJ^m?VzsB^YS;2wJUDv@0diQi1ezMX26B=ZH*r5QO=_PJ9A3M>V`P}w;_7XzmLf+r{Lhuq+qn7FIk0V!g7-Z48rB4w z6mw{TJ;Mav=xtuiMWg&)i_19--u9NwHY=!F=`UOJzV^A*Hxg)G z01h!@s4T)svCz(<76YYr^BzF?1gcg`TFc9$HMYLsSxeO}`LHrU)=n&(y2ptquv)oe z3!cEMwYfIyCB_lcF0ma)wvtni-ST4tw`Ir>=$;WyX`xdg*_he?( zoe5}-pv0TiJk$P`+R?nK`Mp+`Gcm9PRZV4}uIVM_K)>{IQ6q15e%Gmo9Tm?|I2zk< z`PXg(iHTfZZ-3GKEfbXReL?N~#xG*G~9<~$8@CU0HDhlqh&SV?Q zo^L4L>?hh6t6igI%bvH-M`h|t(TxiO-QTT>B@HZx62HSg`8pHyXs{@3CYGMilUFqo zD^%1j*kF9z{y=`Dmxz;*M5s-_e5N3tZ|=;Xs2Tm@ArY<266j|S0HZHc-9k$EsU?yJ zn9oX~DA*aMzGIpeLyu)z`<|=^FtWq-nm^rl&_bXcVZRS9p^|_ktbpy~o#q?aJBY>m z+CIpWLb3g^N>R;_TG%w9cnPO}rt9gkgHY~aPH+HayNM+}ea3|cwHM|4+EZ^ck8-JM zAPtQ_O@+t*PK_M!t{|)Mao_?lsDfGmYJJ)0&$?_JumHL|`=dhDdQARg#^y4Kd9f}I z@5vun=#u6ttOeD;Ds?bybD0^SYn)RqF`c^>D$7hI`ke_gwM`Cjy$QW;Iv&p?R&Gjl zyFuj+0H%uJTXhd#(hOKvVxWraESFe*Jv8FBtGqn8guKX|jabrp8Q1?rV5eK`^7x)y z3G!N7d@V>S3Qgi-o@mT%bUH>5%|9dO$FyAmf8{87&=ZVe*p61usT!U)8u*{dV{N5Q zgyUu&M&Z59sPf7488B^VHik31ctu*+JJF!aS<*sHU%!1dv8&zgSbgrgUJ_-Uc2KMc z1S$C{=Iy9yF_Gn<#Qmz&F=9ViBb5AVQ7I}9U&z#3gL`7HD`x$i7(3MyGwAZrUwrjL zy@P?q!V;AJ?P|jVFFhoFil}8O?LskV=R*8RfKH0d0;l+AkN6z$T@ZF3L@7xq%!bQD z$BbgWIrPiD>#zWiHuC6!x~32CPwo%!M2d2cn}VaQhKBpPxh8^ELs{d zpnep#osQSD^QY)Fj=;u+EpegotM*G3l5yXaXO^3)a)``D$063oJ>1Y}_zdP`p=JmKn;;PI$ zI?rQBeyicx`vlpX_{@;~o|i?NC-sr2e>o@GP0}ar#n>7Q03iW_(hflj+PkN`FDuh) zHJNS0mIyzHS9v)YFi>6I_7$a*uh?fCYIGTPp$oPgtQdqMgCjEv4b^#nR|ubxVQWCm4;t#|KcTRrNM6R*Si z0cL#{sZ{=`9EKm7s{&v%B2icoa+@Q{_)osFFy2H9uHc z`LV1f_Q#n)&@dL4YaAPRby{GkA_y?iP@#Ai&f5IC{j-w5{Wm_~?E$X!Q3vGDaTpNy zAi|%}y9k+tB|wY!@;vwz`M1P}=^W_#W1AA@(A8tgAGza4N#~++U=`p2g)U?c!loyW zRu_-0tQWTSg$w%y3oH7C%Z53VQP{%=!y?m6VaZcaNm=y&A})aVJ-}Ja#G-MItv8__ z6F~zsnbT{;#dcaw2D~LE6z6xslR{dF8V(bopzP2`l9!vcEod#8_^g0QtCMvPR^Vtd zd-nkC)_bMcpoCI#X3xc8d33$p8&48SlqZ$Q{Mo55wRj1+i}bTP?A5 zE>K=Ad&^&Y*4Os37hU;ZiQwV!&J(D+1NynpEgo}E1p zQF&HOFvP7`QE2ONcdt9)A!&$YCdgUc>Br65xY8XzMW*X~jx~~Et#ciZTZ&x|=Ot_0 z63ZN_LKJ(e#sNoS^EdB19w<y=ve5>pdaRaKQV`K2pzU4EA(68gq1~p@E ziN)xjLw{;wSGs0aNDlPg@ZIWp6OWi9Vubxg2= z!|;pcPl~zOW{_DI$(-z^>$0S?=g;bk z@**a)@soz&{H-DJKe6BWf`N{nQ*s5LBeFIwXjMZ;Mm-Hme*RK3psGZF{Y)}79jd<` z+rj6UU?bl`=q(id7wZ%W%M?k&rR1d#9*L7d%&y6*o}`xfXw(&goDo< z-^#(Cd(0D}WIQ3}PXf8D@lyGhNab~vCf);SwM*bnHKjsd6b34fBdd2omujJ^ufIKn zA&z+pr1X8l7r^;~h#WkynX9C3Jmq`ObATl0;C=jAb9_jE{}R{7O&=)zotF^QdLly-J#@~+g5SsF-KB!@H!?i0d!4a0<*`_`GCJ1 z6$j6OR6Wh^!*AhE)6AbXBCM|=>x%tXMJsm3h*LMJ?%`Pn_V{dO@Jf-w;a`L!v-8yD zC33TEw(^?72%|K(@$!Bgxq61yPH+)^A_8S6iu4iT1tyQ5RzN5WC?K_W9fqDmEhyha zhA21@phbqf#g3mouux{?c>x&ggf*A1CEZl6XrFC&)UhFku8HjFRX-ISNUf z%n8$y?;(dl3qcS7Q^#*rw7)P+aI$?oz%yX*crZc_!+)k)UVe0Nyknb4e;>98k-Y~^ zozqJ^*#wpCs43R{e~5O}&|akNf*lXyqw(Iurv> z&q?)?T2+NrU~Gt2&SKN1sYIKEQv!+HgU#HybX%ME+_#5|O`bNUk9i^MQ~Bt91tS|V z>Xf)XLK@v<>z5GgmvIA)Tf82~NO?V7jYanudiJz5p>f_xD*|uN6?!8^g3JX{_S99lz#dL#L90qcMgH;tUjr&74~6262> z_+WIx|3V=en&;tizVyGG!Zz5}?bP|dG z{Ht?~F;h|4X8inWyu-~uf?Z7M`|~T%Q6Q7~yBr~D>W78DQvzvf2DSr|EIC^r`-e9> z!R1}4mP!r76ikW5)-;?sJ~SiW$tL#)857DUpFi4uuaoR9UzOM%oQMpkIk@F!@A`pN zo+W3DA4b_nD#V3``cabkI@@=Amd($z2m^w6=S< zLJ?i$AK%%&z&V8D#J==s|8&N0k9CqON1%&#)(>vsqch%)r@NL_{{P3nfqZ+_>^h+= zq5VJcZ(Zg5j)e03AHT#jz#k27Hyy+ZSuJ#K+4ZbWc#h+63q13&(tw`9rhGEO;m-qPP zgmkC+aJ7w^?dP!fk|mFu@0`VIO}0o#0H_X(Nrl>Js*8u6(rVCDVQ9qzozlIeeUuww z)79sb!ww(ycp_E;OmgOGBRkasC4^Ha6HW(J&pbQm_P@S5TtIsq3n|j_}Qtrx0++2!Zar zQzIBa4VC-MTf>A6lSg>a>^v-VKe);d?3npspLk+R#nATZOLlK5*3--ShP z$nmRT!LJ+5IOPwL`FdHYYt-~ZL_l|*1mY*~hp4mgSvCgeC_a}|iy+@ZM1OB?NdKbb zgT8?c)%he0JAU`iDJW*4Y67CVTuqy^vn~CPm$rp1nAA8Fs3o&&@d#y7eN}CT&9hn! zSAzFGa`l~bq*TRco&UO~G-Wb@X+LkxF|Ik6qft+0x-BGP+krl6Id0g-rQ|_rz>)X@ zFu8vHJ$nvT)pDl^(lql6GL51-b4tq2Z1l4*d%YO<@DwwJYeZxJJ{|L8c?xdeM8af) z)AVl{_)N)R$=8W{QnJ%?Zr}7&3`_c^xsg1q?T%>oa5dA%9?xZuZZmW9Moh!Ws2G*W zDF$yqb3?&Owg#E!p04^&#u56_o&g%P1%LE^jnj-9ElH4Fj*zDBPy1#iMhk6B3*(lcpumHWE|^Z4As%zH{jO zsQEO?o$?fZ5f;vzVyViEJv;DNp3)mm(xZkS9%?_u@-^vy(O% zby5%b(D*wt0Qkz+st)XS_|1!I=e75MyGIg+;(Fxc23va|@)vVtKbgpw_YW%`qM~!%QH8eDCn-?`62@a!G!q5M89~n%b zL4KK1c}$?1=cCI|xd`UpfL{{*Mkw$>$x3qW<~h<`T|ko+V6de)g*0K}lL<14_b!Iw z@5$q?UOr>d=tu2~;?}P!t5ER3UIG1dx$AYN4g#0qn{f^4CpHL<`13;I`>}JMD5bf>%pP!b03YOODv28J9zysjmG7H>VC1`JkJFp(d=^ z_jOR=x8u-&72%%m_a+So*KWk<&B6^%jHct87Ph`&T_~s;ZQMyZP2;2ZUX*Vz}MmzQ%LD&}3((jC#nFC{;uTEi5kPc ziyo&2LQ3<|*sXAwQWh&5#>M;fvzlKt#)f0{1~AJ#TIf#6f$qZDr`K({OVnJbMJvZv ziYmIP(II7;Vpm?PGYif#cLiey&Pn9>?v-vf0-_ zV^$O0uxO=sHg5Hoeul$lK5=E`GRrQ!$Y$d}3huhNgYh_R4c>MTwSCxCV%m#eBW*J~ zh$&$IecUK4d3<2YxsO0H&8bz7!tCaueL6R=QB=48HRW5grob_X-OTNC;DnkL*+Db< zi22f7(s{3KAvIH@w{CypZ;!Y*bei-dEpgR>99v-2+OPGkl|$Plheqjq17kTg{V=pn ztE+L;jO-<43*!m<4Z!7yjh<@NBJ)Iv={bB!rFr&g$o||&auT}d3!~sx>5o{B5}5{b z#Vtf&2A{9_Y9q3S^~%LCIkQStNR^J0wT&?cQ$5ewt@v?~;740#cx&Sb5mCNd4lXPO zXl`6x(DyS!0rR*I1HQEXW&p)_-JF((y8f4YZSOqQMDRN(q5dVr@uth0Ke}ElmEGx2 zaA=3E;?A;nRz@Jll?eRoh8F*q9JU*<;Egqd6!fV^jz`V>Kb++~+dOfG%WJK{A3mx* zA+J~zK#Q0k`@s$~3;{^?egk|TW#Z* z-{}9S($NRRMQB{$VF+dfZm1Y<;Ajvo;9}p%Fd%}+G+KbKVM;du&U+=@v1JbZizrzC0xcKW7v0ksy8fblzh^K&I-z$$Wk8r-jV_ z@jTAo!E=iA2>#N}b2_@5x4QygCJ8d$Q^hE4+pfSOM zd_DsgH#dEmt3W`_>R|^@;T~?^J_&LVOih%4lpg5kpU{M0-+90M+}$JmfF`<`x`%mm zBG^4BIF&?9v7UNJs@yVdChL&WGk;Ysy%v`;>~=md(7&?RpQ)T?#Tce*mOTzHk0<0m zuEU6l09>%lYokyfXKs@g3lTvwKSMIqeBkE?|EK5ok+J`w2;AtmTDK$>9H=oC+f+_y)-`jLlqPQy(uTkj8diVZo?1IRr!FrJYr7n`xLE!G$iPtRb@L;A+i9JAr z{(*|Wvc>ZjAMM+6+XuDm@TB{q4;!66=<3K&h~`lKN$q=8*Qe^(kA0>L80Rag{u%oL zXnFYSe2^+}-CbHlvPYQ)65-*@h`gFv{y{O3PVEH{_%=)(lw~xehykGndD_G=@Vegd zJwNQwB%#tF3G1t5nNxF&y;Bj-m809HVFAdH$Ti4fQl!-%K*jzl?DHn|XCyAhpf>{4 z3h=hr-jJAYWK7P`%*iW$X#W5;n9rd{b0Gf&_VW0&nq@w;a`~}f=XmC#U;jB}@)l8J z;@Pe!Ou}?|Efs!Z`27vh11@8GHQ-F$_+e0HMBXtSLS_Hu=$SHuJ)O91`GfM7#6(mi zyuACTlu1$Pk{;gd_?E5|)h8Nu`=6%%dSnXP@w;b z>`B<~inQ)^C}ptsx)T3OspL(MHU~yaz1!df&YhfnBK@&5pMJuQvnB*TtuvNAr6g<7U$lpYx|oWu$+}h4mm<*&#nl>W0^tQm6OONn`u6{$ zsQ2Q-jPF(=0%nE4I3AWDYrZP#?RXcHG%XK?`i7gQ`#Kiys&IByK5jI95BKZXnjVV< zpFN}IGW1ej?M!vIGY)5d)s!8EO?t66YPRZh6m9X)lsc`&uW#{Szz*T4i)+)oP&{q% z+(0f_pa=!3_2jP#XASktAhv9gx}zrbqnXmF7mC5ucMQPu|2h>|!;DAQVK>dmq)@ z!)MX~P&?m!%!-+Re=J;b(QQEv)PA;qN>sns0~k}bZ7H>OH@93l;r###)I=l()6a*` z-NW3yH+PiDg)rpnnQFpF{I&bqUMQemYAWM-!VV+SmmOc0aBlZr4EnI%oq|7tyu6Cm z$fKu98Pq_ZH9M>|<8#t?d0{ibVtZv*cX|A2^_s=mr2{V({a3P;ih`{%^ijbbXa%-OSo5~a~E z(+b3f;+4p@!V16N?OhJH;nf~!OHUb24)tXOmEi2M-+>#`6=C>e(dL8x{UBu{HMrC} zQxk3`0=}E~<6ahak&U0{ujMeWDYyS=z^dlta8B}bCc4-!Tcf|wY2dQkf5e-+4_g<5 z(pypX!r8iTuL2~=Y6UTG(eAH-?t<8!DHi< zbl@&qg4HN6tNOr5sM_j-#t4DH_jT+&aABHtn6gc(+G!Qs&#`H3#_RbdiVs z%}SM#QC|qK5LRvROn!fsxxIx+Ll@r~3qLXNce@8JW6{|DHiFuX5oCb*#TbVs07wx0#|j=S7UTDLa?@o|GZMZ{K4s}-hS=@lmp+YSex*! z$$Fxy<_%sd!Om{xdl%i?F&lT(zSDhQn(+A>sat`fw!Qlvf`3+n0>+?xLca;Ry53d! zYe~9c*ZQ5vgqKT`8gw8F1_jU`qdhv18$Q%lInirJTs`5jH~ai(bXNj7Jy11h^Yd~t z_Tdvvx7B&or$J#St+%1?mh}&zwIgrICQUbDr8W%*jyCy#>t(UKwi%phfI6#?k&1QfG7NxT;HQ0{LC82VkF zh`wJ}-?Kt2e``0cJ3gNd51w52m8=w1CF4$b&;wlJ^hUc5v5~~)foWlr|M;<3iK>Yr z36WFjzZX97xM`~!2Fw7rn#mnlngv3T4vKTv%Pv6%LXsv>6ugL8-X0(-rHSKWGISEA z(JPv-4-oy3SnaeBe5#zt5zMc)d!*s1zxT7rc!it1=$#kDK9`K=81%uxtKDtZ#8+K% z_or8$xyaY5mvVZ$>QFeuLMn=J0-=GX> zOzvqhkdMJ@@^4UkU{>|mvRik!VQS1n&%Tkpf8P$xUSy$tPop$u)|40|+jpnGKG09J zyHg((Xnbi2^J5{-5ks&2{)H;%iDxwZNZA*B-wR%Y%ojx=p$PuhGwhefjkl|UK4@79 znjewLTT&fyY69Z-TBE;~>QZf>r1{9MA3My6d;V)jHIMpW1i)P)(t?j5c5{SbDY@G?sLBli&L5i2&NCo8T}d;%o_Q9J(}ksmS~*tv{`8Id&gQ)IBG zvlE0@F#lC;RduZuZZ~L?xFwsDLDI9KpW#u>h=OvM+uzedz=M7TE|;6c8HH)cF?W7k zx59XOsE#d!ou`>fQ6lCRb+G@eo~g%E_sv5E+I+9A2f(j5_@8qzBLgKxa^<}@tw?_C z0ZGKVnz=1c8O$36EW@WNV;0QX+_g}+mt%=sVoe0{Rj z3~h|Z%g;xR^ivmVuE&3+Tps(@YbggIL$TMz6~_nhuc4GGJ=^j68g^k3GqnVIjTH7` z3h>S8BsKZZG3k)xjnyOlNS?ZucN0PAG5HdKX=8-l6LDbDRkUUd6ot;L3&#Ufm~WIU zD^hMHa3Seh^;uDxE#BMLc^VIZJ z0IL5-0P2{rs8gUu3siufOP1|jrC0K}J$boE1$NGBzYO2Kuss-SQL#R(4*>ymPS<9v zhk0#z;}I?WY>~AD!}HqSkI%E|&v(PBZ8v0G?$N#Jm2Iglt*LD58cqhm=`F1|hO>JO zYnL`6h5IsOJtN2An;K)%4IB^eow{VL&vKK^shqX9(*v;vlaej3pWUJ3wck?*!()g+ z1;BM0@~p{iY?Dvl$hm6USUV~bC`*wlQ~#t09zq-DvU}HHciHfz_E+o~Eq0hZ#NY*D z+$eP1SIAJh4;_9wZ1*~{63XFmg2L)vrSGXn*)+KGti9ap+fRA&+Ma%E)X&9hIM;gz zt?{q?b_igUDthV2fCv~Ab*{1LwY+MLyTTp%73X9)h&pfAZc!m2VgOgUwM#)Q#4hij+`n?bP&!F!5tu^SO+d)WI%eAOu; z)ni+?N4iMQ>c^$YVd&fJ1N&yyX-!m>4hv6`2?G*W=k}Nj3>aO}XPgo*Q<#p0to<8b3 zlzx9^1{#e4#d2q8vn(HyXbnp<`f_|&kB})e*s^7LrUk&8gloF=Gjy1bW+;X42nf<;@ly@94r?@#7nT2Da=QDHq&g!(s+7e%Jnzc z>D=WFL0Xb^P~mn@gnE}ggV=V(R~O@>#3DMyH9vs2#Cf>C zL^|`3J?ee%bNs0yAH*;=oog0JVR8*RWHFRFOHOy@4FHFQIZ?3-Ob@OT5`ZpH^1^=z zzy0n+tQuis9`zzTLw-F4c}OH}u%j%ZVZz$}ZH$MuC*u->D`^$;==;7GHaOjf8{K%H9f#B-Dw0;=`-1 z{Mi#pE1u^_gl#x;iT`zD4Q4v z^MT%;|GAd9dx)35*b7rhT`Y_?>=7}T$@+45xJ(G|^{h8?H`A&s$*C&mlS(u>Xu?Ox zXRk9}>hi~?0KMD*H6>-}ji|XoLUc8v%^3xs)!E7VP{JM!UFe2nG_@~8=7td9xXZE#{~BjKe@GqzFX}i&-2S*O!Co;2npsx z-JJ^#mLy;5D?U=W1%r*M8edy~KgGC_*txjPsuNwGD3R0nM$mDsXX0ti)(#Xbku`jY zEEBHFkvDQyKQ<+j3_Y=6*HGwsG^4c!duk2YD&c*(Upm%yKA6tfXKK;ocQq!OcH-Py zW-@RSjD;!uS|69dZEdpI%SJ|YHV@kffZZ&`y%(}QE|yo!kQO#gRT`S!d`woh;RZ(N z;>TZbRl&bO%Ya#!*2x#Mh?n!Tm+TWQ#hfkFD}6i1FpYbF^uE-dl3QD){HccGgJBwB zA8{xRu=w^Za1Gc{Ap@Yc41(HsaI#}7T$~#R9EIjB5|opkm>lpo9JHf*<_A;0HFu5^ zKU4Y5Z6@vgN1!sycbuRrKN9iv>ecAt35kiO$TFM3a7rrFH@TYz9{N2Es8o(67M-Fl zhCDlIi)TMSlYUmQgixY`L))V@!r&m{G*w_EEorVJR;c>erk zBB$Z6dpFv`$Fi6srz@sFo++1qS)Hr@agTE{3a%^#ZCJAJ%Xq_9pij65dt61;yTTZz zWtcp}uBwXSG5&8Mz=gq~J}Y-#rK5iJ?)b7vh^vfU&CCTaEqLdI^W;ZNZ`Z}J8y;Li zP3zfw_SwfF9@lMgsu<;{@s}|P%q5(Q8gj}P$IT%UPWf07Xrq{Mf$Cfg%~PewXmWaO z3VH+0(4u#Uz%<;BM*@BBO!U{Q*AU{qEV!OX;!gI907Z=TJ(noWviTK5YXW}mX9tLC z#y1x#)o&I~v7@VTNn3M~Lj5;eQ-pY7 z2pr-oSBg9b7P#EVZKb)-+)n5W%Q#$K54YKcc-_{yxL-_81Kb{}EW@+50Ta0V8cZSK zuga_sDsn@W;A0)lQ$ZtsIfn(`5wB?->Xm(R!M@rL+3^&E`OOXnk|H-RHnHMMm357f zF2sxqaX(T6eZSX+BY7L+t~{Y#&#sKPgij8+p^rye)f|m0@*i#E5Jr~e9qpT$UGm5F z^2?ZJkLa6a;L$2Wz6>kCo$A?MizFQ1S77@qFmqK1n63TzY(+~V^3ZeFe+DhZ^A=0>hnxu)wO#)vIKFf1Ec#Y2L(q(FAV(+gn7RGzoU9 zokx>N3Ie73`_NYfR7n9Vw}W)W(Oh$_A`x1&1;5~Z5>n>=~&qz$HED#tfntg&0#GwVnJ~|)bN%byfQA<6uw!%0;58o z0{9#*+$m@yrHgH4Qy`Sng{aAK1?tM85rhs0zBv(I79pLm^LXDJ%pX|9Sp8z4<3Qke zcX`mJ0Jl0FWj~o;$+f&P{k3f&(T;<#&7_${V_bA2jU46DL*y9y5FTTqzSbego+O7+ zLzEhD+PYV2vsa(_!VufoDTy~a!Js~?w|{ScUlz>aTKKY!Kh9o3MO^%KkgNA7+Yzh; zWwer}`J7O)S8$kM1!*!#SL?H2dRkVveJHA6$QQxLtkK#ZZTI!`M-4w?lkd#&!HvB5 zAdf$T2VVT*HTXndE(bY+w;A$e;TK=V=#m)J6{|G*D&w(pYi>P?WH$+d;Dh;F!f=V_C-mHJ;=a=@y0v@itTnm1%G`pK(2(IzxrI{5%|tGX&1zj z+i3izAtHh4!*J&})o!5v&NJOuxTdx3!86YKuVwLhX9-|IzmjuEdR(}*2t1Q+@Mxl0 zsx0;Jd;t~(0}$>k&Shnmc6k=SaHB z{lKH$|M7uvjTB}o)bW60=S227u&vel?ndHa&4s`27w0^Bp6k)h@5?CF+m`xo!Q!KC zf6t^tkC?f1{&y<dp#>$y1uPE{{M+ffJZ2pYF!Qj(=E{9$imfu@!?jmX-{n$k#zfkP_^b6}`u zq2$_#IpvDx>1*V&m7`}z7T8FpR`-DHtTB}n%2aM6&96hZnHU$mN%XX9Y=rLYqvev!p?|vasSE$2fwFnYA6&NMISm9nVDu}l$9U>K1`eKju zTR;C>8~8V*Y2@7)YZ$c;(%RSC_uLjMyM9=+F^Up+F7#V`G5Z;>I8!cq0DH;X6%c1S zWt=fpxU{|uqjj;a8Z5JWIrf!NuulvokUvvqS2@s(I75c?G9L{q@5wL;;3Q0LA-e^ zs+GS>zVvP5moKH%R4NjblrN=*D_RZr(zne{Q^uuY;zSzly09M|M9fncb$4l19aWzN ztV%fi95sekz!LV&et`!7!KzFU)pu6LR&6Y)# z!bS86-seL%a-u>X*95q6wG)F9%4%YVSZBX%Gvvig{5EH|5`*bV)>8X?g0EDXb-^?} zA6D3Zmkvh};B_ZiDU^D`KA>b#r%iqm_g%4(dshfz!t#JW8cR|X`%GXj#<@gKx3m63 zfMqIsTDO`jS&kx*QZEjC0{04J4NmL6-~DbLbyUCa43sM|XK*5dYZ>?|vWJ9)myo<@ zYTenrsCIRgV|RE%U9Zf-DO*GgQ~Pl*Z9Z8?GbU-pG`lfT2U(Auj6d<*)7 ztByO?4~7%^tU!la4?5!SjKMc=BGk}yUqd0tjUur%QG2LM-$_HHw@12sw!_{I53{Vc zGEU?wW1U&=7g#&Px}-{J#kS?UELa9^?|E@ET!Yg)hVlvKVv$i_v_Cee*lQibVC0{Q zEuRzg;jBz{urcB0Ddk$5!Q>W#P%Tk^g5`ja@xuPJn-D2rm;6dfjUl3|h2K%VPSiaG zm!J)jPz%}%>i`2v3jz-U-k!p&6HvTRLXg--5H@aw-3c6yc2#~Mdg71h{&ZNEjSESj zuGWWXO!bHJ29J4xBUJk>Rj5`$6M00W9|O#7pgztm(T|SGQa?nG(YU%m2K7 zG7`RMa?mqiy=nes^F%z@y7@X#*}cE`aMl5)Ij*P8oy+~zuxt>)I8o*_UIp9JuSmNwplS09>`5Vu* z`)td6JA40b4w<5p0se{b3Yqr(J#9+(ahha`F&;$Rgl6_N693gT2U$`A!kRi@%a!W3ZBD{Ht!JW?++ zVxu_QDS1|OSr)GpI zB?>?6YN*DrUcg?_1aV&>Kpi`Wb z#H~KB@lfZ#H1=@({{=-!_r^wy`0w=X00+Xa#Av*Dq<0sX+90pb+0Pzxt!MA9N|Yrl zim+6iGfV@CF}HyD=ghub8Qt**gxBXMDe65As+!|R%8rr+Birxugd;6h(G#pPbet$a zGFAjazE~zUF7OJ-$hu+!QB=fD=#Qa)gs#0XUnqF_=AF)Vr8Yl^FLd2Ei%-JWC54vO zQD8%!!tVWPx8Ot2N5nkl0|iRB8Miz&Rx~NDyDc!(JlIkt2~7POQ!`asqJW*aQ1lY? zc8%8XMB5>;uDxqBw;B+lYW)F4bt<2cL~6?3^1f-Xo{p_fzZv+M1=qCxH4mvoD$ zyWdWfDANh)1}OAB3-2Nv*)HG!cLQ#<+C>3wuC^BJ?`!K}XVj!`;3-;1Fv_q;TW)&M zv@x7Ro5uaga5i#p;q1=fMzGi0{XhD6Tahfx32PQ~k=CRIYneoMi=q;lim@O~>on1a zG)O6mW$cHrp3z^cQG8TGZ=$U};}f885f!w%$EFZ(FinvEncg0tp5iYf44hi;(bqm{7; zyiwKoaWRx@!-A^)c3f#?W2x3b9Za#0Qf5{)ODgR{wZ$$TM-gumH(OE4A(qd`9?7&H ze{?RsBsn#?`u_$xFDX7XOitWi!FjD%?^Rvn=6C0){m^_sByulBb&^tTtFKk=#jN=M z_S3o&<*d4_0~7T}MaPT_2Y&iCtC-j90oU6@ zRx{7+l~BWuKPM?9($W*xf7FIOuPh%-DvrB~>=cc&q}I*Ldk`U18l0jZyS{}Ji>0Kv z%#Wg6Po#}tk8YFy>Ab~XeTN!3>o7^%E$cZmyQ=BXc)!3?qe-(()e6&hQplR7P;!WN z8`vuB>JHJ$q-X~5cXjjX;jFmnXdt}MR8O1K~2M1knP!Qz7i zUT#%rhfX6Z+qckbQqIOOA53z+(i&dZ(MWdy{m06X2OWeD@5IK0kKO5iHZRW~%EQ;2 z=X$bD;r`oEdocso>$nH8NRY0Cj0Q9+g^Bf_Tn}l*6jb7@TG9#7)*(}Ud-(hdeL92w@Gz5XDe}tVndR5idv(lfdelEbK0|C z%$FMp(| zvGU-R(Ell?l}h9f|G;n$0p_C?ObGT`feXT4@DpKHffzXuq;8TI?eyQ@fZb_0-*&9I z3avjKMPWSh={qywe++BnKar=Cye;YR3&TNUG`^@Xy_)&X>_Li(smX0uIl5YGp%1HM z#SW$^NU6LKOgIvn1})@6QP)3=mIrwZ)^3>3Dl02-JxC$Jx1HLj=)}oUn~Wa=A`pT@|K;G~H76c{3rpOaCHcpmnY+*D zLb+PoB+%wE;mw)Shb5Wj_tf@bFH}Bt+5)R>f9?YB(&F>_@|YZYr;BBK zAYYkZ@8kFWJSEhA_5(sV(7!IZ^xw5jWCwnoA{Mogx~OL4ojjFD&lK8cf1K_A@W)92 z7p*@gaGzUkpZ#&VcHu{(-L z^w576t$P11S}8SQIqw;=^`UQDN)6&lo_!*n|M7{W0DU49I>@rr+4^zdac@ZZU}Qk! z-sH#b(wh~!ytv~+x84^*y%1=(li}0L(FJgy-EkGK-njRCJ3pW#=BNq7&`fi^nLf$C zc0+^PcS-WQBu{z!(!m$T!=fgAfPC$kP1og=`E=LmoTYRs%<&-~`oa5UshVax z#^icEIJKR27G^393bUJoK>lOc`&pQoG9Zt6Xm?-Hq0KCYAF|Lo^$peqxQ-C#P~5!q z9VKq@=eh?@9$+U^D}_bp_AkjA2p;<(0YOe2gMlW0k`d#f#Ct@o_=I`CDqAM>xQd2h zZKc(nWvM*vBd+V)Ij=&cfgORYorL!cFx7>?-Hu6;!99?rCKEUX6VZHsy7~5FU^=~;;oe34Kh1C7X!Qk7m8vRC)hDvem3c{1Iw{_9xt+_>CRM@c>J8T?fS;a#C*c&gRS-F4 z@Wr=0QN8P!)j<1&75j0f`A(bCSxkC-LB95ZgquxrL;i3Va!Lz_x^!z4&GUNf+{kh_ zG(My1E<*hp74U6l(S-qf>;o|!jn^RS(D8G&Rl5lDQm&C%F_hd*I~?i2V`gHw`}Pk{ z>*LI=2D>xCGOy{ewgglg8xHz!G;q5LjIfH34#DH7507CEhL7!Wapd`Rfuq|ef>yDo z`Lwd_-ly4jv2yJ?lN7XJhAc>WQ}BTJnnBx9h0rAFekCQf)i8reQ5tN=_ERNAhxS@E z6e2}n>5bPzW-`F-QKXCY{_(3BpgS>e@qBl&^BTB<@!EDTC{4f~wVJ&y7H6#&^~ego z^|93e{|MXteX7NdCj2sZdHK5cKKiTTwjGMxj8D~f;cRGy#7cq%Iz(qw(Pc%QBvYs2 z!<)0*fw!rLk}x}@KnHiGQcc^0{a)N332I6Yy~B$TQ{;BVtOl|U9o#8jll=t5HkdK_ z`#uH>D%WK!y~JYN+q1j#5->L{$2{Q{Zs4GU_pEi%p~nKa?C`2Tyg)p>`0_BosBQL1 zFvGBSJD0cB{Oh&7WSE{@?bmC6Bk6wDz}B+3w~~=#PxB-N=Itr=sgS1Tv`4t-md3tK z_ddrZEv(ly6K@(|ZnVbT90g9x2H!ZNL&&Nwre}%KehP?o<_t|e(PLb^)zto;L`N3p zqTid>0@LeHuOor^7I=Z{&FktPEO=XEsOlN`3aKOUd-@0!2o;kSN{B4~H5A#5ZtIOw z1}p}2HdmU)XPkcS3-m|V>FH)6N2J62OQ4(0Vn=yuYW$2`TO}Pe@T0C$;N|AaUPLjS-S+Nc zBVJq{W;{%cZ=SG_+!z;>D8F138VQ6b|D;h z5l4_fkpdjVq+sijrK|w$60JR&{MQG1{n#<8n=GwmP zNi#r5mG);~n+?u+m-O*ahjrF+&rBs>38_kc+BYMaj6NHJ(x&}Zc|ij|+g z{ms--_dk^n+u^=Gm|{y#F=T(eGq3BEq#}kN>bH# z+tN%@oKD#QM*4YbKbz4iX}VYSebZ)fCA*R4ezy3>uz2zJwrBgt3)W=eXT__U zk$HLwQ;O}A^}@Xrl8ICO%@^Fw!CtBS2Y;35@42xRRv7vbj?uvpWa_P`%3rYElYFkJ z!k>Vlzw|=F`uFIFA6D~Hs=Ka$C-ymp2>E8G<&Le+piJ$y+dub<+70HJd#1ojzGiyS z*@Yy=w^%n|$3h`ZmW3aB(vPdT`Xvf=Ep{L5qIEushDR9KV#4i4Wc}P~sgnl6cDJ@D z7290)G9#I#HJ3Da$@YL8ol^o>L($$z=sH1uC*bB`#)y5iyuvN^dUxHIs$AoPo%`(9 zTZ8VBsgna*Gpf}1&3&hE%qTu8Tt7L9tyH$S7g&n8^s=rJ*Ycsw(<(w!QEgfW+S`HA)NnNqbK#s7}mHPcFqZxtTd>l?o9wsk}k)05g>Q2b;= z@6QtLtesqq9_$1R|MlwZili~Dxb==RmZYxHd61OYxn=#OrCX&<(shKQ>P1w!#vx{Od=iL-Q z85&xSBri6RYHoj_gE?7)B*-r-GaXH7YDD1v0K?;a#3O^v9=4O(V<-}dg-zek<&Ig~0*OIn{-z}s?i_*Gy+rE%5Y&esohW+OYaVYS39nS?_x zbrOA%fG`dG&olqPG>oT+4uulP2JN{xj*V=7@6s@+sow9ilt7-pOOZYU=JFrsrcb<=XatqLbxWPfbT;qtH)HN3^vO z%@IKfMUDGO@&68hGW16{q@w;z1`}gQFB1%on0!!4%-sD>QD(8GQ0kjkKxQhu)-u#g zwi%gx^{xKHqw&HY%Jg7OS&zqhOOJ`uwWSDYzYmKcsG=OuaMSq9XRzc^>BDXa0@lRL zhb%BX)Z5outz+v*Ev%>-fi64gXlG3cAOQrE@;H&*w7kR3ORan+X2+JC1QC>*PSWFU zEh)33(ou5GV;iH=6rK^a@FOPG6-FejIqjppt+ih7r1#rf+&1&$15?3TI)-k_mdHQ( zHqBHFIS1u$Ok8&dVsI|g?Fa){H8f%acRq3uXog-RtQ?ol(W>v_RbTbPpQ&z zcy;6Ruh3{M+|p65q|{tb#)N`7Z`);ZY%7odTHfzD0~n`e)@fD}kuK39_90Gr-I=5XX~_8S|Rk2LFaaHv_Z8&wciSFEl)*N2+0Dd!vXkm*$qx$+k zM=?0ExyJS1m0^dV)JbtS^LY}WF%yg0>t`6V+_902q=(ncGjZQKvJ7iWw3keab~;YT zfRm@U#+JrWVEeuX8`Z8_OWPG>qkQ=!NurD}KS90@22`P-$p@D@MKH8Z-hyL-(aH?Sm$)R--P9V>xT$J5 zz=Wmvod6}_^k-<3h;1Ej%4BT7(a~NYt5M~*^GkGppKkvUos0mol)}RX9K2d3Whgb#6LEdisq+od49Bx$S(xqT5f-p>4z@Nve1( z(|l}7#sD?Ses~7IVM50K0~CFw6sA#!+Qfs4$TBwdb8r%Y69r;X{d9<@4Cix{GiNp; zS6zZ!#^nAAi9!|l9MJk~iC!bGGC0EHGhZ_23KdQBJi-KS{w7|bE=;U$wjEJ@67M&- zG9_M-}QNB4a$K({6}Pu zSk3EDVoa3Om#oHk2AF{?2&mC5$Sgp^>guGI$J?YzLEuFcwKiHeXOSFhPe%YK#~xD! zOnT*hEew`nkN|y6Kzhr$WhBkS;@?dyfXgj4IFz$M@VY z^pt}%b?UUQ0~N@Zc?+Q*@XsF>Vb;Yr-&2+XSBU$s3|T@{{ie@#KhLc{raJhAWDi;R zg~4~(l>t?!uMtRT&RD)j#WHu9H`5~5&Ty~e6h0mr@jC?xe1$uvXf7>w_y^F}R-py; z6Zx^TaWBChX<~GJJimXf`4@_J(?1A+pAp5ImeUOC_5E+LP^Kf&Z85MC>CPn2o8&)} zq3Ox@+B1_-=zQUMkr#z;Kwn3nYKeDEnzw6QIOK}FZ`}NDGRd&NKKx^lhlVtjyeUw+ zJDcjbX}OBN@3_z9xf|cD!5gt>zY8;(>y*0N(N+85_fSuB^x1uCRfq>f*LX}**eqLN zVlRJ_D1Q&TS8@+b5`^&;3I=={a2Qy%w+b?-Z>^%G+FCO#kg^sx*&Vg3-sh`HoZ1 z&UquFk6|}Q2Q$V@B3|OTUKa)1_63f4?6()0Ubn#BB&{@r8-l4CR+BsW+oOZ?M0S!< z17XLj`TZe!Jb%0H-J_`K&kk&QMkO@t7-#ZFqsu`{*1xnpcOEQPC1U zQF4ahCpIZ_LuFAXASO0#a)wS!1U(hhs?3c~hZChf5H;6QHiLitD2=75u?h|T8RK)} z)LsjwR`dSpkdPL{eS#5|YWXrzHJ6Tlbl7|9z<%4CXhD2r6|!7&Hc=GS3@3dZ-g`HE z)hAMA-_HkmO^<_FEY-Yy5sN{=1g-k@`gJ@f>+Im!*#I(TH9>~8;7Q73wVp128&cH8 znWA;k()dIHHB*tYegdJt+~k5_q4wOQi>*e1SfFuR+muK;cRDW-LTQ(Rfuo)WQ%g(h z8ZUq>Fi3}$qkbIxoFG!+@#OqRStfZ1SlbsqjO*XGB;kf_zRDG3W+NAOeICsZK`R|3 z4prfa&C^fp+nP&hF~#&VmxS5q;$(T`8vLhJeiX7fj&y!PqbPT_o|N-6wZQbM58XL+4lqpt(#V z6kVdPR#*t30kf+#t^Ch<^_N5j455~pUNpxsD^P+XVyMiZ^tjRi*g=@oA*N`qs>>hB zyi{m$j2KPZwqky7Sr$rmPi&RFMLdm8y`Ev8Z&y7Xx*+347{wgQcd0r#U31!Aw1_kO z{219ukotqQ`hl39ipZ{clBI>pJM~lUcQKr12GsRy_bi>yHW)yiVosi_|)#LN_KO^RMy_D zMG(@+8l{YYlIxZU<7H6AyYN9;49}sQAWB{2#k(}n(uC{n;lSkwIhkmAwkOa3S*IiT>evXS z)pmPJJMFj)aEh$yB*c3(aIsOO^40eAh0bV!=8`WH0gRO-pK86SNrfW9q&gi5EY;eF;*n$i<<%OY&Ln7mHn)YKHseS#)kM zksy0X5+ke0_j~C+6okdh=cC8KZMog0&m8Bt%U zJ#Y41HB87GG7H4`jUwcx?W0t>Ry;qA+IN8eb~!|OQ`av@BQcZQxJCN9&T?htsbo{V zB(yPGUB64lkZjiZtAl%rJU0R$L+MLl{jkL!>I@n#Hv-JiP1Pt#K9bKQpINdMSoqyW zO}*-6?yq{h)(5(38ob|P#=LoX!ZL%PTGpy95T;lmf2_h}+%Itd^sY{HCQr}8cL`l@@np`d}$}gVx*kf44{dPL_JOmzdMuoJ;^@8Mo$IYJo^y*%} zHzG)j?}~xgsUk)tLe<6gv7Lh6Ax{#@3S&hFvL&a#iM8I$LeqFBr$C75e?LJqYnFZ`O_X!iBbwOU6V>JP z5i$-@M<2oaFw}R!A5hhn2r(@oh{7x~3)MX|MBPDLi-RAy1fAX1K8_#Z_Ebo;G-dPf zbc!hW5_RqiqPgLB40Ji3!)mpqltRp0N8Z}sBXyAXGt{5RCHgV|<6mC4@g9LEfj~y7PIjf5~I)XV(c3e`Q>FjZ& ziVWEOX;aAoqdn6@g;x2%(}ecZX~Nm1l;xVR^=ys!(vDW^D))C!dcGsY45l< zA|}{!X>>qW}SOh@E|tO}`MMq_opXLqZxruYak0eu0Qs>i)kB>_8T)I(LL(v9SU7Zw`#DN zb?#;rj6{u6t>5*Q-0Lsbno+0Cs}!5-$JxZ5p$ zn`atMj7l7&`gna~F9vL4nFe0K;$>|M=csQyupPxI?$~GP3+qn=N57?T zol8f)0llp)$Fh{i@JdDvrdIWA3pDBN&ID@7z8^4KY}*;2eMfZ4jjVIK4lEDVqt{{ z-mF2$(SLQbnK_qsYUn(8=lGW|2ZjXyoMF^ROgOUR+Y2b2X@au??T-)rfuZC#H8w0_ ze$ur?Tq8==~mZs}@~ zVhGYlHzb8!2#ReFF+@Gx3|9Mob$0d_q7I&s-D>9Rp8qZ$=`3O3ItuFgfn=2p#*ry$ zXpCZcwIWl!HFMWnmr|1mPJ;#sFnZjyOK#^SOWmquOfTg&1aQ6lf&0_$@0#BQ$h`Sa zx}eBu7QL&Hq@F4`KuNSvPkMOo=Bq6AIa6p7-Hc5jhZvB0b3UIOdfz)&pmW#L_R7BL zzg8wzK5*}Au}^eidkjt|h!EPgXI~jkq}&||yl2C)+T*^83+F9YW}b+g*=pH&%Q8I5 z0q}zT+0kmqkxAC}z>^`~a%lHn3OHXpO5)+*)onRS+z3f(S6_=koJY)9-o7m}ZoVG) z)-A}sY6Z3BG3Zrlculz3;pudDbQHi-f^#!$m%bff`KXC>)@0o!Mw$y@^5q24g)G*)fnnuf^WDJZN1_3Zw{dZML*fE}#;De)) zQ~Y9`R!hefumSB4pKd1X8S6S8E*~mW55d|fR77M&fYUZBteyB7UwJT-#xKnu$JEV= z3>*+nTMY-{R@*SdFw4zG7jcG~3>Mo+%k`d!pJU8JC+s@N|yhmWIuV=tRW%SVQ9<&cT&v=uLWTM}C#DF)N?y!e8XkShy zec(Pbaebio9O+!)&~^cPHW>4dUIOn~aoo1sY9h85?+aJ3tyyT{*cP|k{Z(klu1#^+ z7Mm6|kW{*O&ExfJO>Fjf=MF?tvD@;oK6(u4@pi3&BYn)GuR5mNGS*zI@F#n2)JMk$ zA-i^Fo#Df2Ik8gd4N07?1fxzdns_^NfI~Zncn0WPK&d!BMWlAh`-Ou1*5Q+c^;Ro}l8I2X z)?BO==@n&9ZFCMhV(!Ow`d@6+>9Ru88jA1nhPvx1;w_nlOl*&OS3N!ldHhsarS@EU zTgM^cQ2J*RmnB0`+p%`H+F7fQgDIOc;RvLRdN6XnU?6hoTl3B-V@j_7xrw}H=l=QC zXR6~1x9!|{ho4x&w=pt8??r|DdCygh2d;Nfkqwv z_nrDi5_4!%Gjo=UIydvifh=`jIKHJtu%y4(9Jx!hN%y1&@r8W%nKAtErvGYudz@^;^;CO4JG(*=w-q$|V6(X$*sQ z3K}{j%v9xw#f=PwjRHN2x57%!B}aGibN-^kRMI-4UqGi%(Up~UC*NkN0a?(LaM5a zKc-B;v{D$e7g8@pI%Q-uOo=ytxXefq5YRi;FT?;^1wvbDE_GOOFB1uxJC5rYlD#a>79BNA0b^dykVTh_L_<@8@2K-W z>+|cgU-##fQsb#E(@05smLjWXIGFFgujkS+j}BP(L{Udpmnxl;+lywDBqYHv;gXhAU9%d|YjQLemyZlYt( z@3l#(7dnGj1yQxRaZ7#b4MdQQ?TBO#otAbF8n3V3SHxO2Y*i9j4D620g~ZRQ-*m0g zx>2*eAS$Y$>a0S<$%88T|f?!l_$iZ4kkTh#>i++$R%{}E; z?;8on(;~lxW7{-Av%aYQPK75Z)c103*Vbq?K|t!Z^xr+rXmkeb2QO;mlkG!*HTOfU zkee{=qXR=p^QCEUkk3Ou3ER%`>&&)A{X`(Q$r8^PYiDE z*(7gbfypGmBP6gfZSyKWnxvRpG0VLLIu0Fyw%Lv=#Vm(AKf5i==`=cYv$A&C{Fr*h z9e761Ivvq+-|(Ex;*n($KMY7wCS}-~xd%@h&QUM_XHtjP*$v#4v2h{^-vgXkl2N03 zV*!cxc{}TUIN;n`^t_+wCFR4WA^$dSg_zXo>dy<~EVtzACUJw)Cr<4a7IKU7PTfas zd*gd2c{G*x0mP9!O;WU(=AK))zSI5@FS%bEWmf>OKI^-b{rCKGMJ6UV-y;`ei}!LZkjF%>aYZ zi*!d;pp@$^R5HPpV@iBg9fNj!AzZMO1|<&pXJQo@gzR38a!SOhfUv>2CbeP%I8$Zp zzIS?b(r`aP>%D2dz-8PI&n@bf9DHRt=ea9-M@}JOf-8j!CFTA0H#i%J6x~-Bp5V0K zCH%tzL(TT5XiaF-MNARY%UKccG(eQUqg!vPa)F`>bAzI8lBWS&&*4R!ovs+O_6h=1 zv*hwkB%;&weBRSRNPx(HN8>t8MpCX{piS4o;*Ez0EcPN};_nn&KO+hY(8|KtfpGQF zs^lWNA1t5xU_)2>G7A;ZlWBc|44%3N|^W z#UE?vza46JWn9kX==r$v4JACO-Qp^HMfK@9Vfi+4RTO%E8{qh{hID7u>T&|9WqVFV zkbF%+VW||cq0oX>`QE^KgJ!*!o5j^|Iz0rBP8Z%C@(vRb0oaiPoPqm7 zi2zo|r`O7qn9<5Fu$T7YeHjvaDSK3=cLgY4+5r|GprjYanhYBR83b@UZ0+h~_({dr zv(}=dfMFzbU?!<^x*>E|F-$|UJjZ;gdrcv@`U7>ftSJu-DY#8tIchh<+ zdIO-z+07ZB6o=e_>$HhqM{FuDr>QH6Pz2(+LoW;_MS5iI#~}9TT)b$JI0c26Nt#R^ zpDe6DXf_`OGOU;phWu{mqGC$G3_0tySe-wAlh`_RE^Z)|-wR*3HkIz1xk;(KwvkrV zmI5>YT)yJWkJWCh^)d1pqp(?V@c5mv-~fx}Lo{TDkI`=|XUL3Bwrr@#x2HGtuFCN$ z6~=v2xnjw-=kFv;u;nQje1QdUz%-yYB_?Sc#^j*lq~LXmnR@YzC~P{DB)JwwxXzJ* zi(AcuPMdk!NTI42hDtlmrzz`N7ioV#{&!=VJoD{vr*ObYsk9RXo87B;WyO=PyN@_x z1BP(Uq_D_Yv<}GuftuN zzX+1Ivq+zr27hPCCu=9~?C*%5yCl3jYBR`5Ccw6SDr_!>ncdTy`uG9Hzl%6Q+bULc z;+vrMyDGXzOCcMtdvz9{@kc#RcPu;|qei(~6l?nm!^(T(MrE@KA;(hYO;=`@Asgm- zl$9Mj#G`rW+_lO@1JOOykXov(wA5BX6e3aoXf0!45DSS$-e!)Tx+Pk_9LI^hjs?Z7 zIwM?vtABHu_ZTXR9pTNE5eMCL_0JzgDiEU5lGBKwj;eEccPgNWT@-i{^#a=wQ7*v$ zybTWfp$Qnrj>81{^Gc5lqEI^g-KfiFA=nA~1Fbr5XE&Buw&MqH5zGWz77>P9g?}7{ z!zQjq-K56)R#xt;!+MI)Vf{7Ya4FZ+IW-*S{_a(&ubFS7>6*WW(Fg0qUAcyV(7Xwc zxIXG#r2f>#Q+N4ulobE%nQ>c|&8?01%T_sB-@w`AN9_*JTPg<|;cF*9YqohAM z5u)wPF1_~l?QGsoJeS~Z6if6TM+N40Hp;Ccypg@vs*9UWGpqI8q3533mrqeF@{>m1 zl!X0Fa}5}`TlObw&JFuw;+|&OS41Z~m(RjM-2B3QY|ZPUGMgi)chA=Sy!kVT zr&Mhl6z@Ln?jFv_S=@W=v#4#Y`Q*=#y)y6&MPu^sm?+~9|J{v}0IGxV8FPF1pLc1# zpYp^96Jp=?^Ty!MOo%-EYyLV)fS0NI4e2&LY~CoC$Xzg)GFAa4k`Fn z`NRJFzWe<4ix&%xigsb4IW}QBOpqN{7!4mI=KBH&2O3{w81cWsELL^l-LaL)y)h^x zGbQn60()YiJ|j`HumOC{x#1i>0V|nn*{Xr2xn#PcX2gF9r@%{5Z;;_H5y$Pw(p?y} zI#_{S8DjK}+W&wBXGi%z+ZH-Qdjd;j$YA@egM$oTLo70IzvX{Xqs^>Kf>b>$v)^nQ#>0-cLgTjUJP_@k*~&kHUa+{yLZ)r#PT9gs;}- z^%)_9pM3!djscxqaPnWEXVul)i?2Pwqy4-)JYC(!7Fx4E;Z3Aw%i<-cJk9nX)Bx9Z zYMqpASQJeM2m>+n#`*%81iYwPFpI0TM2wfOfzQbELHCGB`bVu}kL|psiL%MPgyyAZ4=kOD%M#G@HYAOFENC9t}6Ux;sU}lY?0gllrXe}F_JEPx6Cx5FicJ5;A%aASP z`jr#m^+yXN<5Ir`QZQePI}idu<4znVDdgQ7-e>bpnw-yzm27CY)>`P`3=l{3iH*%r zE>}aaX0`7<%n|VI^V{xxLyZm)gsE94Bfu<6oSldJjRo{Ip0yw^swwXZT_+H(5XtWf z{SwWB+A}#pzG>MMh!-#pA<7mK=qI`dd(FAk*${eoJQ;V0AvQ=~ePG}qb*$)d4eZPm z&<1=63dj&nK``jqgfHfutan>JrfW!hKG*{U@7e#2Th%haoN31o8U=!82@MMCvY7Nk zy+AJuEP^vb2K+)Yg<^!^{%_+BBha8D$Dfe91_kT;;@vUT>5-Pa;|KbAuGib%{7>7C z0v|?2SCjXRmvk4a-%3wK`7J&uhYbi;x)t1ip1pm)a^2ZA*7HA{UTfOdkXM1jK;~i{ z?P!gS+&NffC_eo3XD~{{r)J-m1;nA~<8(--+2tZG?-Mgd&;0Q^la==YXznSD*eb>K z6w>~dXg?lO0hix9sl`;&RXLb+fq^Y2Mfv4s=(=L1r4uyHw6ro(0vO zcRTM_t3tkj%$p6KLFS%56)f$S^awF$WSGD+2>&~TZ#Z5!2J?hKY7E-Q?i=AH{*&-0 zka?iGdJV_ow6#|LwfU-){0qn&IMW5daNeEUgiC z?Iik1`#RG_a-RyFdxwf&(6;H)=BA5SOS2D)9$=C<8oFvDhMj0A$j7R}m%$IM2#&+X`EEMJh6I^8dVC}R}RqeT$zK|~kiw{Lb zWLx~TeRf|2f@sqoM2Je_lc(#^@PtqzU?eTQZN8GgXnpmD63!P_d|x)yvy^2;Ff*zY zm~Ps7Y>h*cp4C>>VoaBg)$$_X&tD-cL?+iA+GIeyKY!y$OB+kgpj$sB5rde_jhLuD zVGoFv3<|Y9`h_@ryK${Da>{?|et&ee#Qie^U^#U&gB)q7{+=^6(9c2-5u@z*Mj9~W zh###g47=Hy-SR_*!ci@$j`hKXR;prZ-~7(NP7gY-CZ}vSV(RY7CL7*JV3OCV3=@5fyn7>VQb+W;cnxs*WjoSK&FP_}_+>5XV(pl`N5Ot=0aRWxq5^OT43lCTZi%~zzE)=Y@Wks-99QX_L`F^ z9ds|ls@=~Lz=i=wsXzU(H5YSi)nR)c z8_r5LaY@X9)Mmrs(sUw++ncz1xz4mJt(B2E_J{+dXvVK63dt$kX@_{WxcvxWICF~V z+a=pN-d{f0WjbeAUNu$jFu8U7xLD=#!4!A8YPU!DXnR=;p`u0kQyVX3n+;k_X?#SB zt1I)eG5J#Sgmja#ycLuX+d5{?6$2jTXkp|IymI{cmtRvCUrsp(7HzqcPCndJ*NEg+ zBFQTkbQS9r47IV=m}drRH;C%eG)>^9xT;A)RLreUp|H;Em({$qc(n4 zEK#GXwus>FewR;Nf$N-iWyuzZRxvWi7g6*(EtL|jAgvLi+XezAr~=@MngFwLIw4V$ zqw?73lm@47<4&Q)=*9S7v@??yWsovaNKE|KS!$PxPh>Sa^=#(J@^>CG_MgZmPaIi--Oym|ide${qB=q@q3r|c#i(`^M9`t$PiUrjZ zV7v~RK{qXhY)bHc+SLTb^yQX{ZyK4Y>wUa*NFHWW@W*+cnY))g0ppse_xJv(B$8!Q5=G@<|7+hKIsI2;e+tq4G@;HW&+j{c zo_zGAe)8Ey3Mt=`NIeYn2tKb;zi|J{s#9Yj8L#sP&22B>ivNNGr@&1hD~TX5R~NWo ziwm7!MA&WznU8e#NOTftBHoPn?px>v9rtAc+R~h-E}z-VvCtMgZaOSfDBN4FSLWyX zU}I~|xBPM^@HpF9@uN9ZaZX{ri3Bmjr1)<+?`2NLR*{^xry7p>GELJ>VF9}YDW7EV z3I;sh0d`qUc~2$PDhtY*oWo4A z6*U2MB}61Pi=p@;_fX(ichJuj=dmY2DN`GHG0s0Yw0wCK`<~yubldwJw=$z!zG7R( zL^#MruEjwsIwT!6ZEkWZI?Ro@^j+y}#%M(H`yr_dLX4oVCe4M$HFpo?qoKkF1}EpS zKZg0WB~k3%&sYI1D=qBXwww2yd#bQU4n;1FPZ*7si!I^9rStI?voFU|(3ayZ-KHkv z%=QSHpXQLt*(o@MVJ3o|k|;P4uJn*TxRt7TjHVy3m5V3t)2fF(OSf(`rqGTNHWfsHaR#WMIb z8Hi9$f2p5%y0>k?( zzM|-x6OF&p4tS9^ljl1zXBa6ANK5NDAfFL~cHozci_%Z{TTS&u*?`&fDb^HcAfGh9 zvJnAtHjHXaTrUpIlRA>zm5XBK&=8m>MFrT{U|xd|rYnHz8#zHru|RB5!r*3;*Jg{t zHl&f_IwaUYY!iYqI(PingFgF2pZ@b88>A`SrkOu-Kt^g>gnUFf|DRyR@4N(VvJy0I z&1pzxRBp71=TOCSwxXaecR&OYJ+k09hp8|aR8E5U5bRad)>U#eL*8UD6h@z+X!yLw zDzc=_VtMD;iu9~iFamhP^^pZd>7e2NQZ-DqAq&YK&t$-+MIMdcuM%8AJ@|P2Cb%l7 zGs&8%#@?PXSD^8ift?nC#tQvELlw~I{6N+7_8sUyUi=KT|KCgn=3WeTF#Rzd1Hvl> z%uJeN4+h#kcruR+RU}sFwK#wfd8ZQ`l@ulqbLm&gLiP-Syo+xLL44MlfzwySmiYV{ zg^q|A>y!-1kGJ-zNNz^gxS%zn`2wFt6o>=JxH2#WjFGYZA+!07kucOu#=k~v#VkEU z7q6Ahyp4huR0t=Do=lQ{^HPrmO=5cN+}u+O8b2GYonv1V4bGq>S<(1Q+)p?fGH{6Liw4!CwIz3J88fU9snX{#Twk{v*!@ z|95$oFVif50@P`neG7kvpiw|xLdwotLK9ppJ5_j9upANN>}eX|;Lwn$+# zG6SUit2hG@prK7F2PPHJO!K^P<@jIKwoIrzze}oon=eled|@=~Ddeki^7U0qf+`N? zErc>9^7>#@=nMI(o)(h9Zz@bT{hq~{%5W0&Yp|mB!-+h-i_FQC$SFl|icu8Q#&fq+ zK^r>nxdak7-&3mMGd<$JUtvM{ME6{gdP&%&JGcE>7Sn zd}B)Ff!kg4uN3q6uM{(zeq@^D6JUQW9eB-Dw0hibIYeY$KB8Dzc{Vq@-|kyw?)`|& z%c3>_W-HnyXm_*Fwb40{mLaaN^lS8UMcZI*(EvAo4`)L?1oPH5IAg#}83ND5x6?0W zI=e_F`#~qO1~u@6&m;}|p=XlDJ*c*Y`?20L!&8D6m;}U@V0~a2tmc2Jl}ecciD>p) z!&&7Z8G--*D0>T_xVC6(7YOd|8rJnDmn z6ba>}F?3(&MGJREaV=lHIrD(MZHGsrCx5WY*_U>nMI7sp zxtI0{-R+<1i*1i8;0N9(2rcuxVbFEqa$PdQ$wOdx_XpXB+NNYGdA*+tGf2{1+;N#3 zHuks40r1Z)&}O`x8?4JJz=#>_{r&P;i~Bdh9lWBeQX>43dS7QYIEcjsT)KtztIX}h zBOW&9NsJ3#=O8q7yY}mPz7vssz@GTTQ%e;k=#<(-y+gm5*Jb1Qu)5TSn!;&lPTN0; zGR$?24~Pt=W@?cA0ly-iw%*OTPY+)Vh-cBYwrx+SfXIZif&2597SGFG>%Ac&P({*V#{Q zwX3Oc54LP8x(bLiwe3V6b$4|4{)SHgBh}BUQk|g=!qx|d*8ev zwjWUp+PR#vr2(YvH{kZmUQ$QR=gszgRqg6B|D}>9E>n-oef;LV!b~zeP_c=Bz@p*6`y`~3kaC4FQJHc=4N6qL&l`>+f~E~AiqsHFO)w$K z$imR|gazpFk|`1xKy4XRL4p3O1MzJrk6F2I9 zCGbHPb{FfUn-^&n>$PPrpoREKQJ_M9U=6@NdS(8-LI45GRORf5h2{k`^)Ul?MJJG) zFT2G8(@=Rrz;gVrEDGQWZp6B!^d+GO^{joqfXWj(l>5=A#o1PQbSwl}Fh$^*Ubt*- zN#-43CH}f}YNLtB0t8LSQt>?G_W|M>tP;GrqQY)OBy)E!Ds{90`DkFSGy#t80K$h@ z`_>YZrQ~SzNm!M-B8%8_BwwZdbK<}Yyu~Otbzhe&z@MeFgjnAbABD^;?Q`*in;^m2 z=?Aya-IyMo!g~~U@(+NY`S5lQWQOBKi9W#sPK*ty=GWwsjLD$PwO6bx4V|$59lD#2Bgnc`0^lWQ!<@Wr^~645w!RZh(Lj_Z=Ko5Hjfh}UeY|Npv%<-0ZYOhGN(b=MQVMe%%pK(FG+mC4($ z*0g$;ilnA0U1kiJMnUu07hUee%JuyjNCKW;ivuxU%hG5=n0=P4nr(YnIPkf<1u4B1fW`pxS~V)6ZXr{ws$a0dkRu=hurao# zvgC^*7^OMvQK@5Tos;61r@e;(ucPVFenMYmXAla`t@ZOWHDv7K`1QVZTT92 zP1T>bXv}27Z>KtDgct1G-Q~T+!dJ#b+S`p;%*Y1&ILswTTUwHKMC26Z#-)Aa)U5jD=0v0zz|;R(j<3C2uRtE_>^tjY%fro# z(}BraH}j6K$uQeD4V}lNb0#>kMRr$hZly~?Isg&mVXAk+RvSiu@v?V2wW4S2K|ABq zc87G=0+qFDa!`5s5T(c88H-6Mz`y8Bh6BhTNJbliKcJc>On>y z2nS66Y*&FfC(7XDJ#a7ki+6;vrb_D0?C)Ui#ljwWYQpFOIcqH6}OX=|^d z9fDC6P#n^-%UTBdOisjzmLGIKs3Oc}Vje`^0QX7o0j5i=*8G@@%TYv6QX(98hNOtZ zt?CGcd8FPyCglm80`UMLEcCsLqy6BH&q2Ic2boHz8Su%5P6Ibb$0U~?a`aV4P@_fo zZpU3}%qOx6VH>Ezg2LT9A25qQt9@e|D4Zx0FWqtq$q@e@7F_V*CS{1GMB~`e=_tnUb3Rk^;aN3j~Zt?Y9XJ)=UJ?wCC zc2d~#a6#df`;CMN7U@HJ8yA@6y^s8gb z;ma#0=+l@R-?+8y+kLi4@OWSTns4e=^}n-ks6hDt>I@VT&R-$r zGCZ&d8k7*zSPt99CuXKM{gh$R$}shV{#xId_zsWSfQN|ppYA{z%bVYuqMSEBU{m`! z_Qn0iAx*)MyKv~v*yU0iw%_7TiE(Z9rZ-LF3MSY2O*z0RXFqnf8C`ew3V zwiw*+daODxa}J92ugi;f8tb# zlfWa_UDPqILY9ie0+4L&?pcbM8a|a$X`7n!lyyMfq!2epfN9$Nt$nR}-aBjrj*Qbw(h-*Rg zfe-|^79;EN)#~A%lEk!@b~DUWlz;WSpSbjKeRw}E^=evITgfmbs$C!EDrT#mi1*cY zYiMsj-rG4UUt8hqI)|zk8Odl!)2Qck9Frd7HYn;)jNdVlIdq+u3+uT!<>B$}zmR_o zoe^7k&T4HFTEQRo1|Pc5y@SF>vkEhIa?N8b&_zQ5r`ew9N?GP0X?8-J zI6F(KBW2rJUS1P?NUcJ99I z1jKhP5>ciTVdw^13s+}JT;Cozv z@V`L7tqDNm^El&E>{Y$~l!%QeK)l6kVdvR^xwdd?H5xL{4d|{`xtVHYX_S@-y0C_3oUhU)uJ^_Ep0eQ~xs&-Xv>u zTAM`B8xyv+4$p$(31`7N`(vx|#4j*mj`*|b>>uRK4jrl$reN8N>^cOQjA-knp*Erwz z;fC$SyxDXThvw4Rzx!~*lsvj7nHv0WsWJQ2qKtFJl28C_J-K$DwgsuskUmBrn-}r~ zGEe!uhp{Ay~&sPuq@X!sC#(NGYIU;U?16>2``Tw7`d~C*XO%Cb{ z;K>E7?ELGik5weKrztS`*tMd*=a>C*FeDc}-(A{Z73dnOxAF_Lm_#WJzTabB_51%U z)xO<6J}jn+uV)K}dY0b~&EO=_jJ6T!cC;0`g)hABGPqVG(X854vo%Hw%^<2-cpfe> zobDYhTv2DzC4sTp$~sZrTWWw*FO+1RM8v(t`drr|&s^}C=R z#i8X9djg&15qbjMC(rVr@YcFZ;~dCe*WS9=Pgai`Yr9sLwA8E_B#*PFImsGdXF9}6 zlxg*98TGhW?9Ef&9*U?Vt+{qx{Ot$}iL0CQaZug-uO}?&n20FGf9W`2R&MTWoC(bt zucjJDV!PQkF_bRyXDo;8S;UWr*+&kDV=;g$4D{6%CTWq%fmTYmSNwH>k)!Ah&BVzO z4C3%SQM<0dh0<~7HM12MpK?FZ|n@0j}aJCDiZC4j%V-N z0p{_PB~K<2e64>iVoAVj1x84WtlDTN?IkCl$2tYw2U2`(CmF_U_i?6i+;3;%>sAh zEfPG(kp)}#T(8Kcj8TKG&8&>k>wGs1^7jPdbg5@7JyQM2wi)V}Cut?cxk5=c!*^~f zU#L0af-W865SN%GFi*dKwwQU&ch=;b zMR$}DXf!&t_0tNt>+y{jqfi}foC+=|Qt39emj zRLdoE(ZX?hW@X`((VDZliN2vvRaKFL4fw1_m zZKC4y!{T!`x1LJVR@u;Utp}NpC?8Qe`957DL}UN6FaEkcj!%sMXh*!OigD4;XXgLg zj$pmcE5cKsUFE?QcnQxLB709!S^59qKl%LSKTVSW_)nAnX-c^N&!$8#e|TKf1pXfY zl&`-u1p-U5NCQf{+`)7%%&!{(Ip!E)vF)$MJ&{6_OYmIvPHQDq)}VDixytEp;uH7&)~m;?KlWQ&4`tAPOl0)P>L zKmmt3xHOD{o_OA0KJ%|60&@`nIoE3RT@8Vp>a;kGS^$J`C-OH?8epkTc~8|CJQKKw z`=HR2j4Y*6!Zea!w@=JzIdLNVhT163rHAX;EuUh0!1EVMaE35g@4?9crUd%l#HR!c< z@p_6DQo+^B8*O<3-e-oh)38(vnWdVL9kyk$wPe?WqAtdB$4*VB5}N*a4KDFM0F--CZVH{FOmr8024fnP&|emVn;yUI>b!3@{NY zHNe>>s25@J*V)z%K=_3@#?^RT748jCEf5I>tt5;pKXFNRo4K(y9ZrSw9;RxAj5sq556qu<;yOmWOH_10M_FQ85)J?Z{C7K}j_$+d@qfD+(9v%`vp2h$z2MiZ z0UC8y)Wj*Xb^m!le^VsT#%4H8tSRL6x<&rabvpxaNM`%L&k+@rfEo4xr2zg16jitL zRqexGws)3vQS?5eID)|6W=7uMW`-RIB8dNQ|DL)wgI4($SxNwO%$52NZk`absIEAx zb);B8fa0BbjxTJ#F5@3aR8hEVmfP)x%=A0f7`|?OOU6@(N8s0nMq#={)=P;pF9nc! zo=0u>CjDQlnbBXXSwAC9D)gTu<=Tdg!i>G_m#-n2WK=&U>-qoU!(|_+y!O|}I^Oyj z;t>Ix|64z!w&qXg1rhYWkSK-!cv+i&jU6pu>;Rg1kHDDw-YKSp{XF1a|HE3AnbCeP z#;69*2Us*pahdk21dRGQ1ABo3){Lg|*4@0lty{&4zzH0f9RKK;T3*{p)trDgUevN7EO5Tr+tHO4WG9Gu~E*5R3LJmg*hY z8xxt0jJaF70U~TS=~EX0AaFFx zkIre^L6P<+;e<=3_BSxv0Jrtrtf~oXdWn{tcWDzP4?j1;#IfJy6@z8#>CSO(Z9PhW z7{E5HCm`hXFdc8@{?}vm?n^X*6y@HjX|Lv4vD>#@`i<4+gwSUIDcC#g zh%fi$!+jI)L}()H-mu>fa&5aATXiNMw`b9O=0uDWw)fy_YzsX2P*tkv1tCh@}wpD>HlWwp78Khu7|&cuhN_Z-ni8Hgb`Pja&ofW>Qc6X>d87MsJ;=*&}T}!EU^0V%--V?!@jU7kG>!^ z5RuTMO^bVobWSprNsAj$2uz?7NIN$EyZ@2L}OOm@IO|GH)19LHjwh*5z z@b?r5$NYcaa;8(Vf3Y5zfIP9t@!_KE{Vh#srGb|#3LT%TGZm?cAfQ;~1ShfnCzo4ed*zJ$;GE z2HdJ7%R0gS-m2c9lmcC{fLj$-K}o=$Tb1-B<3Cjhzm-X<)wlsu9181%L<$zvzo{qX z?jMyY-L!MrilTR;k#h$CyA2SpT*{2=2r^<$MV^djR!Ki>O2RG15ZFJ~1#>+|2e?ZC zBU$1-1C|UIpFiG-zevhTx!WmmaJe!FzfQt`ijS;oqc7&?W8S&oMPHw@ivm~>{{ksj z{sW|>05d1?Zv^{ue*(%zC-dD$L8S5p`~_wVO8@4L*t}WWhaGut00>AbvI*jX!dtmL zN^Peg|9wnyN%G=^PyK3XT9M$WOEEQfLM=H?=j_e)yYWFda9fh$EGZKV*kRzgU8aD; zwN38XyRd@Rat@U%P{eyAN2zfCs38RGf0IW(9BnqECrJNWcffrB)Ex>?!({R5u=xs~ zYLkq>(fxXL8C78chXn<$D^L)@Jw;+L5*p*lz&{Ah1?~_l#$^8dnN7YNCV+E7KIV7k z2;d<5&^HDEQg-BE7Drz*4tM{>ipp3_@iizwwjPr2y!vn|sL7GceX%9p?=Ykzi~mj@ zneKKNS5SqV5%^RaWq`f+?_h!BUbeIKD*Z=AS}$3QY4Jx$;6J{0Ailyl$dut60JfVm z9ewm`x>tt0AtXfq@N4YID<%~XJMtHk`l-DXRnl5kcv_r-vP>A}Z?UoaR&1~rp_u2n z?GpUqQ9|syqUTS|2ttYo0$xWY+<&W$1+Bl;24^IZ!Jq#oS@+-8iRVD3EI=(_AK{An zzd76W;QoiReP$2>3{dz-%0vI-YJWAiFT~##C-D^BnvuBH_D4DY5AVd2^P97MRyR=i zZ$%S;#>aXFfyNj9D-r|bpJL{Ngq2O1@p04$a4CIE;p~&uQV4Ybcgf2(#D;&r$VWnATcsLqOe0 zdZTJm4Po(VW_@$?r!##wyafU=E1*4>7c4(=x*RsGb7^ouLyG-#IPunsxGCC^DugD7 zZ7eL5O;WK(OIb2$m&~AZBe=Il6FbiJczve-;7JtERA~5eU4lBitj@d&{GzZYI8;F& z{_I#E`&hf3EeLjR);91|I?D|E)c=Q1Qrz{Q7?KsjFe&}g7**4Ff3EA<;EG5)O)?pM zjpov_ZAk*o)cpU?B7}BF`k)zfR2TvkSSf3g0~+^<`xUnB|6P&8yOH}yRjuPl`VVZI zQ%P9oAJ}#?5HVT-5#I;rZPQ%9{`Tl72VUML{Q)_ROWpI$*8GZ#LhJKQI5>0v?85O@ z2b1cHyZ6tLYdysx%P?rK_k)^ryW=_tMmK`YP48)qxvxm}zAtVjHKD1n^UXUnQjm`y zA-0WWMb7XO7>>`KM653Rp>dt?m+QctnbxDV)|hepoZYsWfUkUE>G-@;mF(!x?0}j! zC?*J%Keuwd(3XVM!tjN$Az0!wI=(UP@k$G4UqS_isjx=Wv1||JB~p9AIv9R&rKHS2 zb;AA!`SMFj;fn|GuXlGxg6+zKP{plt@|4=K=fzFu^=gCU1~|0hhJ&`f1E#FZI%@gx zX!%Jp+5J%a(Td+6Ghe)~SIV0#Nz~@rS37*yoAy@pq8xc$x-qP1Bi;L)7A@WT+O|XK zQ90z}2z}vV&WUnf9;CnI(f9&^$&-l7npMu=BcVzw#h=8gsi}>2F=m>DCq)AE^6nx& z2bGZkAaCN~x!}9tyGWo5;D%zO&btLnI_!-{ns6oqykC#^X=5CfBX_5xd8%G*+`k@W zra*QsbYes~b)1XWuQ>S9wYlSqhpKUF9$mf-s!8n{-08WDI$)6p#?R>WvCMJl+TBi% zYMJN=LI9?wbav@fEXT{0Eyq*#A{3F8+}A~|;f3=hLWy1GrPCTo>3*UvoVI><`NIC; zlv-nV`4@=W_5zL@mLE<$odIAT;@(fMf?sBZY!$-x@Vb-A!Ry{{vcq}B@LA4e+wN(} zl@YsleP`VLL(-*go>SBQXTl`)yzCadQ(YxpPUbVq4gc>|6= z6;MSX)(|~}#Z7FD8fZ@S#r59+3CueoKq^_K4G#@D3UV1w8;PVCyy@z?zVHQ;rEY zsE9gJLuFi#Gq0j((k`rsx`?_zpL%kCVUS6OG_#F*I-$Re)@ya7&ggWk(-ZAwV6Y8EjTHukN&>S!al zMv0oT@E7LNxc>K4@Py*Jil0@)_2ZVPmiyY^XH6DQH-FUckw>6UUc_D2IR;{2B-ZEf zhvih@xF(s|uYF76A%`P-=l3%JtBa|-u@VIJIUq| z?N8KB_*-c#?ZM5rAeG(2XCjQvQ0+8<1DUqTT2QUT{TRc#W_axs3h17D%#+u=|4Ee2!ED?QWedNI(B6s8}Ap58yMQpzZemzJKU6HST9UWN+e z#g9_M)yA9UL*(S*I#=dFT?|t`?TozSXc(m?Q|Xn%%FWnj*A?NIpkX(Kh1z_2`f34H z$Rsx(LDQ72syZf-yMAAd24kzSr(cXO+J#C|WPIzBqNsVRON|+3&@snLpyIUopmnWUcW$HSQK*hMf^|)K?QHd7C0p>>zl@IQZXP6%iBAzDO=aBGo zCI>`ZQB9h52U-^>t~=NmhLABAHoIOKm_*VJKS%Je7-Z5_Z)C3J;3AZ)4O^mFbhT!? zl;X!ng%MOJJS)fg=O3ZC?@+gH7s5d#KuY}SYBJ}M(uGm2PiBAg8y6PO$HNm+Y#1CoMvjs@5bmdZW>d%ua88Zeb&3Tp7s((>egF zX4}+W!O4|=2W%6jaVwh7hy@Zd(+EL?nk%0?>270s*IP^&hBGq!)Wm>cwhJDwplQz6 znhEz&*ZcrSMm6hhcYC7*JtTA(gd$K`R#@~JDT@N4 zq7bo90Qv*<0{Jt| zsvr*Wtx|MnhUh!=o@re+=&m0k!Oz-mfUrwANH?A}iuPa+yJQ#zZG~7_6`>7km#b2% zi>l1?6xHp9u7BybQhbhnw7TWn)#qWtc=vdS-i(>*0zEH{W<>l%*9Jork7(RmG_u>a zzl*yuGg%NAk31_$7pX-b*1u(+OifYr|Zv%?{RqS*mSet ze}LoB)#*u=KywuFv_hUCMX?XylfQ3;?Izj)2B@oey$khht!mR};+({o+}a)kO)Uaq z44f?2`MQkj!&hD@(N)G9Fg^%_`E(MwJKQCX@mgjb@m_e` z6%9TbAqpVrK!l3bHaEva1d7-ZbT%N;^%8A8zlnx{UONblg=;9(;?IkPhS;cv$9;HT zs&Kyh4K!Sw4A>}(Sfq6Sv}^Aymp3tUfeo~|>6s}v*j^+;0@3O*1wyaj9GP9CZMZlR z>?s|G>c%10I6o%Q=AnFylSm>ChI9~K19O+tTp_B^Lfl&)TwY3;7mxJ__Z|}$Dasa2 zT6t9A?NaG$BXX?Xfm&j*p-T8TIwtqr$v3L;oThgeK|U^GT*BZz5v^MO+5RqZh5%2Vx`=D@d~iiZTq+&^>aV zN_so9>pUvdj2hES5 zCF7$%%FaV>E0hK#oL&})Bq2o6a#U$TQ`g1}vkl+*+G>}5mhHX6T}ej$e)#pGvS+K2 z*PC<tI~E~N$X)4A?|o8^=v-2WhOl5od*@D7@jfb->&b5;J`FcE7J1NkRC zUj8CFMOa?rVe6FLx~RIZ+6p}^iz>g``JU5E&b47Y&ngu=o*&2fI@rZ753!KGV1s|f z2gr+!@Usebc`$#D7(lDRyR^t3ke`ZCJ}^tZGe*phXPI3vKDWgX3I`)Z1PL95wf>t z_FauRzARvuF(&BaCCapAGhehdVFnuW{n>{vQsh77m0&fnOPV!Rh95sq>1^NaJ~lXq zpSSKocORTR#x!Y&QYr+>Tj(KxhuA6=kx-O~y(1FBHWOI-BHIO2Vq|K%CZ)&e=LI4^ z<{_P3=!dgg6&%vjnQ;V78YV~jZBB-%N1FmWHE+NHq>^xz_x$+KQ9_`3UVGZAK)7`I zX5e$CyD6^ z6u1Z_XF36D35>;fd9twTg!tw8J4+%R0jbEyr9BRsI>$|1!)ibsQ7}R^k#$Es+%LJ} zMa8^J9UcYJ*;G^FD=$~NE`n}3`~8YpcOr(Glu8}=asYKpA1>@9YlWB(9-|{q#U8M&B=z=db|`+q!-c;|fI% z;tcdZtI)#rTeT{#=mQ=9u_*@3u*@sByN=O1n8c5nl<;(0*f+ryZen?58Jp=hwj}K+ zutKs8&t$zgbGIMg%2B&iGU)I@;)wePhbT zhP4jFIb`kJ7x@JY_mfajd0p$57+g>2)S;7cpC+2a-7^{E4%Q}p)!>TqRF^pEHfuD& zz9Fq7aAg8J#;iF0 zSg~K?2CB$na)UTfpQr^x(t36kv6ioqn>66$8a2p*V#xZ@-U6D+?U%r8Ss5h8bmvRn zVE2nvg1jj@*xV2)6g4B*t-MBl(*jDqW}A?tD@Q)$;6J6dB(3BCgx$!eU%H*~gS~wh zpbcEY{`!jN`}_`RANyuv$b+N6H1NjA2$S^F#@*wc?4kp$7*cQfzgPfwTGCeNzz}_5 z&rF{S4=Fu17d-fC5%rNDi)x3_$W>Zj-5C>xE|I*pn@CMqztK1WNhm}oE0i8mP#~z0 z%FAcD&yI%G*tLS1dvvEiT!|3OxnS;j;j`pygZB6QgMbD3IS@?d3XV9u;(;Rog~47&QwF{#b&@n}`Kd36K~JuC;B5$B(?;?EvCn_4Bq zRk(&~OB2JHWfwQZxi^sLdD~B(ug?{BXn^A?*q&*;;WUcp=U4ZOXG-=o+4rh@p0#v{ z4%&)?j*@3owaBSxqC;O;P`1a_H9)l8-R%a}v}-PDQY?+5Acrn@f~be)Vo*)piN|i(@@?=wDTFJcHMJ}s zk2G)E2dUl0w;eMyWH>cgm@2PjDHK()@x8)2-B?-2Ts+JO_X!p6cZuqa3JAT!1Xc8# z0v%(uihkycu|_3jL<_ig+$~-e?2+%H+(p*AM+6Bsk(E?Au2W4VQkqx2l11g}MP0Vm ztqM!>nI;D%YjC{M`5UOF@-$$iXd3Fd!sOa(PL>^h?7KRYCQq2R9c7$sYIq`(#Toj3 zrWiN7-9c?ObTknE_3&hpvS}M_B4UH&GnLEJ(Oz0 zgzKyJ>=~gYuR0dmlgfRx$v0y|5DQj6+2vVY|H#BDUq!R1tw0KuXqPMH_oYBXCm9Ba zP&(NVl_P7-_-MIhDom{=jY{W(pCuTEyC%i2=ZJPK98c~6)O#n(^CQFxq&MOC97J<# zS{>M8itQM&JEu}qr+sInRg>gM&tGL+WF4H=+-8@^HnYM|TWKPqhg&WsykjbBCQ`pA z^EKPANIN{Xp7Db1YA)GllysY4(svL&Zt&=gOX?k~Dc>N7F!U6zW_ynn%={kfujc)t z%jkwoiCbb6+#hzHaThd78QtUw=HYz=br1sBOD@ezwgALM1S>x1HYCVFb?}zsCVB5ny)-LHmfmB z^hEeux{yU+M1(y{cR?Gx*a6`t^(yGMAD2(I1-S*Rn*iIxY=ya#J{I2;AKk`SG;BB7=fs#C zHdyw<@@((=W71uc`n05KH7xlsV!|J#_>s=ee2gaWHWflKeFz{N#x^Gg#Tw)kMEtAq zfeMy)c0VuFAAn*5)g}0cPkOAMNW@K&pqF+)r2!?^pNdaTDQQrSbz4~+eN=(h5C%ap$VXX=_G$TP#Jc}WX za+)Z%;BT4Rz<+yh+8=lGjz}%=OWpQNJb4{%EhExHeC? zdpC7P(zL>ke8nhH6d-QM&kpq->8~dC0{q~+1e5TlCDAvaQ3|31qJB%7j_2}uxgQJV z2*Znkz9{~b7^@rMuf`a`eESrv^(g4bVkfEQ*XN)p{BW!lb}4e-E^W{`iP$}o!$%f8 zV==$X8yLwX;b}=(d2o~>q&URik~ZlpOFkV3+lH!(af21x7x*hz+~TPRFrtsh=A@8n zJ&6AQN}5~Gtpn6QSy>sgzYpp%kCSpFL^U35$1_z6E+l1%8 z06)_`KYDa$N`u=pO9>O)fmxz*On@EIg>>e-RB0a36RZcl?b`KE{F6&NZf%3~7ma%Ct-3QF21z z3~hIn9)mFAaK*77WY!9NhzIEz`NZzty>M9H*#}m^h)z2j>+}6yxpN}$>^(@~Ko#nF zuT(hW7z@>tBB5m9h>p{R+!JB8j@Mc7H=P#A2z9T+d`#|~dw-gY>O<{WiWXWX288R| z^R4{2IxMdqFo-sN=hhnE@6%9IbttYwVU)}7HhQ{YXE+EvHx4P9yo_#hU|YzB1Y|;p zC(FMcJbr`w?!{3vavYM7(Xh{IG@T1=p~9|^C3`*WKH?OJGXNs7ZW09^hSGswrZF3^ zPT*!X^*i>6H8An!!o8K?(zIggAJ8>Zt6MXWdqhtoQhg3{xab(;*c~{JcFo-L!n%Pt zK#VI@0yR1m2W*jq_vos19`_EdA!9NY8y9;C4r z&M-M?@Lmd^XLe3aaQEX&sStN!vfWhb!yPR& zPty*XlejN;VFt>Zs&4r@$>8oCr!Lh6-UeDg}9~#zec){A-E85r_BB+(SteeCFJATTQ(i|H394z?puhW z{4YKhyq^u~(_0=DHJm`C*Wd46xV5(*Z@izKrbu>BrqHIRHy=se8^TnLH;0X&(r1;3 zE`cK5SrD1>qS3#@L88IxY6J#?x1+8Z+QJEzsU<9f^OnowhZb=_g32$VF|v%1jz^`KUxKW3_R2cp^3D##iB+NMt6XmOHHuBf?r$8-I&al@QKu8GYMQ2aAeu zYc^-BzJM;FH7c`lK>W3rF3(I9Py2lA=ygADtx*t1hbz;%)HHw}BSn;%fCHn;D$%5F zP;&pg@8|c#3BjptxHJL_StaQEM3^93QbyEjGcfGUee$q#w&un#U>(}6RoPniI68`f z<*#@;xk>EI1uqq@b^SezT9R^()l&H@GhC zJghw*F*;m-e32>GNDWx9ayh#x&Mn)q?X=^KN>nOvK5%B3!*3qk$%{g8v(kzz$h z+!n7d0fKV6KWTT>KH(^&ffh9dqY;uBZ27ES)TYYNr^F}$2=8+s+Ig=%&SmpG&hjQ> zDSDW(`I6x;T#PX72W`Dl=Ew zT^GJWsOaq|?dp*7Ighq)!C<+!4z<+UJ4KVt>B-1p;;h|wi}^dCJ5L&%QnIE;TKy{U zyOWrEFbxfIRX81^x>xsl4yv?*@r+A&Ckcaro)4C9#6DTw8?w^8&#(5x+C~6PZGBLA zAfm>JrG}MThAXR#8cjh>K`lm4{rR07R%FaNhp>|CaEZRG5_}PrsJSAVV*I8Gn!Jw6 zwn%%mbHL!aOFStR#SrV+AtXwQRgj0AOY+=$}3o;*bkBy+i1 ztW($6M8 zKlPdVrh1lVPX|e`v}?grcJ)W0UIZefvLB|=9!!-zJ6f}}Ikglw&>^XuRo5=ITs0T= z5W-&=CCu+-)Z%#YehJ?t=^2G^MpRMhOvu{PUqt>1*l5WEn^AJyQ#FwAHuC^cw zV8;?<&?=>{J=<2!j~!JO$$y~ z<%%U*TL|`66s76>k3fks1yuaP|BKIj?SEeNMH_lXqSfyP@H;P48pGz&g!tZ(%wE&2y3HY@!VUxmHX;N zEb>^}{0+6JdEep)lYH3ZNyW1V6HfZcak##%R6oKFJc16(%5v~JM~DTgIsr=&fO;W; zj8)6kz83C1Ddhv|UdC-e-84Oj_|+kg=)Lk*z4{RgrRxu3Ej*zShW6 zTAy<-O*GjE-&KAXQiI?yX@W_PPskbmEdzDRn#q!I!`Tj{ZgNX{9NVw<$t~k*J*@jQ z|7g?*f970e=Y|2Jv5W8BjnX6egV@WtLM(_FsOotN2>U%-lj`w_l;><*qN{X)K-ZTg z{vGEw0iGle?w1T$lP1L}7Oa3#j7Ft>n()~!#AB~U^*|48)l5W@u!$7P3Qp3P@hxqa z7S%(khuU&QaEKQf`LZbCku!4_k7D%@rLptNz!J+~6AwQX) z9}r5F)+nXHgL)AO!n=RDKP<&2}N;ic3**ett^r(4@$ z@5=Rl~LvN zPQwPOQK`-SLy$^A!)7fSD{Y3FBV}ojd1-fRMc8e{@VThb_puf0mqrVuXqNUbnue*< zQU;dF)2S>^HQn&3vn^0z$P+iJE{3M(T-2uX*@h+?UOG5y|M^?NBlQfu-eOumEX0_8CryqBf z+JrmA01;sASdjhmj9x!4_T9O!-UQoHpU|H-x?BRbZyeEuc8w9eu$*^1ZCmGtPgFXH z)!qYykD!3=aL^5MQtW?YzL-kwx281*B0WDa|7s?nA?oTIrmQ_PzJD_g+@>^{0WW1S`g(;|=sR zn}chhVqXq3)k?iSJ{!J!WoY0o)1t%t_w|4MAMEs1?zJ|UCE`8wRT@70zCw}`$s)#9 zjAXLE(MxqU5_=2?dwp{=3oC{Ebsc}bEADs(@XGX0SXp#Dqc-Rxiy@1}z>676Z8n<# z^8X?zH1E)*?C%#jVy0#x3Buds&|&W>q>eGmK4e&IkdQknuQ{Fmu)*-=tGNV|c~ot( zN#XpUdR~0r4#Arsc&kE4dvFm*aGk`wJb%XEy(k+clnE~dZc7d77;!bcAd{dI*rGHf zazLA~N>NrfGOCmiHz4LkMQd*TWr+V^3S9KgLAX`{OD56<=m9diUYCLmfQB8Q#OC0k(?m? z)CtsArS$kBe2L`Cng?L)`%rMieK=xrILR?hf$_di$^@op6sHd^WgIW|vfGycu^PIK z7_6X@4cXk)#mA-!f{|aqp=76)jni90Oq4@DbJtHM8%B*(WKG_zx|*Ms9=sCWPA^Nff`c6@hp&mOQ4lsVS) zS_pdBbFl3xo)O}~gDM~u*>Hq^T(svGA@w_q#qQuvIaYhyF}gP!6vFzA*XSMTEu!9n zj3O6Zp%78FooEUHVaf|IWOnJ2-U#n?8JY^5&bX0{Hi(W?+WicUwX$hIEp{D@{Fq2nWS>gV9-$6cvI!Vu!pl{Ki=l&M7} zU%@EOV#p4MdT;ECjRGU1;=cI3ohK4Vk?`Qpy+bduy4tgL)Ag1$X z!{heiZUUtBjpubgXabt$8n$A`GyJVgqH@dKG8v-B=+GoJeRAm2k&PH_uD9(41m9PJ zZCRSVNv^ye^g0&TYd0vRcc$k;^e1#PKnlSj()E+S`mZ$;qV?2W{VKAGv=^Pi+4yE3 z5WUIvz1Pcs7LQ|$58zlbKsgw}GtXLs^-Yhr``R|4!FR4KR6anrj9OQ~ zo6qCq!SXJi;`ay5K%Dwj0Pg^7W5K%`_5Ai<1!2ot)>A%zi0|LzlZd>=(?}#PF0+UT zLTKU1V7MX~>WOslItj2P0);H4ZWu^8{irK#kM_CiVJnJ<(AV?F^G?l~fGt*Pbm6|g zaU5e(Nt0su1=^z!sUi|;n@Hd?P#a3f7)9@%S5e-fHUT?l^7ctRa#rX_MwK7Xm^=O{ zaW3`*SkHJMaZBM`{0ZtzU^`jLg}XR!H_E}}L>_nDIZ{&tov?IVFm5fLrv1^uSKrZz z2d+y;x+uQ9oo5sYq;QZQAYD2wk+>cxI>x8~IrBLJC&4@+lFccQMsY8CV%aK;9XC}d zet|Q)HXBu(6H^nNStErSjx4MV@#BD&Wt?~u&bvbM-a!MF^sD-tpciBW#=r_bUXqqh zN%=27iO)VIHx(Ftr0%p)jR}t=X^akYEuzLn{;{Cwp~p5(mY{(=8I~tTRgm6mOkGBf zVrKM#YxTD|H2rE0Av0QVYa*`os@J-LR3_IaF`~yhGjLUyzD@Egn~l;Y)=<3jJ#7=? z(B#HW5u7yQ%J?quOC1vGRYe(3efW@9%vl?HVTOap9qU<)mJp=eZYpT5tUWGO#&(PK z;J|FqC4{*X*MXI2KPQ4|imFIF2Hc>2n4ifzg4kS>uKTu%1*K`Qnc3gT~VVwa}dF;sT(tl(#L_sTmDt?9&%@WAL9I~Yx zzQ_0Nalm2;`DD9XMiSY#pr-$qF;w%*7)r+uXTFK9i)Svc_#a^?^5L349_yjR4&Y64 z*a;gt4E+jaKeWp|%|T#{Z>=lm2S&zS!B5>*@rY)F(0F%112s20ZV83RLeT~WiBwG2 zp40O5T-L9V&4W|cPcC_}`woT36up;RsC5=!8B%!D6Yhco2`tzN^f5+w zX2H&3Z%^Sn-XBx^_HKadS72@Ax*k0aRHkSL|1V{VNzj!`-uNB2;ig7e0~;TdXzN4X zr`g8Kq>vz?MJ61-V4Gi=*Q^geUAkbih&t`-^#`*)M^Xmou)sJ%Ap1uHI*k}3#&|zB z!IALmwPlFg^b3u*sGt46B5Q`G|0}Yl8UGVmGvI9|#hi9uv3;LfxqjdOF6A;~eaQYtw8QnNmIeAO3?;hQg| zm)GMIF{Y;1OIj|4jEVI^*V(L{t$1k;^~|rKwf&bVe@;zT$pQkWgA6>uM z-@3=k&ZZQ>pcsk)?}Zd!0{8;6wf%!ih)k>xKL@jV$$M0;1rG3*)jzZtA4I&vn5t|~ z{IXN24rw5%(^3BkH*R6+;e^nY{$1Q4Cv&}?OnIS^ge9*qM`JiL@;p*`n$<*h_MHWH zgmNxZ`eo{S7gfcgG_%Uuq_+dv*_k#4iR&xL*&E{*3*YJ<2xq9KE~|-P-3fpQ5F!P* z7&m_CfJC|Ad%wGcH1)Hj-#@1i(!n7UUS}(P?Dt`y_rkI; zD57_F3BSV(UcEhj>B=&E3wxPn{3@}B-LZ~aYG=chgxz5^OO9{AU$UDBm^>eucB3V0 z%alU)4=241yQJ2lfcv(=Fo_ui1L6%QNL7`-?={#q{T++z#TRbuUH8k`qG0;27pR?> z6aS=Q$$AT{`%VwjE|DIEdP+~v&Vx+Jbm&&S?&o-;kK_YV-;9yRxOFwC&OhV}f8tCx z=vbTAg%*rRq3}`wS{w>qoTu({#z>*u?dBz(v+o)1K{)ag;CTsqQV2E6+rQUW-y&mt zg^z``C$Ik6kaHxKwqR>|Pqo)0Mbr3JlPTWu9HNax zhNU9tU8*wG&b(O?`mqqKR|J0+X3Gp&t;091f(P+B*T02JMn?mADtl!VY!ugAP*?@N2 zR#h23?s;`DeseBZmT}iyUS9S%(Tk>~yq77Oje)MvX(Kb#z!ys>I|N&R8GVVQC1_DC z4B=NHiic@Dq&P-wFb^~p#E+tIwjI4rXgB?2w%{1wC%u~XMc)GjvGPtm)(cxhgMzxN z%P75_mJ&EwVJx0a-`P4_?vft+_6Zl9-awquZV1z0yI5HJ15WRl%l2pbw7@J8-0T#r z7$QBZCEgTI&Njd7wwq{!LBGDE`dIR#TtTdTm8V_X3vZ;M_lT7u2PJ}3Po9*9k?U#3 zms44o1G!>LJ;lGW7IuAHRv1@!|l`)vR+oCuT9_cROrirVq zs8=s`B4h7=nHVwFF3u?jv+a)<_+$^lrJ_Zu>&H71a+|XPaWm8o;i=72R&Hf2yJF zNO)nzy18f)Riy1kLhO8mJ6M!v3Ra%S)o*z0=l02>Z!GiF9;StPGE2T#&f23jH`Gcf z7jvFSZ(mw-x+t=5z;rw4lpF?j`0NK6IucdL86)eLx5$qy%`;P71vOQSx(wjsR?+C5 zl)EkknKx~_<1Qp38xbl5&&Xj>!`o8muIMmuH_5gQJxnbyxF=*3+JHk~zpqk{aI^qy z9bY!(oHD6r!XDPD=zzbBa7-*6j;0l~UI%Y6=FRHB`sO9nS~$+LBL!@V+tx@aw`lwK zKP3$~uIGJNl-NL^!~Ne<$%G}6)&w?$Oj|H7`^}BwM3zr9`%ubkrHJxJ_c(FZNn1(F zU7xW~g>e7J%#^655s3|eC4CU9EOj6DKeSDc@cT-un~Pl{pq;Mi9eC3ra;d?T9zdl0 z+fAKdK>>ewYZ*sWuTB;=Us!T)(`DH8nD_=bG2MXPOwS^8wlDru=y$akqP$*MFd zvyfd_LF6AiU3c|RqT;D6^D+=Lj7tAuh$L80GFvrk-niGrGkuQrj?VF>V%Dm{Sc3k; zfmF!|FpH_22HHl?wU%vFk4fyHg3BEaqo*5_8T1Dyk2$l4;B0CUMclklT|L>D>A*iY zwpWb!;oWp*KL-aw%u9g9$CH8*|0B!5@k8{xd?5Os0>-|2QF}FMjQ&Sb#g|KO8vq3q{(pzX~CSNPTL#8UaY`0FnQJ z5({7*`0%=Z1HQrRm761~2GNx@wn5 zo>>r=8}Nt2`INE~R|5pr1fZ!QAuUGqk6cy#eBdo{M>sBRP5NL*QY%DSkNAfvQmt%Y zyTIeuS)Wf*L21HOVk8pwvYKKff5=xgC|w|eGj>s;)ef`C#1X|1`2$bawaJ+PN3Hkq zi;;m6?UtlYrB={+;2#|2{BwWI>taPjjubX7E8RMSjcyL=LPR*wq$AXX2-#(^r784H zD$W_Zu-&@XV50_jjB|qUr zQpx5ekWe5Nr$_(`h~ui(eSOa{SM9V(jlEO$n3jc$9f@u0>jrOjy?{lF> zJR)UlFMmAZAEv?~eQu)oQh&_J?8c#SI*acL|ABiA=yu#Ncm`t&RuvKzL8>7AWBSPa zku6B@^@kqoPy&U*1ph+W{oSSp;)>SdxiQWUEddMU?|o7PjOPov;e$BgI0*0oA{D~! z`}g62)63;!&oEPWeL^yn4`fG+uV8%hYk3{p;MpW$G)jyugR?gox@1qqWkN% z1Bs7)F-Nc#$GwVzWlYUzL7uATpmi+3zB-7pvl*e`SP2~@P9n8hAxRcCw)3LeOnZ8v zcr6Ytt_B%*CXmm@JwqvJl2JZ-yzD1nx-LYDgr3%mRHpxt1Hv?OcKZx5Ko7qVB^lY^aqajKC~GGh zwV46ab^2f%=0j;oa+uKy@!`1r%++ly$uN$tAdGK-W4!J+pWk{Q(9~kpPM|4@?L5mF3Op7zpdc78kJtGnZqvIH%ls0z_1fyb)7+st7Qq~N9BmpV z#c<7CeHoJL^r|#FDM3q#M^_}$1PK$&so$e8nMBbZPkI7 z+y4Kod7HL=>Kpo%z?v2tAOOC*<~wr zC6)=g^~JtNOfyR^)=t`4jtffGx+WPW;T}Td2$_7frtu_!31_#g!VL{6=+6b;-?K=J zKtVJl!%g;@sDC@$cBe|Uv2BDv)$#y0-!Hy;quyQct>tQmA06RQ9TiGuLt&w1aHoFd zynDh4F>DCQdg($vf{E!i`;)AQe=Az;gh%hja^T%F`6KCnYRhP2J&t=}>pCk?Rsm_8;A3|3O6q(Hm_z2pcds?z zeC%Lm?F!7-5-|9V8hCrnR(#WG>W8i{*+safqH1#$$iF@{NWtNqS_nxL7&fzD?P`k( z?5XuO?&6nc;Z^2CkwGL4M~3dOB68a&koHVxdP#SV=}|YIO+AC6L0a;0{jPU~Q?^G9 z#tP{l>;$y}W*h_PBD@#TG_7+mW8|-4aDM#1nGrb|p?O`)7=E_JZ3*v%Z zUVpNa$cp*Y<@WMp(KUwyUQSZwvZr=9Wpr-2M9dx5CpV5VEL<;7`1?CC7Hrk(^P=Pk z97SYQztE%0O(rt3c9hDHukR(E*8$n3guR}Qh7e~L`|S*hs!g3;2dj^)9+b=Nb4bPu zb$FzeANY*Wrp=`SA9rd%u+(x@r5N*Aw4BB73p#uTb)m)rYq^ByUk>c5waZ(`S(iGFu zLYHXLc3MGA1V~>$%@%^g+L1=vX`@9vR+7fZ^4%%p`pYHw*E2e7R{3o%xtHeBr>i@X zJMy#}MhedfFjLdrz@bTKk(D`zb?3CRYBFWY?;W3<=PF_h`|O;O^-Oys)ap~`fgxZ4IQ=zrTB3scq|j5^_5;JF z{n-)(k?RLz-xcZAC|Bkqy_7-lgY!4;$zeect?A;AtQUJQV&t+54*60tbFPoO_a01X zj8YBp%sP7BNj0<&?WgBX&CAl#vH;F}1)TX2aWsKo(L+?>19h&?MqngpB=aK>s9Y3~ zd>#U|dPYp3fiR^(r9r7^u>)w$GO(ri;jx_(WZSvS;BpXd-{p*?aZx~HVSaPN-K)gA z7-J{;QxENQ8an`w6_J1+tCpSG$3n@R zR@cx3#`q186D=d#nroIV43>n7);JYr?R9@z0UZR#1mu96`Rbvrn45A$<Uag(iEIIXp5%#>zx- z2zVfZ-(xbke**x!LW@lXRKLtX_M^gdP4bOiD-f3WIsa}2HU3Vz@Jh~TJY~3SHUU4O zR(>oZkKVU;fuZH(Gr%s)Adr{}0^0v*0}bEmEjd^3#=iM$a?ZU(2kxH>2_}R=Lw^Pr z>A*N0PgTvxE!3bjiLnY$K>=Tj$A1?PZ!>_cphQwm1cWaDM#iKq2_?}_Rl3zg-Zr1E zXgeM`GgpsSSei?HzZNx74m0a+Cq0);Ldi5ONLZnQzzfpGp#0uLx*l4N~7q*33!3!q@FI zhqcm^Tz~@UMIn4N7WmZFA#q#rJf)pr69jW?t*~&}yG|1T+3M_EyT)0+ZNt=9cSDUp;Fcl*nyUrnf%SUy=?;h2iBg61gu z01_~KWVc=ev=rAc8%!~eRtL@&@us<56g00@R+R5m|D_G}b3*y!&Ud^$#K)b^y(#R$ zQ#UYuvtroGMLqYd4B=QfXtzDtjM#rRs~PG4vK2ty|M>4VtB^55(7SrtBzC8czBt2= zJcd*6>IE7GJS$1~{~w*GPgV#@tBpC{7cXnJ(b>E>*SWkKySH1R_5iQ$d85f+Eva3P z#9nOFk2;-?mqu9Rf;d+%zB;=U8ej@hgzT{5)S36P@doN|qBc>CsLRYC5KhX+CJwz5 zn@BPSSSuLJueog0{TJgFs=uE}6guDdJPhf>>F$DzrIINH7bRL$q{4r&#z&>>8!mcR zzgBI!{N#aM)CN+iiKeB3OYPEWK!Kk^&)2T6T*#IXRVVUx)9NlAxB8=s&Z*6a{Jm%D z<>O|K{{zi)g7?ebwALf0?>WIVr{hqQLe{LHcpbd7Wv)JZvIg$358A z-Fb#Du!1h*C8KuaTuSJcqcqhx`;YJ58@0tw@l2M4SV_Dpquw2OEtKoN>l}D3oU6Z! z`BPA0P&*4U5t%WWzVY@CRbV+bL%L;F zh6aDY1=_5ysw<(ek?)1`s8t@Zx5Qo6LTRBz%gN4rAk1JpPI zAkPT1{d>qquW*WZe3Xj$g<#C8rKgq|uOa=j4KR;P@um#BeS`I2qm!5EAhP;1d-JQd zAe&i3?;rr=*&_49tE-`yb4d>AlNbfQV`(FsvF#UrTS%08+ouV@ zr>v1AL)g$!7mE^N)MYl92ZOy(;9PkY95t=TcR8OIxLG+jA90-wgr5!af8c@NW|D0A z?j)~fIRx%*&-)6qHNTvPCm$tZc^!Kx5%4x2x zP|j7#j?obQm^_ItSw9H^fxq;@iGGP18#LXlT7Mu5#yp<%kS`1B#Cns>KW2$K8NWsL zE41P0mg-K_Cw}vi8L+kCKYUMB&x@p81rtH{hj&H8uqK=;+AkV_G3eb=eimM!`R+fi zQ?6|Bn-zwJB$2(MJWq5o!;mEFj+;8f!Vg@??cm-GVl?xdzi}d^U6Zm%CHkp|)-o;M z*+)I4KTOqhNRc1)N_KSymYk~V-W>hsMAm|nE)x$eZ9YW9Cl^=lH9?78(Ybo6cVp(t zQUM8xt?@AC$mTyFI>)*gpz>!~@|$)CaYSrIZJs}xsbJ?XHwuQDr)!bJ?5NoYyEn-C zQ<-W6Ce<`ygxMp(#P)bsLBe*^o%M6x?roQIOU+ER9>Hof=$*|j51Fr1i6=I}^%eax zQ#SkD|3}ECn~sBj^Tvys&QdQh(Q4mulpA=?rOV$25i87rSwYuP){qc;B5SA)CdZIY zm!mv~z3?d^s81v*xbqqa{GviV0lVh>+;Qh^V~S0_eN;X$JV%YS6Exa4BOF^%qBa{K z&Kz8@cz0y^iM}kZ(2noNg$T5J;>7uO8|Gku4FmT~xyRD>XnbNCP{Fp<<6>UnuTIr{`r{WekNzwQCI5>aFxr%P0b1@6}{ z5z=xmQZbN|4y0s;*dIn;egJObpeX(-$29%~Pbd_ah=N{~+r}iP)wG^#3v&N@mIWS% z61fj45n5UQ=P#T83#c0)UXAZoa;@+8Z9eyZ>rijrNhu|^>^e1l0U zdVl551-*JB4z?YMp4)eo&E>Hw%{GL)bi*T6kkNZf(WZqzglM6Aibdw(8o^5Js=jnH z4G*(2>?F<1Fb^f3QYs!`1KJDh z0=^%(ptHERzVIyAF7HU6M_VLH^J7t)G#kAb-LqOVri0MUo`nrH^XFPh{P@>qAr7m4 z6wnQF2x8XWEpf}7iovZA0-VC%e&Wc8zplcxKk~?Ho^O&X??L2a1c=&_A(L!pE1FaF zQNm|wS||Zbm#{~17(&T__<0O?$HK+jloOsg9{pVgCn{* zpv_WTYzs$v0+8&yz3qNj8B@$^fDme5zG`@6e^+E~>042vUJ>HBRyg)5vv^m&$}A)! z2uS-z^Jbn}Z;Prh8ta%sQPT8*$@3nVMQ7-o#*O4IVcU3S($VbMB)zOJ5U#61B~+CEj_}5(D5S zBWEWJlYdoy)hhOKp!=z`G22Yb&1$fsJqI=om`fTp;ScoQ3b#ULmJE)D?9)TCVUFd? z(5JVk;b5hiy$96k%!ar|%*e4!N2T))U_rWeFlN3uKHfd)XZpU}SbW8rbOZx08iT3f zwQ_$g?%8)I76V6mMX0(0pa+{dCLCA3k2H<9wg#;*b-Dy?HPNfYG4?v+JscUamGNpj zKJ9{rw|7*pHCHq}%BkvjQv3cY*@2x}XuIO{uDq7)el!(NhaHgbgRk!U8!m~RQD9E9 zFRsswVLcW(VVlM~O%uX9LV8?q+zEu4wm@6tUCt3EK6hPGI0o^sZhSkKjGUoD5DZ;E z?k$8CZTkPI*=hb~%`Tsb4sz_sG0g%bJI9ZCD=qGNJnC90uZL@n(U#Q_JHc zVovkJTy7_xiUC9u6(bd6M_dYjvVv;6%UUC1@HhHvo07cx%-H(E56apIWpojFI{~8( zkE4BuP@^masTBN${GM1O!DJGrzgH8?I~vrJ9zsCcS&L&`W#rCwtvEFvwY@m_vbPflfr zW#KR+_e%l&hS|gLF9A`xuZD?)#b+5030QoYKWZxwW|RhZlk}|ecz!^;E3$ng!4mZm z{sXs_Pgzbv(f*am@l@A`7Rx32%yHJW-(9$2+eG<|ZE&Re<2fzWd4xp*sMOu zT`|I$$l8ApB&z*%b*ZcMqhv?gq3g_O6gm^$8o%tVe=iyt`Y)2^5Q^u6-+Szfitm?xgsvW&9n_1g&H!-oX<$WQljc>+?wdf^yU*8a32kM47d#Xk{^vL#!(a zKTx5}jqA-yX3ARQ_ed2W8U2Mo)ZjGRMmPiV38{)>Y;=t=eY1RjAuk*QOIMifFYZj~ zTB2V`SPD+SHQ-NtNdR-&I?%L(C_(6d$pkEOq16Y9i+Y;JE2d`7a!@b_;hLfRBc2XD zWgSBvx%fx$xF=$!SD$wFf^bBx78U|AnV^K*E;fYLtvAF!tJ+3tu~gQs>0{R0$d3KlGX8^T*dZC~ za;i+EQ^0S^8XMF{JeV~}%dBA)ZwPtsqTH!~!z?14S7Q}^!{owJfa)gP(wktqqT~MQ zF#wyUY6tVZ{VDVv_&hMy%dBVx!>J6?0Amn=G0I~~ zD;7x7ByjL1S9EqK$pMAaLHq54HQ&zVss>>f;GDIYWTf(J41_5k;G8vb^vwY3KiPIx z8DtGE9)JTYW0P7ujxv|WuR&`IEC!D!pF7}L%R@uWA`<#$q=C(Y%x`w4@eej)`-H$NOjvuFe%92B zC!$1Uzjldjr36b1+qW;fTGrUZi+pyTlZ3Pc_ zfuiEenUAYZOoB%qL#98NKENtSid&9NeFC@tp{$2M&7eYqhKZI^fQhN2tFxZC?1Pph zNk#)Jz89MxPcJR3EUdiru@vv*b?3oJQB)}dWg&y9T8d~n94Fov$S-?``WWh;09&CV zl>}?alGJoi!F#cNB*8+)!p7Vl#>TjZqi%`tL&UIS1sE8fhuB_AMRE)17-zZztvh?z zVQ-GW*#ud2iy$UFHrq3Wyi+rK#3ORz&h6q&A~uXwA2S>F$fyOeB?5i^c3N2~{HTX- zTX)L5sTUEmpUOZ8;xm-RzJ05QCQ9tX}j)hj9&kCq+ zSH=XigA0EN$<59Gg@A}~)u$5ze!Kd+$eGQhhK3_Iux>jZ0ojnvr$PJFXWL?DPxWPH zniGV?1(uI8k-u1RDOz(Dm}U;k6pr(39cIpF5{M)TedTnw{kC%X=V>W)q6%~gk1KJJ zoJ!(fW@V_+H3&t`ZcsC~sz;+4;~5{&wKJbrgNGe#l+FH9;W`P`P!~RW-y(8r)`DPr z$r9<9(-EspZFh=lj`7NYz~Y2AN6iPWlQuYSRf*j0yx-tz^Ph}R*_bRh*rW3gVNdCo zmKvj|qy3@LgFb>~h-v4J;Y~7Xp-PC8W)h(AuMY1CQT#QIWdhXP_ubKFl<|2A~lCZ<=9KB6B_+upzP6%+0W4ev-jp~*50vjhaY)|;Ry0Zh%7WU&h9JOV9s;a!w#@`&)RWIqS=(wO! z*F(oG8`?!XW2)E`iIj=|Vt{UmU0N)3hAR_f&3_Qaq%NM<8V|^-sS~C88cBm3{s2YB z!~ymb%db;DOEgR5Z!QaL_9esjZ>aj3p^?84#a%y}SSG5R0qou|xi-!7cbh1U3bg5S-B8obIM)jfOSLkNXjbNgH;0 zCea@K&2WXm!@7$kY4m15*$0$Be}aTbwA%v*y3uh+}u6T zs%0mPtAc)c__#6ZU+}|?W$9};e?r61fzCyL_-^-q@-O+r-nfTm!z+cKjZ0+MsNb^ z#Nju2DrCuCjwEWC*D$R;pQfd2neXG@;Rffw;@_h^L1c%-1;B$qh~Bl9RN>N;j0*=J zrn2C7B`zR9rywebRUW2ta9B)!-rL41=9hJ80PggC`bM|U@0#17;&4dkguw%s72MIT zV_Ai?O|{RDNZgouyBa)=6W+=cgdqZ#H}LtOJ$wqBYITF@vJEcy(vCdOPKk>OPjAGT zHAfE5I`Bu=F;%g^>ob8Aow$Frh-6+t$uTuWf^qBB5e90mh`nK6`v=?W;O7wS5q+s# z32$O4A~GbD+bHtd3m@C{%TX}59tR=ce!gvn!Wp=E{ZKX$9O93$gF}Tgwem%Etp;Xi zxbfYCt2+p4%8rp$-MJA;;-w^NKYoal%C%3J{WxJNb1yhuOqE>?W}peq#5*K$LT!Y)Nhf#pj4 zaor>Uc@|(51iTD{RdBgUULL0t>w#syLu5M$i8BCyBbr3yQGj_6i$J;uX`z?Sw~1%` z!B3{q_L%ij#d!4q?I1c44C2U`;e5_jKJLW!Gv~+VO@?lcZRf0ZDsx#bb$LwaoFUD~ zezUxa4o3W^G2Lj-B{J%-S-Lo^#`7o6Lph8u!}oJGB?-nHQh|z26?|G)yK4e#-hu|- zY8+|DUMJtvMm5H>PTZOtbamWK4zWqiuH@!C3n0{&axy%!4c8mwrpmm_PzIMgF>vSn z1S75eAnWRAcIgaJ}ifPFwuG8`MzUBjm^+$JJ?4+j`#BC{rNy*rvVN%F~4rF#nk(xrr?OaM)|XW zb1rro1yMo@z4EXjKJ$15q(SmJb!oar84-L>8?hD1sCjm7fTi@@_I%Q6H^#uXemf0i zGz-&TJ9t`vJ9wTdj)n6S*ZQ$P%u!wXHT3r_xpQG8^^i*7)fb4lyE|zqh@beX;QX2e6~J`kF0Fu zyNg>(VetTM0x`-Lzz6Nr2krWcNLTY@%(Elp@=muF;LuU>F_Z+sd$|SgI9NmA#MgK; z%bnVm@#v?tYyC&Ivu0Is3;OCP*Fjm*kLrUmU3S|!F(?P}9tm#*F+YR|xv98to*1XM z5MpMNg*(2-s2};n;7L$jRX1tvp;=+(JF=eGJUz;xvnGSMOnsnI610(>h`DGYaYj(v+rw)DOUh&}ZswY$N zikP2^FcWd|rSC4n9efh{fROb7XshF6kT~>KsE9CTqA@=IokP+!kkj$x(j0voOhfF0 zunqkq2knQ=eo*tMr-;pwzHQGGHaE6Bm`_EP+Nw2UlU?*my8A{#$`;Kps>~nF=B-T_07&iB+BFO5Zz%D4=m*g@bZuxP(typb zX&!4{0-fURW>bx3(h)u0_l`6B$h>GsGVhbFS3tKsaM*@~1Me~rqGp#V6b5Ldc&rOY zwPRNcnx$K^V}Y|oPd+AJaerc4yG>pHOf#tKTcayd;%u8gAqG7U`5)^LR>Z=9g<8kM zM$vB!W7B2&-wHSFb4j-4(PtJt@XLe>GsW0djBze@0w49G4 zXA4Po`YDOc_TqC)?^MV_`5;X}VN-*<$;FG>y5s0#u6)$lJ8xoxZJgb{&n z?HA)addE*VcZ`cRUbKqAD^ib?x~MKQ76~tmXZd5!9CoG*T@t!1xLQHT=EYFzmji-? zM2LuEk)!}*YHn*8AC?<=Q{8Lt&ipD>LwSZjbg=*z`{{l^OeCExe5q4pbLAMP*tz;% zAuTAF`siGfxw{dNfHN!|jSZy$M(Ll>BfUvxH;ZgPJLl5OCsaCIB9u!(5}TOH1`Y=5 z?E1cp=}f&(M8YzN#81OP4x0s{f{%f~9bjd+61(c1pADU75`m{qOf=uz~xa z7Ag&?S+V&YkZnh%nVPp8O50`(pICMiQc?p}dQUc8>>lh>;)riYQW9uT^n1l^BV`~t z*K2h!lad>EDJo>x=R%}y*jq-e%ol2Co;*U~blT=-x!XYx=tt_-4l|?$Lv?+bw_~`2PH%puJ zy~n8d&N&8>B!>eKE<8txqY^?Q0w6&Ez#y{punv9l7~=Zf8a2V%#j?#wVWeOo!T#Q) zNYi--+b)I$g-}<*I4YzwlDc%vp!Xo&egZ;-xvzuj>Wx(-!<%Kvz}Qg&D@B7*jF6ZB zSP<}FP+3M0r3}x)2uh@PL$v3Jx6qH^&!8`Uz6znf)_UMK*3@^Bpx)7h-dsaCOu2~D z(1+kxp!b>Q@K_&%%}~y`-yD8X!HN9_9uQ3!fF}6}{p-Sl27m}ta=oY{KFJ9Q$`=xv zvK>NSf!~8Z`S}P5QWApk5CY?o03{G4YZ3rAA`%z?GzdflgxGHyCe;5%L1?2J5|lmG z4`PuD65{VQ%q>BUEtL{-=Rd@7bU5p9Jg*8+>AW{>P1e1}vf(%iYse6eVWa2Hs8(CC z%)e6F|5Ms^6o`!!5#pcP9u5OM)>?Z5}VBUhDJD1n~6jNa5Ay*Sf9|Mv0zlm{CuGa{c6(obn|*>Sokjs?eG& zh1(9h6h)PbMV`;5BZbsGZ#Kn z369r8ehjfS^HT8J1k6PLZUy`~llB?1c2+da9s47Z)~lb))S_QkD7>i=5#;X)AC^j< zmzXk;=)KvG4kQykopKrkkrhh>#H)P`#K?tE0;2*=1d*ZS)YkYKX!{8ey_${!^iFlO~eLjUuV=FfI6h++GbJd6#Z1IF_8AF>i=*OT(oK zTR~7j!~MjBNQjVQ40YbvLxvEisFF}G*FxF(xT%mg= zJ%pQx=g_y{kKDqKWtIrv&xWC`NuJ+E%K%l+zh9Z*u6%K z9ERR?++GrVASW_=W{dZuWAS}`Rs>!w0ECmZs-Y*sJ<&=@-0)5p#07}EAD<8b5n}9t zSVGp%2!Ri=M{{CV%zbwM9tt4d3NGCh*ICwMq1uuX99w8$lCM2vwCyHL{;2cANBGua?pOl~v9-qQFeIH3HaD6VY zvuMs)Z~3}M?`h$yCkHwpd^~^wW9s}$t!(<@-+-~fm=D_`knL8iWi$}7fA(Z zdsZ94$zQ9IM1SpSjKqID-RJ$at1-~${();af4%j5j%duo--L#ky#y+Hx$DB;4i#nM zD&=(l)HY$OQ{l3GO96Kf-*q%=%6G57(N8T0`tFi!iwQ>UPIJ5lIG^6I8aSUGIIaP> zs*$xWhx2mutnGwCmB4K#92ybVJJn_X?0PG5Db`k7x0Fh5<;nm)MwR71S2e=)wURZ{ zga>O#mzpZpZ`>f0+DRewH=BW_slOjfU!T;g9@6#3bK}Jw^N&tq?#?=-IyBTr)Z^ad zSua-JZ-LaaJBV&&4dwVY*`oUWyWIU67w!$Fp*GTPZDXmu=fu<>{SFe(g58`{Tv&lYA}1l{I#2IMPPp?2=cOGx+mFr~a}_#8_pIU)SH9%=G1bjE%{tcDAGCh$=BssVIMch!ahFRa@jU(@#6SBh(YiUeG$A@R+8 zCU`#mEE}s%#jAa>537XXS`;1(A`U26a9(H;LQOEoqPT;giXbjOFj zN03y+ap-+Q?0wli|GOS9BLODD)D5S$SX5WfJntmJh1Vj(5Vsn!2Nziu4NYhP`VHL$LdRtJJlNt%! z+Da#O(6X3ZNdNg|OM(mUK~GUh2Wt$;&-5xoE9VjRVjp!18COlE2$&sB+F5lR1R0%{ zl*R0l-IvI+m8pwWLKH zu!&>$rWHzWF?)i9#-f30P~CIUlw{T=Q1 z0yp>`$^*FfJr0pZ)8MKH*|;A}r^ew)JeDa*H3&@#qEdUpfc}o}h-~|pJHx+VP&5b) z3Zfu={q+9+f&$}M7p;D(f=Ben9OO~`_lp|h&^BjUUupB~`-tby`9zBeCXA^d%t6sU z9dm9rs8p~wWguyp{Iz`I!jznK&yi0G^n1T3%pUM1kP8sECobRkU>V6rKnJqRy%ITO zffpDN28$KgAHjeyL2meY-jhc>iNE~?YtQy^?;|nl1nBSS5`JRW&WCq_u29eVM==ok zj1X)Us;zd%-`R$v6H@xia?UFUB5vvbwp_&a#S}i4GZ2Qzi=0~XjrY*qz?WvY-cU(^mZhP z$kC+2?$x>zp@q*}7zL@1Ed~Yj_v_jNQ<|9V;PDV-ko~yOPyYTI`0pGxKIrdp90E9y zNwRyU&opLn9WFEgWlD&M;SVSLXViieu?t@RE?9w3<%2mWAb`*HI!k%^bqHu@#=yY0 zx<0t~2|f7XZGkf*y2o~I(EXW9fgiEu@Qs;*j$wOeozzuPIG?^r3?W?C6&l3KO}>gv zu>TR8$pEqW{Ss4DC=85v6G#k**b|Wt3NU?gq+wLMbP1M6k0u;1&rqBXVAey#;y>eCO%L$Ah1N1oL=^ z;T(B3EwW`T4E%SNgBW()^MI_WVY7<1C8C*N--#kEAwv*au z68QOb4znEv#&`2xlVz}X!rC=gF=g9?XLdZdMnF7HJ8o;KI&fP)lIks*KR#w8@*oQs zXD1;P*@>8gpuz)t!&t(hg;NW3VdE>}q=EWg_)~U{3K}X`Kzu`tg1-6A^mJ51-WuSU z;K80xQ&59~!j)32gGo}%MP`B(&d!JO9a?(3qTqbn;7fKy$O#3mMDPvsSl@b;?dKzw z7INFWcV|p<(}*L(KQ9y(8M{MEHk!C85D84Q7Dj6VOgQF&jB1%>OKL70Bf9r%9`&o> zb6KTXP%qy7f~^(}5{X?oS&oX1xS&}jRw3t(l_GXe$FN~=9Ag;oof7qMZ*?0SG)s0kGI&<-Xx;S0wdatcS=Ze9`NRt=Gc{)8Oig*&5>@lSre9;h zUdeFAXN2sTIn7Jt?)AMxnZ=VnO^Os?l(3)Gx*Ji`ct~}#sGd) zW!&}vU{CN45N+U!Szw0?b`eeM_p;L&+){#VE;q}x`t=uJUOICJx!vs}oO7DHAKUxg zwyN`iD-Co=CxDEBn1C?ZFfb8NO!y*0p2^@sNhX)IF(&}{-|IA1l^HKIn&}5+yxutN zT?1PKqzXjsi7FY0TBp_BTd&%!z=99uYXtueQwPiw zxC2Q0^k+9@QC1zLLGPsBhvQ)U7nitiDPK609^l9xJ@tK!#^L(NtUw!pe*#%_TneIC zMD|r>Z~8Y8!tvtktS=z>EZM-=Ab^o>L&+i7ZxKIww)h&sgKKi~ z0e=UQ1|sW7_BT}tottUP%k)Py47M3FADVH6#X)g?QUvwD=upPJPj8`51Iv_gA-l3p_O0?5uR`L)M>#Xhv z-Cq`+QE%OKuNHZ}@FI8GH1jWu*$er4im?G}?a!7G&ZcMjvJg_O7`XE>8J^e|k#N+8`~@=#3* zV#ytSK9)K!VAV`PZn?egESo-=PJgGp)U+ELdqZ#}mmxB?lJiXn7O-l}nGQnN-gs%e z0Nxe&sOuRB9E%_pIOVB8_)d&M;enye#puzaEA*v$7sOP`3b+AC9f$@9O}_Z*yYQ@e7ug(=8oW!XaX&M9nO*4_(^uw1un)ad? zs0Q(y<`+a#nb@2{`($#=S(y?0 zB3a$Mx zWbJ+^=z&t!^#*58++9b~JdtC$tIyVJwtCFp?_UK}hlHZL#K8u~C$b0@GI9AMqInbw zLl4K>;!qw|cqke9nNrsluXPzQi1`WSInj}?EU{q)3`2>}ICQ5}G3D{6-k{DQ{-i7~ z-4JFV{n?ccFgK#w+^KSdPYvJ92#z@P^-`oom&yv9sdr0Y9&AdIVn@`~ezpKJ!U|?wVNu&TLCwV<1KB;D+!r+(iojs~i7GF? zHIcH0KKR*2sOKPNu#Tki1v|MXFr%SVShrjB(%DZYfoSZ|ijAL7rykns@pxqW9x|X5 zcYW`OuFD#&+)C9Zn|%Z2s+Y1$hxBFZ#r2lMJLHoWA(f>g=dRD-mmiqIS}PqdFITcZ z1>=R;NwU|SX+yeKoSF7XTkSBn2WW4y7A`Mf76PkFJg&um9EB+cH<8FFX<^rop5|-& z2RCS|=3(Lj>UTaCR2|Ki5?o!`%LMC9xn!%`lKHU{=f((|5yUe8 zoDCsY7rEColt+;uNR{cjRS2S$%8!-$9*ZL#Jb@hxA_kl*pB1~$SBBn;0^c$a0O;T$ z-2e1r7>}GZWzuwTZG__EoYQQ!CJSzCnMp2?qgMd0g86+?h4_HMzl?Y`kw;k%%_lNWCC6nlGpOS#2sUyby z^>$uCBY;7Rnd$K6&^}Pv*V!x+8q5j{V6BR;hb))Mam7yQ%DSS7nI-v837BNoNH6A5 z9+k;m!IxPjA}srLu~UD4vuTmvw{87OEM;+6MKOP$ll>CXIF7SdV1Ug5jpGOKYNh7o ze$M{-x}J(Kn_z?|f==o;b;`QFC70GUAT&G_Oj+~hR&MHNmN%cHECLo!=;>;hO#d&Z za{G@{Sz*ig$EnPL&`Cb)U2%21NQ*Fu%&F(+efoy2FJq~GOJ1&tOO}VYWH{3y)2y^I zZYdBw_dK=yb37Zq+H7ihvT>S-<@H4OZu_~HB*uSMWvg=BeY#fmqgT6n{UiIdCL5+4 zT9W8SOOlfNxH)T5(N2gYmogoqiP5trURxp@%zj0kv`k{%ek(d|zHqO}Ubn9}%2{H* z#MJ+;o-D(R9|EIVaPuPH%TZg_vOGW!9&~#u%Aow87Nr*@ZQiC+ig3~@ZJNqF36;2A zWO)FjJmzPwY!3*X9;Xy(3Y0NRNh61X60JPOzX!S#3j^Ec4n)8Sw`YLg4s>&HaFS-6 zq&8g~#b#~9A{XJ$b{6+$>{_~>3Ems4-`1{dj4!)$szJDBKOB|A~6iSk6R z6feKuir24pGML`T!W^ciJZ*}5eys;9y=;H8F%3i%9}qbR66O8f^tzMugy*V#$4n?| z*EE@oq0+8Lu=HvsR_Mr`TE+K5QIa(kb5ZPMRgFStb)_f)OE9mpl;hHZxLtrv4U-Nr z?z3wIDo{^^q%Lym*2)!Od|=46nsnK0%|aC^hp;u#q)Zygqu5)$2R*o9RKole(g&oM ztI2;bT`;W?a5ojN-3GJ+dLadKQCrn#MjUtrrLXWMvD}w6OL}NMkiOk8M@fJ)Pn|g@ ze`nIvGPn6zQCTWhBQ!f%@KVwRpF0v)gcl1T&mdJl9(dpDk`yCLi>~|g^&%5O%(NTIgv&a}wz(Rf;!q-eRJ8TWe9f()=7OVFZPWQIsak}4)GLea5 zHO@ywt0}oi1BTdFzD#ts45}(lU(<9uj#>4#3G_kH#Nbn}I?nMqYcuKCOQUp~z7u_8 zNzw(1(VCkT51R)IzT5D=n=P>wkIhNv9hP+)=&sL227g(2%oN*b%kIitZE;x4oU3qM zolYukj-KKLc6M56$_2aQT%n%G+MT?z-mv?_Q^mHKC%(eo!q!L9KnJ zXc$Rum{XSB(2`;$osK$`w|N>zdXJF0tVl5=un^UtE9y$3NKGRLB$&;rERU9z9EevM zRsEsgs6dqt3x*uh$dEOUfn1~;`@P*sxLds#wessV21l1web@6e$TrP7^gH`F={a^4 zw#6@b3LlsNQ&^ePRm%RhQM);{^Pu0R3X{EsjmFJbVEJ&EUk$q_d$Y^c#MBN2Ccp1~o3BB&4gckOX z(!2AG;C&$#(!Hpo<8LuJlR0uWmoD=9L*M6fz2;x?dLp0}x8Nr#w^AO;TOM+(bP>PV z)?;)I>nh5lYvr!OPUmpCIJ@&aSy~}YDZSUi6sWO({-EU$p{&xI3~^*lG=>BxC|e&u zyC!pE7&bjK=oC^6xXf^FRrc%8Wd@G3x62IcwXV#;X69UsVvN)|s8>$Rb9BSCbjn`R zI~|ap1M3=~U2{RZG0=uE+Umctx5KTpxbAg6o-S>FNy815r=})0q@a`YN($chl&{;7Xj!IwKK0-+d7+Y9y5YxKz-@r|Pnk zGdE{e_IR;<=U6@k4?hpnzUv`nwtdG1^Vw&&^J49eGo7{39%MY52BFF-(hn4{Yo^t0 z!#5*pjbwKg-~N^5CTOMiDTXWq%RBC8Dp@B=_5B^mddmYwEc_6}HXg>dnjYWXcQolIV^Qy*6Q1!o|aL z2f_1(?+p0d7x2>u@aLM~DZy=p^B}lS1(1Js&3qeGb88rAxS>L2y{sPn4+rOC*Uk?%bP{A7-0U~#@=ar#&@u zlz34(IVu0uBTu6yD^C^6lKK;DK07W^RSe3yyg3vKJ~o9Te=}hH!|c#a>uHcht_y&>$V`TVdz-M%o;(qLv3qCj*=dsaR7WH6t<#tvxw*VUlEHXscwbbcM_rE9j z5kGhPYOWas?c*y|V3oUZTlOo>P|vp|&2ygv`-fnr!ZoK^cr*#E^+qhWkmS$VKrpgp@>o6_y&w&zXWET6H%$zh%wX?=T%faiTay;3QEpyzgt>BFmT zPuFn6g)JN$8^o-;UFe;qYZe`c%g^LjmBgcWaBw8u_2$_=KK%CMeZcbFr}+n5NB9fD z&J*Ry*}Qp=rkckCl$>qPDcw@tNK}zwiyVV_D3E3`CFXD?NkzY!)XjIoN+D8+JidInFvY|#dHeu*{2Y)pcNw$Ml2|c{ z?Xc||g{6>z_6r+FMYYZrlexT@XsFMuJwYY0#jPtiyJJnk3Z;dkHM$m3SI0EdKDKT4 zZJ4{eeR>ABfn{=-JgN}h-d`ntSX2|)i>lQrjIgs-ZslBx3alOb&B-jCO)#L;eq@xcJ%~!f9=)f%cfiG-g=ygAmxvk@F79j0@W$fgAg|V!LT`rPVk6 z%TuiiC{M%j2jN}3EAOe*{HXc3%QDrU?m^GyI}qlW_q2f4z_PKj4!w^`MvcWhzDScB zWyC4#drno>Ku(woJiC&XFKp-QL&;_QIYHHS^R$Xr*JA<*Z4Gn ztS+QSnxyhEejEvqFEf0Xe%mK1eAs`4Nq~PvngVLchi{tH1|MEvFHL~%je`zB{(0D` z>Zhc%s-L@aTzRD0RxBHvl*sW5f)Mmu!NFcp4o`dlhO(!>!OJ{74t6=scfUTu_GWzi zMmi)}z>uYcH$$nm_8tvb7igit@iR%HBjrW<-u?AICZ;#}6ewAOq9X}!Z``l{P$7@v26gwRFSdrR;2AJP z(9DQ#B|Ya1p70$IYoMpVx2ebH41@vPv=!}q>C#A0BGGOC$OZsH;8Hln{2iXb7c+>b z3+mr<4B!M@UG## z(KyqgapzUrjSF1JcJ=eWy%PV(_cKE1vOj_SfdoAXIuNuW>Ew6C=rra9DliEkgZRUI z@eL|w-~AznfW6=Ie01<`6t%_rV~QvPOpzQ)#=!O|gjZ99K8KVUv9Bc7lfDC88A$H5HKO(d=<48W25Y{{dt9rIbl?B zJOd*IXGI7Zpo6yX2@yU7LJENqax{YF30Qlz=0&v&@5lmPYg=T+zbFv?#J)bw>>!WF z=OJ07h5kqmufMnozy+&X&v;M;0l09^To_^1DXkwr*Z^J#z~xB-tVl=^Fd`5Do+3$y zZ3l@e;2`}`WdK?q;>{)@01zm9mqS>s-+1-1p1R=Ay)mJ9R|pWmZh;?PWrAmh9yC}O z$z)n)17?JHh+cksgeXSW3JXdEpmXq&_c~~8%zr^YHT^H4gA%)fA5;+ZUEdG&pHTur zmNpWq!o8l!I)G$KbVWA)M&G;|C7{2YQQyu&5BOcDUt4y0@V zMCI>mL5c-EWIpyxzK16QYDxs|8~{cC2Ri`)Pt(ROAbI5Hkw!Y}w=VVM{m&{H{2!|% zGX?CoPx8vd?ACzrx(eg!KQbXY$9A@1yiqR@1E5>4-GDAbf*t{(8N#xW9|mrLfAcs1 zLk7z5amJT-;MRobSve&1FLeX_oO)YT{)C9Y;DIU1r^)sP*8KioOWF<2yH7%3@O=@& z8?RWzd4tJbDYbmG$Hvu%4K6H_hjgF^(sK{YK|TTRzo^VVs|1htnZqvw%b@(3y=K+p zGg=wE`;7Rg>e$fLshm8dP9utcuGgg^SP@Pws8J}iE><1VD56CyH6z@em8wpe^U9Ue zK>`eJ%gg?3^UaIXgN|UNsTm~_>0%{IR4u&`3Bx6*<>z4GF9lRkQI?FK^hSLt<`l7x z3A@#!F>!{s@bP<{hQ%`v9XJd8|M@1|S@O>-K?H7xgxlHQm)lzJ8@zJ_bhzj{;)%dJ z7O<@hbF?YCx}90jGj>m6o=K0iNb&N)04MoAcOhKZJULUEf4_WDXZqsTIaXMz!3;*W z*kBJ?K^ar~0p#mbju{l+p)ZioCy>aWAz$i5@c{dD1mfp8N-R^+8gQbPx4rzlts9vpr{ z|6>DH)v7w@j|w7HYbV_kRihm9Px@fcs_%1ywLA_tZiG%26d>TV0&*8sL-ArTiJ&9E zJ3zLaUXA;(I~&cx5HTCy!m6!*sMQ5OC0S9qCp#87acBws%0_!ugdu&tDC73~qV0>%*%VhS0TcE`_RJYx@T33j=c z(&-VG&W3}vOk)h~K>frK_OxunddB+bAz+M#);A~eVMdNM&L(jfQa6G1CwZkVjaU;&_cXm*k_Fkyzgwt!GCO#h-v zzP>rdnU|ofdDP$N1cD&!n-zBhuDXZ5dixUxYYscND^H}PH~d&mon)k56$pYNZrew& zyqtCLjGadOE`YHB3hxQg0l1g|s?W&n$~7UJ-UGY6EQHA#vL6cY6&espsV31D));$U zeFZ>emGJ#UHJTA6x@=ff8VJBvNSAgPy7p7ORrFJJ>g6&x$}LbY-kzY0YU`eP0k{-K zk0y7=btCqy$w^2K%O0=+c&i>_)199j81aiCS#eK6oY*l~pEDA@J&rj_(Uq(=*ZTya zGJVHgd#x0teqyZOs9PK&PDk$^EDSK4}&*D-RIF`L+Bp!HN ztAD2tc=Z!JVIrZG1u5{+G|x!4K#o0V*84N2$&u{Z#k*KrS9{<+JTAmbm+GTj$P~>V z>N>L@$JPno{C4^he>@AMUvlSo#5nevQCl* zK-QtdAsRu+=ES9%^r5*vE{{6$w*)l z6~}NsXEED0A8zx{f|Fns{;p-*=g~RZDiQ2gZ&8!s9rF<0?XdlD2IG-mHobjR63XR z#Y8ieq`6-K8_qdg$Z7duXvviUhvo}*+s5?iOY5%_tiS2HbP*otd!>0$rEt^mdXre^ z?~8yV?ZfqH*~f02;FWB|e)lc6UEWF|yyL45>p4zmyWX86^&x6bEsshrA-s+cM_-p6 zTm+~Y^VU9p35&3ZOHfBrGNiN?n+mC4GLNm#Dek3AK}DO5v{T8N=ie`by%d&qIkR}^ zUv|Q4eL|Jqc3v@uwKYn`@e2&UYg!&gnynPn@%j%naN z+b)DW>VgPc;}ZsZw!t?OzAreJRTVu*DHB*NRFybe@{XHvC%Z?t!S~yXN*7I^S7xlD zbgFdfr;ntrcK_+!l)rj++Uj~?7IYV;t}|4Z(sTe!K=s8#ij z)0Fuyd~vZjk3_FT_}24dVL2@o=03K$`bLKn+hG??t#n_3N#p+MM+z9_)Lv zYhf@~O(0ca`N)*GyBC{%wkNIDy_>r3saU2T`y0s9@pnnt zEC*6~e>iWB19*i0U)yaq{?&Gya>!aDlxzuYofGqq@1=n?cSAR^r!J2BP$o+wLoZjb zWxz|YZuEZ{Z&SV*8h|GCLB1mM0>)e({O&H$?FLA7WPdLsiY-;l6QovlS@fIFgz-_{ zA(3Q$l^vgT+WNd22y1k(Pl=*iO1tQ0k87fIhhr0!PF8E(U7pqt39<4hFW7~|B~o;X zXA(o&E4^?&=W3YcHJg!V z7km8>NM9vHZ;(B4$7wP)*D#jN9@P7{@Xb6XKwO$D+!QT|OAt_H;8EV2onlnT-PjANr%0yS#}m)NqHG{c{p?zxXi}mY8qWjIED{^`-LhXyHba zOsyWK5nEHO%L~x^M7x@03!831Q${JA&j z&80(wQ|Ptwwnh#{2{$Va)=0~DXZ#{GUkgi9XeJeYikcaGDpttizaU8skK2D>bRG~v z)mo!F%3UuJiky>WGYhU4@8%k-?BS?>JaDx1TFF2fN(lz{bEtrn!~JaIK?+kcC8KZm z_1i>yQ`0r&oHiz|{}E)+6NKd93t;K%eDi-VeMfTNyJ%oKJy~jsRpI&xntQu*#JkzP z#5ralOG;!}zPrTb=(fA8YH-63EuXUVH<`j|<>JkFW^I7lrwpJC%WJG!ZA+2~Z z74u$z{EN@j9r1##&YnjqqJ>Uh-Me!CN6B-OmV%8Ls}0_5SS3>_$uJLB<$V9<__{|G zNwuB#&~Okr7kZ25Ju$kmMzb-x$6}aabdC$Rjp7*s8t)5e!pVtx`82|L$@?lfs&v0o zk>*e#kqr~XecB@DmqsNUj-m`HH2A;}yX_lG>{*2^tCBPK`r$LQhSR3JPXp2kNU9`? zfq_qnZlq>k2xF+th=y{r)G3B?$KLr`IRBEL%ThOO-ImRGfDZaHoa;dHWRVIN(kR|7bS2fkS0R;Br8=cQj{Qup65%tI6WA?%;SE!LSTzp;f7=$E4^+tR>VW`u24HV1SyJyf zwX$RmBE0kZx83XM!0m+CJ07sNt?XKNUoP4qZGdu6F9Y>9aQ|x(1N{xAj6`sZ+<)(? zmV<@|CKm+`17L@7vGO=9JqzEc;#ZpZsVY$Q{8tM5w3RuepP?Td!K&oDm(nBwzl*np z?PXb4t8{oWI$)Cv?q?yCiTb+IeX3QSg3fJ;S%EUJ`yyV+gyg;7i#hVS1-bZG0br5U zRpd`5D=5uysnXZyD=7I0+;@*};+ZW|M%|&_j8{9rn?Yg5LeG}SH0J}?x>9^*^RRZ848-XE2zSrucA$BsD*zLWzPtJ1F@1djR5`>EyLOAwOMK#JqP1LDpFQ6ZwP_46*aY^ zf{y{Aa2^&v5O+*)N%1^a3+Vh@E6NM6`<#4$WHHeRLo2() z1<`!oR*y2zl9AC_9e+c?azv7!a`tvWV>$-@W81dx8d;G0kbdCv*4I7$RBS2O=2yZ;hX|;SA}SPo4F%e*V;E#Q%RU%=a9qYRXb0tLC$@N zzaD#-Ry|@{X(vl?U`O*$(=^yx+(p0aMwL6!tK}=+vk5&gl~_&>JJjFoaa(0mv)}BT zsTCxSHwVDswp0YKDZ}J4-AtXZP2bXp|1dExi7z%ROFz^l;_Z6XF#bpq%oDvodgKO_ z6yn1!11=>ue~@j*hc1S$DB-mF+!m%QL{|z|In#zttrT!=UAhaXJEp*mufTV)eFH9o znD;q|2tBCZ^+9(#{dvdd0>Q%;v&f-SqXG;`3GYDwX2W}QA>=zRx(I;_1kf<~{tzG6 zI&J$wORq#nq*r$B&@0iA(%~dJCuZG8vNK|Q<(+7n8@{M0vY@p)^6qEr=LJvcQnzLf z6PZ-J-aB{*vIw-@h-pnRw>D+F7X=fQr!LX6jd5@vcFJR|+qgeQzEYl6K{Ue?w!ytj z-b>BUW${lcXY;h{tTKwH;O9!=Mt}MJ@%d@=VqerdG36{Y729R^aVlGsgX`a}wF&?G z2llis_dn>9{>yXRJoH0VZUe|6D1Z!htguXCRR_5~@O#?T%-9EW*s%E#1QY0SA2<%l zny8=%y&YCmoam*y!fv7LgP(z~W-Mw-fkApO`gQri)>@P7#j4_|(T$+sWl7CLjd546 zUjyJ>zqs=y#z#xof?a)>f!MX|yZd2{mihwAro~p4I|ZS54L73f%@gk>4G@8nBEUAmRkOPPZssNL%)+BxEM+<`5kdW$ld zvjN~e9{?E;NIotazAbf_w?GIa9~eFhO{ca8Cm3fr?y9>x0A;rJ43#%Z40k_>Q;8v3 z)IC}2)}}bu_A2a{(d(8c|KB%m@4`D>)|*?&?VCB>3FPGGeb^j5(rl7C`t%HLLgL;^%%;752FMpz4SVFAV^=!Msva(FGa zU7c@)lyW!}+BkFavLLtmjo4EXl?d{4HoDvx zaK(Kx29COPgzaC82_J)*xnP$*AZ&L8o^SV}1ZF4Ld*j-luds?@e&HbgT>kmfH%J$a zUoTIVVu?h?F?G}bhYOEJ>!iYl9HSTS&L|OcytjRKciG+v*C@4rO6(ltj&pEoFrx#n zCG7Z<(ryb4a2JOOwqIXG^Q$L?8BjsY8LCn-y0J5xl3%RG!d4i5E|TS4su`5uiA|eA ztow@|hG!PxN@SY8X_F6`p5#}>?gmXCZiGnRUT zOo3lejkh0m{VUvAY}48n(prv*6(P|Ym=y>ca4L|bB$i~+e4v9Z8@(znzvdLO=FUaJ z!*)Wk(po~^S%}^HM-X@5c2BJi+C&f+Q+;74%bm;Y*&QUlD{W{71h8Z6zs-%=Mm0IpP5YYoWxy)8I{6A-fdvji9P7)Kiwaj7hQHeHmJgV{jnOs>f#u@w_JM(<3z`Dv?glAhd!(cgfka6PjX3bPH{ zxtPu}`$*%&Sc-E0SI?mh-n^7fml86VDB z5kHA0tL7&W%3<`X=Tn%IHc@Z%4F51I)i+i-?3(C1h!Q;&kcVbK)2Ri>WiNK4 zZqso9&e0>;k;du-rqRLgz>Aw$=L?&EW+0X zo3ic-z>$z&=!&JeKT*j@eto7l^2PsDA#6P!T4?5IOWfcv%1>Vw8td;%%gR3@ra~J) z-d!?}!pfSzbg8;+-+2S3`{L%RjWAtm;`NIHpCwf&L+OW|3a(CB2ubRUh193IBOPzO zo2#nYE#Zr&zNU0eB`(|pXd2Y3pn{g=qf~ejRvk0+QW#te6;uk2j8OmGyHLIpuH?%Y zO^(v;G_A7miAg(rCA$bPqg>s}GqAx{XnLu4vk$W$ZeIaURIY9V`ty~P(H6*VFtmt# z4=uQ9x+F>eTaLz4G}EhpQ0m6}h0XZ;jVX(F{@^egVC2&bvmKSj`*>ar=IsvD?SuJJ zE6)eh8{uSVk81GN%R=g3#Eo^5{2O!$p*CFh20)PY#lZ`yL9}ybQy;&MA}_#e%U%q0}7b|MC?W@MDFWb z)c4pvxglJ~w4s~2pG-avHt3}y8!Ln!4+&flHW}ngFV7e*_jcTI>Vi_4`4e(`CYx7w z4*yAKvJ+Ds~g&(MOCe_xldBEv@v z&h(V#+u|x6bw(uA8u`d%8;W75{)JsiR@_h}8}&OS|6GRa=NG#5MwVJq?!p#hkmAHk zeRhoFZ^YbBu^@5|p5#*mRd9f}MJD~_mqFN9zlyW3Y7^GwRV~UO~G~Vc_PYDIcEg&t+snLszhZgH0o!Xy9$;L z!g;lxqppnZO#Un2p+o+SwYpT>il_OM*v(>Q$#>rv120$;OMja<}ht!n@yax5i_9yNQ%# z;LO~^&LN&{md|%3T-S{y0B078E(|sAxa*hoDO&W^(M;RlPmeve^0?7s#Ss z)Vi_v3bpo2jCh5x`TKOT+wU%s2ipJE^|=^6>Z|*lXuNN%r=NEyfb}fS$=hrhui**f zShhzef3i9IM39U#B~}(>q?n)*JEQNwiJ&Swy%F~%B*c`ehHB)%6yj)z%2J+l?=3H1W&vcv^I|g&aH9t3}&^t+yn`&32qJT|&p(&zM%DNKd;$tlQnwl-@naHV8{UCH) z9JskuZ~1&d=WnRaa7uE;t<4e`RcdJZhnyk)F)_e#tyOhsI>ME|`6nq#TA) zC>o(*T6yX(3R7K$Bf7I_of5(l@k57Cx;B+wV&I6+iW@w6^LxkR7YJb!bEJG-6e1jE zSxRWW0?WdlGT-_%hGrYa zWK5Q*`LZYpwkp~wjMljpiEN38d~9_;XHRqaEa;1dsAVB>|3BH>{*K&$=IZcEuz1eq zsl64;hsty4OB&znVk3L8E=#{<6h*YPs};ua`SQE;P~67A%QESkhG4$&X->s<*dXoe z=Wl5coklhed0Y=y!ALI4#x7mka0EPISr?sQiSD-+*XC%Bi!)6$4WCR>N3|=NVd8g5 zODJh96L7FKQ8~s>cE0{98^t{Bw2!D5dCZoSzJJh8Y_C-~1z;~0SnzHCDs9}-1f-M? z_78(OSqSA>ruGj8>lMhAk@MhVXZIF96#?ED@ClyI4v*o>8$8y^ z%sw7|Re@{0Lbc60A4+aK0#x5-}Mk)dHsij{zBZGIn6B z9S&M4#u>ztmfm_BhMqK!38zsZd-^302skW(k7>X9|E~=c92%&LJY+p}(9o5^_zJCK zLw{;}GIot4u2t=}aTw^ap!mmB{}r8 zhP$Nw)YtYyAKy%ps)$W7pa0<`QvXW}r(29MEsTqhni7$chuaZaA^r&rr>!t8xMxB% z0(cVKVean`6QF<6!lcc~p#wVO2m2oUrmx{#*Z+0+={TDJ9W;j0NR$0AettTCvXG#c z?8|FXEE2zzv9DneJurj#p$|6yqhEqQd~dpiVCM_l!V3$Y`a`~eKC`dWO)S@8?rwgq zP(pBtkpC|19f<-7_NOfdfo~5Cl>h1j0)sbzGZ@QMd@bQ71_LB z)R73bM2Xoz$?#^Bm0^gC6O^;{`HjMessd1$BFgIU_9-U-3PZ|BM9v&JLIoTEoa8ma zXNb=ji7{|EsIM4j63Rp^+IMvfziM0Z3qi!UC0Cg6!#CJBoa8NnD`VbCaU>)TeT9z5 zO!76CJE)2=E?e;hlW3id8%x99B=LsR$l1$l&^W{Q8W>6;jEKnu9e~2T69CP8C1YyA zOKYU5$7j<86(H8|a}=1PeVFP{fg!wnI{4S{ttOz#D^gG}f0!BGL2S`7BYK6d{|khJ zfTXP~HgWub2oej^$LsI>-P{5JSQD@>pN@ZX_DWdZ;sSgFE{wKC?P(3b0)oTVeg9&^ zU_>09RucrukPG}_`UDo0HF$s@g5S|$QZ!tbo9n00plcZ30T@%FM-iyMFbrPDI6b(x zaLnGAw0c;7?p4+FYJU!_j%5nRXZGJTm(_nXS2lp=f)NuTG$kS<-v$1k+;GxcZumtw zUHW5TzX-%H;D3cQ)goytw2%a%1yT50MAv!X{|bVFNF`1ZJR`|xL_p4QKOyt~eHQGR zGQa=anc?FHurP$+P-TF=n13ZKoov$Fw-=P>UYJ3=ApH1$x?up6iZQ|-AXmgA0!Z%O zk@*D&{pp4QJ!h}%7*CIS%>WDG9#!1J04NyXw zQPb~wCHBU(@uwBE-37XZ2Qc(E6lO|ylNL}J0|^WE4g@q!@-|=bw(&Vuay|b+1F>!Y ziNx(?*Ri%M!i?Ogs8fnmP3J2+)J@)+pzgLn3}z`I#+lH5Y<;P&PFDkBkom#P8PVL3 zH~}@356azIB)~tK1dBLnyqDM}nbqY9eki&n5?4;w-KcZV`?#xNuB^9SHon#>Kv`e; z6^E>sNFy`hTQA#Y6fLdA88>)q3DRXj%uSo$0{qb_nXC+DLTn^pJ~U(^IzaB1n!5{#RX}4Rr^$g zu@(K<;1@TY26yOh$=XIB(h30^fIICv%s8s#BYTM|%9NH5F?Ji&8Mf5Xr)l_5<$*+! z(Jc}$kpVS>?~WaPw(2#L6hyN$zN%L$x!>JFKTa{Z(~J24)cTu%&SihBda6NOHB~L7 zc(lsAO?5|~Ub3Wb(vrNxNS$JmJX80U>mXl4wt{8@w?@5}sBC5nna(MhV1b_*vf7KCjolVF9E&iqKkkiHFI%q?T!Rxmj!uZ z8Ci2ms!U$gCn=Iqvg2McoK{y{$(=<2{sR`j!k5%Y{x97)J;N$9#eU3WU$YMns9G!$ zfz169@7OR|aJZ5+&Pb0OUSUz$3#~N9DSi`S0?J4O`OqkPK(1|8zavP{dL;YISukC? z-b74XyfX(&I=LH{^pqR^1up#^v+s1e^tWbtS0kEv#w2dom}P?akF1@>ZCX77!Vh|Z zDC$(fGgO<8Zgh=MYTd>-)#xh1Wblkzq~C1F^MlUsw!{6DclgteL2!A}&7c1ZHI|OC z&r?szE|H|6jYxZespc6JS<6hOa(9t0xgV)YL_K8mwlu#e`5X@?pgE#oT^In4z|4yW zcq9#u@aQ?dxPV73c@3DrMfnWyZ{gd7p*3<#dO?ldr5m-qC(q@@^NKz16E8GCl!Yeu zixm))n$vQl`lcX{EN@a$6IZS1F=(WCQ{;(5w)P%*f}9K=837s++^r2-*%>$>8(2dH z7=91u8Ov)f-z;0F%hvc~&4)!u^RI5-?aM`_yiJH}Nm8U?alsq)echQUPsCaAi*^1jfAI~h;FOyE7n8r82-bLX_6Tji2a910 z3lalpUnFm+PIc8>bJ0%IVV*%4fA4}*$zZn5j8A9FK8P)7j5?QQO z%JmSr0)n#)L99GR1hg`O;{C3~Nhe=4q*<-Y;?c!aulR7M*r$qqAOb z=TK57&WOG4gr=gV$Y@ZDLw5VO9~&-&RcL=;&Z?@R@m$NO{h|{q-ObFW726;Rj%KQr zWc=iU_8sLVr4Y$2JcBa?Ps^=F2NiEEq` zRd$jrRf#g{zsx>3mS()J=m-4wF{6;D4S$GT(LT$5nN5J(Z5kTqJY1a>%~BO_q_z^6 zX+sbb8Oybb|C&NltvSv?b`V>?!fJvOJNR!x zQdwEmPlTIVLt3VQM?G|^mvUTJl zLB~$TNykn)cEz@xo4voi|8xFv&mH%UImWY4Rqv`%HP@OipO=;Spb|quJ5!P6Qk>V> z!0_D!m;A^s!NCpne=yFSqg~JjHP-)1$r{=TUv_m!cPW)F`-kfcJeP&%;)XaNj~t)k zca-wejZKQ+W%@~)pv4NDq{%TUYhK2`WM{j?T!eI<0sj`9KF}HepN#WRCuv(XRJf|7 zZ$lfne?Ga+&{FY3<%J+>e|O_>7aPjO(UhJeij6{@jLGEc5wa0bcW*2 zdx^-nW$37|{^X8J7(J`cL)UNkPcoL%Me0C493(5$YS>WrIb_453jjE|5cU-M8E-5$ z9ntz(Aka!dVbF;eU4-QT2zmOdN3Xx!*z#-eWel}5?!m*XfOGpT+GADlTzk#JZKsP( z!ubNadxT3%OLL-|b7OJ*@?&UY)e&GvXVn`JCYk(@^GKL{dJ#Wv>P{f;?n~K>FP&*> z-WdT!gaC^P!31KZwaohQ_DP4?kCXsL9auEH((Y129ULp6rZKM)TV7gL`|Ta#iV)f= zv5`E3wEFv?PWY<`*>^f)nvh33<>01?t#9&yALfq?P_O9$NjEh_UAhLocJEzkJ&HQ& zSRjv}m*AU3IHC3=3{{b!mkwB$eTi`=pzr5Qu$^3)g1_px!A@O>^Ct|Q0g3 zY_>y<={!aS{A@aaLK}8nW*S4Sgw?t%kM>QVz*p$WC;U20DDWC|4}26V1&QjTxbSr) zzJ+7~gMZzZ)$7*7LL>G&j32^;-bxf&cMC^Leb)L0caKb9DhTZZoH|W#f%X@}um3ql zf>IYq9=4%;oCXp2;tT!gICWX5`sI>jQ?w@{5DAp1t7SX*4hLFu1VJ(^bBTF*O5qz# zN)MO}L`s_lm6{3#Xz^eBuv8e|j!_Ec>T3p=ljRoWwmZghKE~d3{-{a`;mqWb8}Z~ckaekF^xjOodpVXrn$ABOs&E&eHnJG zXwfJ>4@tgoT4UH2zZinqc_eGypQ2yfE2s>bT8hl5_Z+efW{Ro0kxjii9Z}3Cz=(?6 zAr3;rsEaH$P^b#;6VB#vFM6zRO=G2=2h3B-(nH^bwbHIulk2x2G_)$h;7T7<4}`R6 zoMPRMx`OVp5sSs6%N)$sPX`o)!8jUePSLrLvSlMSlp%7Fs?U0LxeFWe5F z-)$`}#_D^T;9kUdpmkg4Y&@W~m#j95>$Es|=k^0i=xf;#;lfYzk*(#-XC^b8>a2Bn zf|5gbgf%D~k|Unn7@TzKm#(k!yTkf7gdCU691FuNqJ$lTHtU5Q%dURG$c^O(dolyM z_59HYNXJ0M(}2YFr!4i3qa^i0rpqtGy$g}FR)TTL;6ZyW;Idd?V+`QY{a?V~zNB>` z(cyoeDcqZt;?JxkZozkPblRUp$A9%Aw5M)kNu-!DP)sB@o6o<`x5nk3pB3KPHs+ z6biouzO2V+=GmU0V4M~%!b{gVD3vzhI(CzAUH%QRmwtj;*!AZ#!NG!oURU2}`o-(B z>eFO;4M33q@#xmu>0VN#uAh741D7$iCU(}qwNl^L2M(r7$^&^q|Wm`NBvb}KRGs~vgHq0%0K=_VK(!w{@6l|+`8@(c$yj=C>M(oz`lr6-j?9*ZO0h79tQsnP9!SGCA~r;>XpTmv zPiq8*FQ8z@I8)^}y#iede$ha@$yOKpNlgh_XeZ@?VIT7kxw6vIZ}r#Z;aN;}CIq6P ztR>`yDH^(H9AyW}IdCIo6zmwT+#a7iQ$BIOxxIt92YJdw7SL2ok7f^ZnelKkv>mO< zZo5ubnIi#{uyAS=QJqqj8!o!Dve6zn3=x%!IJCKtH_yq@eq%}?u zq&NaXO;5PX0^wFwF~_ z-#}5ewsx?V1mFT!$h|?FaJSj|kNUpPUc$Z~?y#Yt-Y?~IL{&_ALKa>zVH;4XOhlsE@4{Tva>Z?HggOSx3kEYS9ZySpa(?Gi=P|K1cN|-{~zrxOcdA#5| z=q>^MP!xPS7~lXE48nTl_5H0V1!tBfgcvhK%gau~i))qd*%1nnBvqDsH+7Rtn;xyrnCrYKA z^?)t1axe|O0afgx9_(iZU@0~a?aaypIyeX&h$cuah~XIc(ler2f%dPNQWmbacgP{; zj;GuA-sdwFJm;jAMb?q-7%cU~ItmwydAm4B^nxHVNpO5>P)m?$kOEL4@S#{pDJ{0Z zul}eAMWPRdr(@cVoXkfCoun!^>sTR}U49^qj;EGE-(W34r@;y!gy5h;G1DM*IhiM8 ziGbp=0A$#U3nVlPqgr`|5LHz{81}S~VBxio#_g1$<3P|kdIEl?f+%oim>dK!ix3cP zu*NSPam zn4i@>uY*zXaCvhP7lp3}9}r?l)P3`9#zTpN1&{fH4Z}18w?W?$K@;*b0xF7Xi9T>0 z>~Eo?1@|=IF-7}RRIE!9XIuO!*!cW3waTI3Vp||eAT%JVAiqx4MiChw#6iyDz9N4*d8G_>F0fBK-g6}213p~mmnn>e8pYXkVzDWd zkAX7-CQQe76T+Kn=>qBc&xcsE6F{9V((#c(jv{ED!hc7VaI1-r-4s zYs|D|DSvDd8xa|8Xwl*cD(>Efd!|g^he0;Kn& zhAkH$4q^3AuPq^_1!_PYGrt{eUhZWShRWHMV)f})E8gCTQ!ii2tL#(LWs-_z>;a@# zF8eE&th{8zQ&b%Bsk)5xjRTv*1JL`Tle^Neyo__rn%O8VwEn_CrbXtU`RJZJlyTNL zci(7J-BY8GU!6U;-51jPKB26@t-NL@wrPg?L{CoQN$u1UIeX~sF6uv8vD=Oe1_?q;vKG_Iyou~z>jydByRy6xgF>;No4_- zERU8 z1pQB6YOcRjb+{L zje*!0pn4Jb_%t8`9>}6wzBZA!DLYHv`gZGKt~u zuVpXxOe%|vUux3>m;vblZwGh*Hca`)M8B+=)#{Bc2G=J@>C{4N)s2NFi=9JJa$4sG z1a=^yl1PT8SWKgvT9uX_>OD;Q&9y;O`+sIA8_!y%f61^T0@t=;Uf*WBiG#qd#j}X> zi@Tvw*xu@iBDM(4-#Df@Oyzd+?pzwnJjG0R*oW$^$^7I{l8I`)siy3nIG|_SMonIf zMkJe<8k6YN?pXsA=3_an07-ryzB)MEY)N)g40~s{UYKxB+0{pwqF*fzbOo6D(hd2iWeJm4vh!-!W}n&(E8 zh{eHnU-0(Lp+C2EY$hndxiZrqHNYBAYlgN~?LMO|Fr%^wX7=C4uv&X=%Tdu`R@a)J zn+1w%tI{o@(o2n^8)>K5#+Mh&<(x~J&&FmaIW1zWC9jyXFB;q?$+!d&P&#hS55zTO zNe)bWrS5E5J=FrPzx?4muhqFcOLrwy=I|+G?>HO^W-Gy2a_#Xy_;_?28!^~txLqfr zyz3Pl_uJ#%XnJC1_Rn~qwmT zR$`FI>SnUmYpb==XgO(ilT}_YsO=@cxO&O0LBZ~MA{{%>&Cy4UomdGbk!1IkeXaz; zrTxSwXU>*0h(v}el$|=cXQ^@yOd?22kCBD}IBw2l;Qw?q%fX6Gp@X{Rj1xnIMCY!V zHE_9&g(0m)szWhNm&1;NTOn*|7IaKkJJ~g~bCC(*J4d?wbTJ|pJ7?_9;$v%f&rc9g z(^#9BUx3kKYR0o~#aXcC6g#){=U$@gpuO55X2Kt(LE+CG6X*CB0i?(Sn`0~c{Gr5Q zl{m7_+#(Zvz^~me=@r%a5ycQ~{*Z0>^i?H}O%4sLi#OQ@_NaT9q~qnG2tLQzKc>>_ zhFAQcZk&I;?ZoMMvW!^h4egFq-53)HkPx5M_<#mG;L zEDje-VM#U}(#<}E$7g(XAwj~A@F=_fAeMwUN zksB*7_A&`+yI=3Bm9mwn%h|tzEidoTcV7;Mn)?XBr~al6HJ8+|p|K98zVOdpXN)>5 z6$B}%1XmG@mZ50{$pCvH0#T9qowAl7d%m4i=JE7#lamx1!4+zkN3(n#n0mi0+{U)c z+&}LtEa9LEC-Muy>C`HC_oSc8pAd$PxCJY4lLN7O(IIE{Xw!QS;-iza#hg!9Eli!R z-k7Dxae3N%^)-p%42L=BIOj zq&4irmE-0Bpn`jxJcSJHXJv{txfWce7@cZdx|S8We1+W)8- z-fyFxy~~u870^Zq|18*uC1ZdIXLgO-2vzE+d<=z_YhYm~pLoN5$}@YdP1uk|aGag| zYBWw*<#g|1GN>VGB9X$Z%7Z$#S#}Z`$Z)~)20O+9NkS! z1wOlzo`#KGk)y4`dD#ybKj%u={nzW0@F(*Qqw~($mth-rWk#5nhSzdhe2&7G-Fnvj z8c~H6@8gHBTM<*T!bRGcLiME?AKyDaZEx7N$jXk6B~JgL*teI- zM+|sMv74uN0yKL4UyaH)xrR^L&~hxTko4>B_!JNq%iH9q+HZGxGm@)3K;grtPBuFr zkI`IGH6y>h>e&09)p8tNuSTd$F}UIrj$fEc<2y&bm^3-DEOC%N_BuK%V2YvS4!oPM zr6&Ne(=!DV(en}0laJW>ih=UQANn-{{c!>iBwasz-_fJ^RfqB#nDyK3z5b<$S4F53 z72VXxF2lV;DVAN>ZNRaVsQD#1L|SIh_J>uVraDCo0!s=yeePf0rsdzV1IB}%-!*e& zTYE|l?%M6?nw@s0jh$Lf7K4mG^r1w4z+X9EJjh=i>!}QRpd5rlRG%P6ocuWIKtP*) z^qq+&__&caA85_Oe&kv@c)@vohq+$w7MFD40ZQJoh`UZ(nBu+S zfg!AK=vyaw-qbQ(S*uwQ8tqqml-#=W=IcQsUKhD4XYS;6f3kd(>Xx^2wmc%wdVi!ZnE=oad|T6(f>~5$DR!-hbhc4wC%c!lc~0K z6%OY$cU^&rB(lb2hniIdZOO+p${=MRQ>znm!JQ5*A;B&0xlpW8 zOh{y~C8agyN&BU%)E5{|b>e%fsjC!GMUar<$~wbGURMF0jjx_SnRCHMYy>SOiIyoDqvr%;&7lkIK_9AKF9X{q!~yybi-#8&dx z6qq}mi?~jsGWZE8aJ%XIiyaIDc^^fRiUm=jroV`c*#l%=1$BB#Q5(~n6*&V z7n%&97X33}$$)m4P^(T}N`s265B^V{ybtNmW<^xVqn^rE_P@v(Pu#3fvhQfpUl*sz zA1a(a=0+ST$E5l#oI|GmKsWiv;UYL>Af77A&!``E+kffPuSu4Fa_eI-7RH4UqW*0Jo z0QQZFJ~zuSZWlIU1p6V;HIkAqSoP{NMMzMeV^D>E+1iStnL>VXd91EA;v1s6h-Dc8 z5qBPAt?2ifCf8WflWqp4E?DfQ?g@o9G_{tI^T~B`2u>LLYv{EiEJ-DITW2ke5o$fP z@@?tgVB)F$)iy13Sw}~Qaj}(%nSjVQLE(KLwB{YoG6|@C&I|W*PMk;i%WTO_&SVr} zWv|GQgd)?hleucrHBtQn-+f}F8bh-zTD1pz3IUs}BIox=InJ}&+}~~roXfGRZ`t-Q z9QS8}Iy)1IX;^@>s3)L-3!1G35-@8OdzAcT;sn8O7AEPjc~*YgNN^nK9zI9kdS7uK z-p8Ef?rR@J-=T03@MC92|F+zX!=q7G;pmV;!5KKBg>lvtVrq%W@I7j(5Pzesm3@{v zrhA$;js54qdo8ECf(r|`)`D?!S;FeiY_pH?-c_mn1yBG>X%yS2!o{vGo8Bl`NXCT} zZlfeUe`__Z>iDrz>75G}VzuH;Ma^|Z!-XnA){Lu)_{4}CStq}9oi;+r_rXY@qT~U%(KNnS}m~Ilwp|iw3L(=Qnc5w+PS)det&Q zE*3m^l~oFCdXMQ0gSKuQOZkmDKiP)#La|1r=fE@(dKuX9@yFltEz`@m+|U&SeO=>| zHAUdH8)}|af1+4T*3QJ9Rjdp6C^sYha9)5>Z#n7lXdQ4bfNf_|pucB3i+`{dWqYaF zB0g*EY1ZVC%h7w?C%(y}rLG_7P_U@upgZ8rAKWtcO&_$wIiD zE3x(q!6;I1v4p&K>+1QH@6iXP>C6jJ+)Bm>7_(O^jLL>*r=3TfCY>Vfn!Y9IESQa|gf38v@p zvT--aPI`;nzOnxs#I^Ic1fFZB@Z$dfxeTALu7p-|9(sp}!|FLq-$7D<{=K0k%Bn6n zL1^3f7p&zBoMWlID!Bw=w#zI5lC-s$YSVY_m8lBVA$&V%=Un4(U-0ia4m^-iD&j`i z@@&%4F$j~Z^#noLI)&*GKVcT{Zy+ZhN=RUW%OkQOlOZSnLbeaNglv6-w2y}bN20r} zB!U0ERg;$lhH9`{KAQX*UrY&t4gZfryMk0;I5=w3XR_l0|A~CnsAR2VOG*qRs0u@& zcR<@lMw3U}c^RKXcS^U5czZ2a#4>sEM%ut3rH*PlhFZ0Qry%*h1v_eS$++6}_aVfr5O zANXeWTwfu_EKqq|w(cAroz@FhE*IZ8H}dd3q%r<`bR?c9?8-*T8)9E@GKM%et_$#i zuQ(TkEMDbPoHqX7GXDlCsW=i66ihy}vN1~XB;BqTwhyHu!2ZmSzysI;i4;h~O^SX}*!a~SXMx1BIH zbK0YQ&MDml$CC&-_wF%W9%W%dz}38mPG*S~f1HR;uRd2pdM;|e%~decz)8*}yO2rF zL*M@$e$9tXa%yHzKSAa?)JhfJAn*Wt$P513819MgV7PV(AK?89g-2ryY{iGQ$EEJ8 zPZT#ao>TaL&q>;N z>!aQ`Jay*bkP`H7Ow5Jl=|#UTyi9-a>5yO78d?yD5W?-lJ4tx#O#DP;H=UyLr@d8!V|N&< z@rH&uXSG>}Hg*EPdB^+()$dwZv&f@}13(oi6| z=!3sBRlzr8ghF2yS+j3}UvBE6>3#QK=3-dfb(SwQ#BO{GYcQsOxq7)B0m(sO9$BXFCzR?R8i_+Fzz(gg%SbupGrz+07*Aq{`!ZyGc ze$4_uj$XDDE?Iu$%T#!ND!PkT(r0=D>}joRm1reZTC=5s_D1@IJMSAymcNbHC%6SD z*9c>U$2d{D;M`OJF8TLXnM6gnkIsA5cG&Q$twl_t_q>l*nLp$Fp(RVEwS&HQ?P zJYFC$uX$e8bIEQV;_Yn(4Ex!&W3?rByPq29ur9AQ=pR-Sx;^Kf_mqXjeNSk$Pdn%Y z0|s!fgeAfASjqF3NK#J5kktrS$#k+>HP8B6`f2PhAETTeyM%V`tvB|UFeEmH6^1OOW@hGy!9k#J9un4*0p-V|V7^7U)WPup;S6rW z`;rESAmGT-hUpo2!5lDuxf8rvRq3?q>cmGsel)+eqUJjb{WDx|th01M`cG9leTrl( zzZ9P=Dy|?$J?>(fUMes^;3@rM5zm|RA-A0=O72?l-*_Q^F090qfjFCKhP#8<8<9M8q3&<#;^JSn&$we&`7S0n7Q&LM*N z{&tk%CH%se_aQO=qq+x>xVboyG~)&g$Bds1^}%1bARnBGI_p(Sh+&d+g6pyjrPiRD||z|mWe&G`w$}*O^RvR zZvcs+$Q;KWx4lJ$W`e9_ZrbLr+O!E(={T`8q)a`QO0%7O z`^8?U#pUmmx&HVM<(LP@g>YtB_qpxASf7pf`EzJ{l`;`0$}2S3e=4&`czCjG&9FpG z$i{~A(z9>V$3U~W3W-X(6-#JSh4W+K?XGyO3`Hpa?4x2wb!YE>jEg(PEVjBrFhexK zCm~5t1gByP79sn;KrX0NP-DR~G;Hku5%e_+QHCOs>mXg|U~7$aA(hGEQAdmW1reP}C>RUFd>}%3!!Tw7ghGYuP|)%IFYpBa`4>YBNPM&X@_&Nc`l#5@-i%B3s95skQKwcI zY|b?--FAWPaON||s-guOEIfMpqNSFlUl#7Z6qMV)bnBGRU-o6&8rP(H%W@d&IjDr9 zQ0&;mv#c644ssE$f8?H*_ZHYHrBTCcPb`Ln5z`*a`|h?bm|!nfC-h+WZ(SvEC_0c2 zvKj?UGXXfVJ>8e3n@60mC^nvl*4Txk2R&Ri7L;{ns zNksnSClw(pb;1SS`)f83@FdcdG58=D`PaalVN_By~{+|G;_M zc*qU13RR*=<7$OEg?th?C7Fr#FM-s3<+h1!Jcd4LYAAulSpxcmzKxjgRnaQa^G zUU&y20@WN_^%!32=}WRffGqMQU902A4sG{02A#p`Dw9;8VsF>T>@&*V%Ot3(Hes!N za$;{w7SD^*W710*%^QJW7e6&d~C^p zCyo!N`8UAZ7M4vw6FuweYgLs3k5r7y>d5HMHO1<&sfzKT74>rE!|jTBR@0-spHxzo z?tO{EcQugSdr4!gt%6zk8CYsr_7K2AJy90 zU(1t!B%d|ASMNNQU>;Qw`gb{z$@0`xnm#)*gz}gIqJC|b@$7E%4^lQ)5IwLhn2Yvn z+BAuB^cSx>;5n$BaPk7nDQeXabmnW-IW$cF7I$4c=Y7VQclP(EEwVm-uKokb9`%`DkHE~I)EQ@@+2DO(W zITj5X`=9BI=w#w(-ZqdMZa*E?o7f8n4|DD$kSP&P`X%v7sizM?V>hm54iQ|GN5)QS z^JBd;@ucXDjeCgo{G~w?H*n!>Y9eo2AnY}ht_`tScgX~q!oQGz8z!~`%a{7hvLUPk zF}GvtfakVF3=deP#>S)_Xd1BEqCVk;Ck>iv0^B~PjH9eC z;lxiWg5JU%Vo4PRiQ(2V8Uig$42+y`3tww%9Xt*OCgG!UK~+WTZuFU4=xlL_kmw_R zc#FSpNpHak*2=DGK&xn#TjCt27V7^$Kx?zN+2E~_lQWyg#7NL>9H5NZ+G&II{-ggi z%{E{ju)}W~1v}YQ>5Ifm;Jxfmb84i~95In{K@D^q&+V}!#D6BdzcZW`EVH!W#yg2{ z_gP`_A3iml7r05rQcMea;)qh2T6aw|r5VY1*JAkIn!om!9$6DzojKuIA91J?s6-s6 zB;O)V?0>(vgVO>h{9&4Liy1)pnMpTJ=o%(w$3W2B@KU50ZPHQQ6y11mOp?ZG$pMPAk|ArwIHGDiHWKE)8tr@y?=Sz5hxHR>J{a~h%v zv!I+Sc7)O%HY`%$?LNr$7?SlG6bPZy7mRV}8KzCN+j|{pvUoV7y+I*6j6^IL_zH3f zvI~_!gzw_-n1L4vE9@Kbh zkHNR%3#7d37Y9bhaf8ww?+tZ)uPeK53&^_;17z5!LJuW)euJF{F`Qf9;`O$HX(`s; zdBo_#^aV$IU3fnM-*ha|e?!=Q?=M6iI&|TK^kuTw^LH0ei%yM2%4q=A3ZWc*M#5(o zh#v;IwFfOmjQDFF?{Po>^kP#u0og82Rh?W)f|o^gQ_MUEUE%)c;0kRUF*uYZ zyr6|DQOf~5B4uDSbyL|X$P1=}F4?2+92w{pMU9OzCyN};xb2z2b*HPEq*p#kP#`mSz?2NPsHT)ZRTs^yGK|(doiA8w zO{ZCwZuPJYRUTRKG6x`>@eB+3WZ}rK90N7Nwnk(4SADY#4B&3?b4Bf3z+;rtkE8(< z$pXu4Cp3&c?Rm$@K3BCmNi97muxknr31<92fU;T%Z8P;jU5ItSXHIWw^>&$4DTG)0 zP3&Xt>54ZM|5%hO--)`w$@4<>$H4bCr`2e*S;Ec(`5E^G9lb)Zh1MZ>i)6ip+z7-< zo@+ZfS!V>NGuMbOUw0*Z)^Zv`HCn_=?*kSkne;$Qi8grX2)P5z@ z?=W7!yIRxj4i=x8vV1IfzE^d0UO~^-rLrCiAlVEfYl=i^x+K zUhz2pF?m>a;^orR%pXJPZ#$!Sa>R{J{9e4>?MBM`lV@)V2kOaz7ZOeEUi0w&xJ~3D zst!Qx-r6T`05`w`?Vm-B&cP4BGsFc1PivR}SK1uWvDL#2!dwhD%C)Hrw=QCJU z2Yy0T94+57GR<>{GTOck{AlK2t8luMC}5<`r<}Gcb%mHLy9t z6<;X9)RCEMU~bYZ<@K4oro21AEE|BfVJ=oziJrLOMEU*|WtgojZCSX>e!3CN{J-*f zRap&kY9>)xzOMC_hw1$HlwJ)c(eVOq)y7=V3SO&(@DvgBU_FPC>fi# zZRq;zf$oKo@c;yQXF(UX23|$7)P4`EAsDb71UU){wmyz@C-KY?x^7Ou+iyQIqT6{o z+I6v?4VcNiz}8fr8&eb1cGP~YDZ^J9w*5a1iYR{c-N(P7+Na1LlOn4OS5Oz=Xigoc zJTPV&=(Lfpy;Xapo#yE7b)(~J_2*Q_y*&rao_>`TkwCZh|Bl;H;=B|yjH#e@B2c8- zt07=d*S;83x|zs+`gLT_ZEX#&g!Y3%Y$6?t-D2C=+MC0hqr-@&c8p0lSN)JPrxE43 zCFC?fUon84BlGm-N^oRbT;FoNqm%T-K>O0o*QPW8I6}zYZTp&up~n*gIbvD+NAPJ| ze6Yl#^EBy|$oMMQaOs49&F)&5K|kFK#70j4^gu&Fp!{`IB5hYdH&@}U+R4KXm6f)K z=mU#5rU?adFt|Dpdl2EZ$EArmg(vR-J#*q81^X|xn$WGuuC|a_`M9=c(18~M??*8+ zcrB=*N%wC^cY?3KjHC>Ycrrki0@3}(K+%&iK<5^#5knbU`x%S~mn-n~G_gL0G4)7o zy$3ZZ89f7AYN$Pmd&apKN|e6=9UI)2bgjFxBPPx#`zRu6VT{mv_law`+Tnxyyl%Wyynjvak|oF$k7wtukpms5h&_>LYNux!{tX?8ZjMm=jiG;Qcb|v zQ6P&WJYavXXbK{-xL}jXCCZ1p-k0y~iY=^Y-ZvBCE8@59jIL?*rEwsn_Br_jY-<3I ze)r&wedjnt1^YwvAZxv6CXsl7#3CN#Vc%=g}AH~<9+1VFFSF{68wVJ@3-a$ zN@&elB-SExdVvMaj{Rui_y~?U}yRCEbm14iq}+(FO{N`g;Zef@v~59d80tH}x!5GgjPy z<&!%Nm1Td*7xSF!c!n&6g&{#aApO`$>E5fgv&vg-2-7={pKoKBUg(Hnrg$+cQqtL1 zzPNlpLAN0&?wArzexxP&B~wme1vfnOjxeOi9jEG!9&dyAcZ+RproLF!rP>NB+peiD?Vo^p1DJVHr42ta_TCsckS(hdjFd{k%o@wwRZVUKy z0ioxhLfb7RR&*}88$)+dH~Hx_0j~x!vGU9(u%_pVCg0KTqkUl~rlpl!2&x z{n_-Z5P8@ybFJO{l0#u~osk2tIxHw9X&nX_t+SKUWJaQCx4Upecgt(l4|6h7^3K8?%o&2rtYPFlLCps5w& zx3#HA)Bjnn@sK}iZN|zXekE6d9bJQ&`iiez$$wcb@66pLtLDxu==eR5?@6A%e;#)3 zn=(TBPG~tIJ#yEOwkPkC&45e>5kM?sIQc&MIm5llv>=jY@N#mFG~lcIQC$7d`#td) z-|U$3LR2w7`)+cu!pRMHaM~Srv@!STyxz}gjG@{t0Gaj3@cklS)`RYsrPpLn9h$4e z+M@$q2BPGUZwG=82W>g}CRY4=(Qcn*quPrL-?JLMoRe$rygqq5*|$)GpJ12TTaAbi z@Y_1P`unXjOYL?0?A|bQ&t&xe$MRulC8f%$!`US@3`hISmP?^hKkSGfk z1xkS?f^8%)P;EMI{-q-ZkSlaMBz?Gg8_-rnG2*s|V)({79G8JCSTl+X`n#w^AC?Yn z6dvAf(0N;MwQ&3)zJYa`@n(HHDn0G#Dd(Gd?cqfi@JYM1_@W*U`ife5SNR?hEpcVAZMLG9Hl$jlKH zlkW92`zSz|!Pzxi!}5|#=$h_Unv!Vo-IuP|VvIjsQhy@K>74^@M-izA3Ztt(2iLtc zb>1>r&RSavL)v%d`kgq{pzqvm58;A` z1C~-xA^h`Bhk93%S!bzBZ6hp77|lvna^R}lUDDRDoS#qbhi!f0Y`k4K@z4S~iJY22 zmvzic9b}I%km645Ff4E>edkAr;OIX4-Ev=KAC7v9;AK$g=Ei#cQI!x)>y+u3ILXvL zs?E1kZrYGEFky_&HCYm%@hGQBz>L=ilkcjra|!2bA9q&|PVFKHfEmR(%kGR##-%37 zQ&d&?nM5H!1~BLxvCE-~f@;mTjBT$yQClC)PMO=x9f~}jXdlwl{=XpX2P6yNc!4va6*Lnsp;fp7?BBfxbWdVp7jPEN!_qK+?Z57e zdnz%IOuT;BNDO3JVs)WP5EcMUmMe*z(0}Iq@LJ$F0x5(TY$Q4|^(F#!LhD)fVbD0j z-{=1VJI)s|q5bBHaJ;|e61(`6^aqVsRj&Q>rnAgmC>Bm)7hYr*01Vcga$F@#sGW>a z@SUiG4ook{DHE^YF4PLzjFaD#QIJwN>=qB9$>d6?o$PWk2c>QM>Q^JY0s69~F=E@B zGZ#(#&R@7g56N`sf=QP0KnjcHx+Mbsj?(f(a0UWzZW<5)K>6bupMg?b2*`4n#4@`0 z_V24!daVsv3RagIy0NFibwc2Egl*MS1e^^C+JR&Jahus%RzsIxma_d<6aq|C6!pjU z4m_80PWQAoE*Ut&`RCf-OlO{TpN+zKruwUrjb?OSy>dd=nS64Lt(tQEmnQ8K1>QP# zqyoRB4So&Ujw|(5ZTzy4tH%z@r)*Z~<&|Bt2zTb~E0wBn6R&mO6)L;ciZj!TkoSdg zKl>^?M7tUC(Pfyuq+i48>bE8tmO6*VelySovZM{MXoy+XRMz57T0iLkm7Sn=*GBhB zge2jGrPV`z!OiL1pIM(CpW>f2X3(GTvq#r}z0OWgk{vD5XN5`wcE#O|n*PyV=6gXK zLRO}*>}hnS^KPs-z;ERw#f?W1t^)H%@>TWj@P+nwRc#X$uE%6pr{}kgx6*p;WdzFO zKghA4E$>Q%5PBXUeI5P*bvo-!p9*_Fa3J1gCnylll@;Wly<3$aD6lThO`njoRXZ9m zkuRa2&)vU2^`D6qsCl)f3F_;BOhNqbsU1U0@wh6U%kSK-Woj&ZJELmE2)Id)>^Cj~ z*Rz9eZ-^Mj9R6CbxnXEP$`vy97KdqQauPDWX0}^GX-oxD8p`?ayPQ{cwvo5ngs%3U z986#_0VOn@Hb-X0G(4rYgq=A>!|TS{J=8<2@3aQ1(Z2A1HyO%PQFWcBh+Ap@HW{2& z|1lYM8-Kz#V2nG)MKmHPM$*JZUWfcBW-1O!-mcX;ZNtnrny8hoiUxqz`YxpmQqm>N zT~RwXI^auU58b#DqoXO0H1+K(->mc5zBixLQbUKzLuVs%80atMz{HdtEnhBUD?)i_ z7Xlq;!m%EBhTjkF<~WZg9Ir9*UTCr(c6nJo8iM5eDGg>`$6P&M{Bj;CM(R1|KDELt zCftrJ-TqVYSh`u;T`afyikZPVq)+u39(Tc2Zsrj+;?J)A(T*LS6Wd$#!Xumwt>7e| zP2L#C+KU#=2gIY1->c9s{Q4;PxB~4if*Y z81Out@*1mASaMmb#X>yi4H)_}Oc)`(#yP>utG0G)PO5KeK}4UiOpZ!Qo}jEw{~tfl z!l!iy>|~Y)`r1kCuNL66cm7^0{S299!G97(4cnk{W^5PcHD~Aywd=3le)@v$OmHwP zSJc7LAh*zyLLmZNz8fW#_h&W-ZC(_6W@)Z&{_)Cyj9iv?(Dc|N5jGl5}BI# zbJN};eK8MR9J9{cMbl~s_wlCxzhmeR0R<0Jq@xvfx>Pn+#QEU)Y3AcO&LuHtjM{L) zW$>sFXg*D$ZvPh==onYMeJlDzQfHXY1nWmZ!JC5!f7?EE+Dr7+RX>BaO-{tOiw(L^ ze~+<31JT2XX#<@@!N^>K$T#E{$uAdPX44~uc8I3Y&Jf5#RF~`|9E)nfTwPSCHiDfG z+y3ctG{|_Y;Xut}$k9C6offOo3;5~=pU>xGw_W<5MR!KmRWk9J|9G2T-1+bZXPW=x z|M6I@eoOxT+W5u=@dB7@e11?%)v|SMXjLKSNo+mwL>jPYN+B+*FY5dWW&LDtb1hUg z1Z8c8q}ohuZZcsuPh_>vDao#s6Loi+sMyAy=X!>lp+A{93NU1^ zuxG7G6xYx-GRa(9le#Vo@e1@hUEq^TK}1t=VI%nxR2W#;VJUj#*;iCB-GTe;e1$r0 zk{{yh*M_p$*5j7ifXEAOGLZ7sS>JaRU@T|N9Pj)<&2?R;Qp@=b26@oej~0htoOTSA zQnAkL>z;$<@xpX{_V~fA!eYs|UMU0gpe%qM)7tWu#m48jOpo1cjzvkD|ExXAt~}v@ z+N7g~`}znY>aonp;@Rbrw`Zn4z@&KbSGY>1yN*zYo^E!Hs z@S}$ExBBJ9(v(l)g0r_D?(QJ=6qS_@#Uf!T1OeJOKP3U~N%=Io(K0ftBc|_FSFbwD zuklI*cbbsk>?vv?J7$RuX^5N%+Ef)`rr2)5Tt}wkhHm&0WWpFWzkXnriXFoJ5gy2B zK7DM^lHfX=^Mu!Z+Ofq-QDV&SLrzO>*(#WcTSXO}x;47{D~RrW?7g8|Wrwu$ohbYE zggXEg4*5g*3doa~tCV|v5EJqWAP9jW_4!}ay=7Qk%holBB?Jf-+yex6g3HF;-QC?c zY+OTdcMrkcAvgrr;O?%$9eRgz?mhSY?)!B2kN(q7J&dZg)~;2HT3U0AIg8fW!$l{@ zwP#KXrCD3=;OTh=>bNsB1Ep@)aqK#~T5IOh{dTvVz`ZBwdQ`z9&t0>@<;UG(m}bji z3ybH)z0T)WLaxASvtl4ugDkcSmsLil=HxFrbz&J#0PXYjDsW^qlJj>1v=8^+z)lTF zJ3T)tcDQ=(*4S(xKt{m#u%#!l;J) z(;OCxq8t_p+C%kQV%I02qY1nPlIA9Fxfi#zXy>ll4X z5Z?j?T-VW9?xaRLQIxCu^Ftqv$FExjF67-aZ-B*o`;J-T7w_vD_N0gbqLw4dwK0kc zJS9GSDe4yuOLySc@~1TLTtIQ6H42`~Zr^fq9_BNSE&#(*NP6DDmqK&;&4J-T>yecB z)c)ZJLKcmI4AY-nt)E1T8EzFeXKNbNA}&@dM(J^1czj-}6x<$q@A^y>N6DvdtE#ML zqA0k{F5F!mo*xQ&Z(EoM8|H&b!o}4uG z{Nf3Z{)9HbWW@faXK)kAAr}Wc+*e zY1Gndy;=WbhPZe_gb}3h_-ETb?J8VIHCp=~sK4N74{6$|Co)<1g^3*MSlV1GsoIy2 zRD?Xy9YctGn^0wHA>|TU4&{{deaaOy2A=Y9J2HIXm< zKjL?HnMm{^{kGVl#ni0JQYP^r>}gD(To8#nt>|SXB6&P-2lCF{FqbjxdqZpV!>T!s{Uuy(r*@>W z!iaz&H(PriIfo#!fK3ptJr6Se7_WS=% zuho1r`1Sodpx#2KC1n%YoBwmR{=H-C)r8J7p4VoSta1LMxxZEwzURna7JGb>Dw&9y9s7oQexcA9Z8O;7Vn)^~anfP< zlhswep9D~|r{mLuf3k6wz-B65FZJ8mE(B^GB(sBM*-i(JFEpK1o#HeEZY{~pSC()| zkB?I&U!THJywxdImhyeJs$LQY4t>ba`JO#puXizx+Rdq;s)!6BnBv^q&K?%h%!nS=#* z-Oxg4o#c-WW}`9d;Au6&9*g;g^0+^|Q@Necxc~qtGfjNGVbJi&!EY9$G2?`I=!cbM zObz;C{DlHzm?Pxyw+>qP2()nvm<-W>xSjubmi~33|GvXCoGG3Vz_ox-es7=S-0zuu?)ew0=S-k34@PD09s9eEoTNY(a?aoqY+JV zK0GhC6*cY2=Ipszx>-h&7Z}2F{nNcFy>8*(IvRCjYBMu8YoQzBYSnWUEyYa;BE}67 zEycT`lDJ|Sv52#XXWbyt)bD63O?N?7+^2aoUQWBbFuRDOc>9wAg~vDpRik`xmut?hHy#6?3~7(2p0`J~%^Q0kqKL-+dX1c&`O5->`$~Gd!QxnY z*_^Y@4SZa12ppgT8!4^F{L9H4k+b~f>APJc&D<%;QBD2z#> z0B@_wQ%uHgcQJ`0K2v=n)BW!muI-ObVaa}VEVCs{-JVNiAEZd4Efnc${0)zAUvuKJS0k?GgMKYSF))cwT}fIcr9^m*N|Puzwl zM-RVp0Ly2(l04*eA`%Uz7cW^_+MKiW?%%`CA=2~1`LEm!ie{PC(%QQI;2E`O$AWr! z+^?w|cemA4fWM(o4OIpS-W_{rBmArcGNFk`8Aw7?Xz}`mXkd+{&=RpJ_?FF9%1eUv zcwtSSfa$(JCVI*za4QJdl2T813?>&{=Fnlf$p4Hq85pcbVMNoK|MzhwTUwfD&~Dq{ z4)0y$@C)tGJ^6nQGj)e^WQUp}z~;f}EfP}(OXE{iygQMMqvBeos{qk4n1C;=1aT~2 znueuG>)vfq6dxQVlU3rK&`V#6*~qH$e~dFTXfbRryB6)oZ}ohMX8Mp7%efi{rr+bx zQ?bQU3hswygn7d1Tk2TjNxkc$1klpPoS;j6P3+pRulzaZf|dRCh(G3DL740Ee8ZF< zH6iC+-v#s+&YOq?C<@px5~K?rlF&NEyfIRDbD)mf#CtZx$w;gR@`_vGA<3e8xBM7H zF2(+j{HYI_`i~)>BiJ}c`)fGBRD=SUinxwrJlNS*)xdG0@kmYt8--%6TOB5?`#UY3 z&#)dwL>!d1@}~`@?8Z|sjuEbm{<03GX1mRY9#Z^NtLHeCNLa#g{T72jlSbpTc*+?z z)>iZ(zt2@McqJmXMt}Hh{wEQkjCCtI-SuxG;_bx$AR;bUiN@rG{|6IMv*P(5Ohn`V z!bI?h|II|C|1V6$1(=EWs#W_J6H%TS$C)sf$2~~+uozH#AlR zL`3xcKQR%=|379ThW@{0A}A=zq@NL>PvviqG$yi8)p_6kmP((gxhHzNk~eE$t~c{M zD~)b(NGo9&hEh|0A(;o@J3$I6&s2hC`=G=t^+bEH&@@{;SMX&eZ)^Mc=Nu)o?#{N{ z=7XF5%B^hs;E}8QI9TwZD4I!jUKO87ccV=RVx{T5Ta*sx0<kSL=LK94B-!KY2f_4yf#rv7KwpF)z#s2~{J#es%-5fk+GPhob8(mhA-Fie zC1jXm)ipm~B&5AH%u7gura#OV|5pgEMi*`L|FH7^`E9_zNUgW8JNma3_J1~O^T|0o zfQHQJwUz7uEv*xNST(^Teppy%d+@Pp$T0k=z2yJf?@yc8sYsE)tYSK+38~7$W}+C(C50s;3o8vG^fC3vpiI_@bE_Ql$Yb5K%Lu5F7LI#k znD0mKsKVmcJyt=p4`Jdi*9IOjANCVX-CVw>7xGpQT}u7<$vu%s8%ksHE$x);VP@0y z)zr%rSp!>MjBB*S_#=5fzmuxR?N>P!TmH)k`4Rp4{f>Us+Hb$0i#Xeji|XA+y7 zCpwt9Z8hFTuA3%545L~SF1X0X-FNg&n{y&$q39f#hw<|42DC0qwUe%IXXn4NMPDz@ zyYGch4Aw56Y9?XaEHnk!dP$TFmdySba87(05Y}*5_Gtd0nK^mbbWPQ8PMEXx+=GB- z)_3-d`y~X2>F1212jv;lyYtm_%E%MDO@sT>D|=9-=J&b!IIE~4eyg~RgEVQWv$JJ^ z!#D3(kXJ2&9JRRCYQs1BKX2kzYhJsfR}0UWdqmN+nLcQ_f9*6W{a|u{Y_j1H49#l=mbooB0>@-VvQMm?lwG3H8F>YvOimD2p zf9_fQ$k0*4CwWG2Nb2{6(b{*P9A0m>SqYiGFgv@=Ldm4M9UD`>pC->~(&=@Lw;;#O zUGZOFD`ABbK_7daxZTz7NyW5J8EUG`PaIf+1l6SGO-GsFIT2e1l6lv^iNga~W)@2@ zH9t!i(zdHbFky)Qt8%p zx$>C)3MW{a;y@rS+vMAN(A8>L!MalB&0$=;&g#wU;W7Q{gB8bn)ada1OBeT^ueWR< z2)I9@H#e~4wXkQR);B-hI`MLk&1~ngawMUu3+i=Bp)rVPok|U1JGK zLK#aUnVlwcHcI|Q$gwZ8TOoZ`_X)Udt2EAPkKxX~pVr^bs3*FZ&w7R063rrKm=>!q zGE@LcZG?yIRmnVkh`k@I8o&`+SZDr?l4w-`lFB*Uu~=D_o#dJL7AlwuYoU8(k$IM! zqv+u$2K|LKn8i*-V!|labxTDeP&Q*mUH)?z$63+UZuxKj4&;wD{=@LhH2tN26-s12 z(-_u3kk7jL<>T+)A)RThwsp|ZD)o+D)89h7Hj(20cMnW>(o>6oedAG6hT750F_ z=3dZhG=#x|V1}Ya)QR#pLXHG#pNroE(U}zwgyfoc7FVgw{nP8iDY%KVS{gTi;vN*8 zk~cytJAr5O$IVW=9=3HVjsoJK_AMdXnSA^tn^fU8!B}@B_O7>hVt`*PO-HsW#sQmg z?@OTBq+pj&U@?~~UcBW#kdMk-s4 zsLeF4)+)nFxGh$-zwffUil-aeOt4v&p$;Xeukc4;`fHQgIt6Bqvz$=d0b;;hrsavN5qS= zYVczB7!9(vH9Zv-s?c>v{4x2SNE$e<#GB`WP3efMqO^tnUpn5H6psJ5I^Lb&|IqO! z^C7;Q3!34_9Mi{2t+?~}MtcvEzKxadtQF;^jnvhgY;tgLX6_5D0JJ=TntOi9W#C+l zCjK* zQ=}rmju#XO9q-`2$HxoHOE7Jim#f(Qw}N+s=pO~|{!#Nk3f>yPm)f#MeszPM{}k|U z6~wY>oYD0fq4WLTZ0s4caF?}=OV}y2^q}3zySc-?Z$jqScmHgfo_qomC`+|te46I7 zKAa&E6@)G(Ngez)b-wOmV{{3pIU|?XMNFbpQZ2>K({NN2W6d7~*!Fv}!*I(K8&vjH zQ#`dv+L`r?va01Um#Uq#*H880&WzCiOK)r0pY4&FBKxYh-2&@vhxWmGTUg*`?a@H) ztIY$fwY~YHwJrZ!YwNa;hD`)xTj0@Ooq1|nM7@duwtLJ8)U|)vDVJ0`n`)f&ZyB<9 ze3Av)(AmX-_9t`1YHYV_%I%Kt_0kLR8fxN>7jqk0+3t^ycqshm6|5%_53cd1AO@yNDZaX3_>{b3D0R)USD-eA^12s!|)ynRg|gFF)#wZxHz zrBg41d7TBs!gZom;cI)dasyyy+L67!AFR98$5<0@KNMCOEw~C zsj)UgdS?}PtUZC9lQ4(tpz8fwOUjbBeM2N>bnz&-weqS61B?eS4ih1V`+b-nl&ii_ z*E>couN-6>N^1ch=V?jtoqKt|*HH%K$RzxWGq?`>j>Jn#2Kk4Cm6MtP)Zko!z_3IB~EG~#2If#10oZeg~# zrremrg5RRVm(SYSQ7gmC{UEe&Ww{2539c(saiWy##NmZGUH1;bx4nq(4E+S&mL0bw zm0w0=+$^UNaNCulbDSCherC#VHkCWR7nIc}B1*pjaM}In0$GKTHPs`fyR{AF&CBiD z5Flch2akH}ORg?~UfzN&OY9t{Nk=UVW8S>nt(NJTFVANO4?ZoHf1>S--+F$aXqz6| zjRU&`9Zl}WQMYnVey#YuyHtmy)EusuTY35*0=1;Spk@C%oG3Zq^kkva>Mar>J`cz3 zljyEn5WAW*s&Ra^_XIV{FJ6(|R8)H8A<(Md#oIqNt?|3mJ?(dOU0HY}UIPTp_u5;Z zw_4Dh%WVLiNQ0d|i+3wcGiz&|odE%>R?efUt+ymV|sRUYV?NW})v>V$vZ%yjO`Nqgey>JniKuU@_75|B@O zr%TxK=q&`^DTlLvcuu$*B)Q;^&P+k)L-R(CQp8I;d3B^wJoq7G$ZtM?5I|NfK�c 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

+PNR9Bkyr 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³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

Jsc<0xGJo}}Y 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�`i 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%0D=lHr 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∓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�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

H7opcx1Rk~2>2U0e2$^0!xvBKuOh+twXP@))s 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 literal 0 HcmV?d00001 diff --git a/x-pack/test/apm_api_integration/basic/fixtures/es_archiver/apm_8.0.0/mappings.json b/x-pack/test/apm_api_integration/basic/fixtures/es_archiver/apm_8.0.0/mappings.json new file mode 100644 index 0000000000000..231cd2bbc1907 --- /dev/null +++ b/x-pack/test/apm_api_integration/basic/fixtures/es_archiver/apm_8.0.0/mappings.json @@ -0,0 +1,63355 @@ +{ + "type": "index", + "value": { + "aliases": { + ".ml-anomalies-.write-android_homepage_high_latency_by_geo": { + "is_hidden": true + }, + ".ml-anomalies-.write-apm-environment_not_defined-7ed6-high_mean_transaction_duration": { + "is_hidden": true + }, + ".ml-anomalies-.write-apm-production-229a-high_mean_transaction_duration": { + "is_hidden": true + }, + ".ml-anomalies-.write-apm-testing-d457-high_mean_transaction_duration": { + "is_hidden": true + }, + ".ml-anomalies-.write-auto_http_0x73c4bc9426fb6908_high_latency_by_geo": { + "is_hidden": true + }, + ".ml-anomalies-.write-auto_http_0xa1e2426c5b01459d_high_latency_by_geo": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-logs-ui-default-default-log-entry-categories-count": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-logs-ui-default-default-log-entry-rate": { + "is_hidden": true + }, + ".ml-anomalies-android_homepage_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "android_homepage_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-apm-environment_not_defined-7ed6-high_mean_transaction_duration": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "apm-environment_not_defined-7ed6-high_mean_transaction_duration" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-apm-production-229a-high_mean_transaction_duration": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "apm-production-229a-high_mean_transaction_duration" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-apm-testing-d457-high_mean_transaction_duration": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "apm-testing-d457-high_mean_transaction_duration" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-auto_http_0x73c4bc9426fb6908_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "auto_http_0x73c4bc9426fb6908_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-auto_http_0xa1e2426c5b01459d_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "auto_http_0xa1e2426c5b01459d_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-logs-ui-default-default-log-entry-categories-count": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-logs-ui-default-default-log-entry-categories-count" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-logs-ui-default-default-log-entry-rate": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-logs-ui-default-default-log-entry-rate" + } + } + }, + "is_hidden": true + } + }, + "index": ".ml-anomalies-shared", + "mappings": { + "_meta": { + "version": "8.0.0" + }, + "dynamic_templates": [ + { + "strings_as_keywords": { + "mapping": { + "type": "keyword" + }, + "match": "*" + } + } + ], + "properties": { + "actual": { + "type": "double" + }, + "all_field_values": { + "analyzer": "whitespace", + "type": "text" + }, + "anomaly_score": { + "type": "double" + }, + "average_bucket_processing_time_ms": { + "type": "double" + }, + "bucket_allocation_failures_count": { + "type": "long" + }, + "bucket_count": { + "type": "long" + }, + "bucket_influencers": { + "properties": { + "anomaly_score": { + "type": "double" + }, + "bucket_span": { + "type": "long" + }, + "influencer_field_name": { + "type": "keyword" + }, + "initial_anomaly_score": { + "type": "double" + }, + "is_interim": { + "type": "boolean" + }, + "job_id": { + "type": "keyword" + }, + "probability": { + "type": "double" + }, + "raw_anomaly_score": { + "type": "double" + }, + "result_type": { + "type": "keyword" + }, + "timestamp": { + "type": "date" + } + }, + "type": "nested" + }, + "bucket_span": { + "type": "long" + }, + "by_field_name": { + "type": "keyword" + }, + "by_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "categorization_status": { + "type": "keyword" + }, + "categorized_doc_count": { + "type": "keyword" + }, + "category_id": { + "type": "long" + }, + "causes": { + "properties": { + "actual": { + "type": "double" + }, + "by_field_name": { + "type": "keyword" + }, + "by_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "correlated_by_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "field_name": { + "type": "keyword" + }, + "function": { + "type": "keyword" + }, + "function_description": { + "type": "keyword" + }, + "geo_results": { + "properties": { + "actual_point": { + "type": "geo_point" + }, + "typical_point": { + "type": "geo_point" + } + } + }, + "over_field_name": { + "type": "keyword" + }, + "over_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "partition_field_name": { + "type": "keyword" + }, + "partition_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "probability": { + "type": "double" + }, + "typical": { + "type": "double" + } + }, + "type": "nested" + }, + "dead_category_count": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "detector_index": { + "type": "integer" + }, + "earliest_record_timestamp": { + "type": "date" + }, + "empty_bucket_count": { + "type": "long" + }, + "event": { + "properties": { + "dataset": { + "type": "keyword" + } + } + }, + "event_count": { + "type": "long" + }, + "examples": { + "type": "text" + }, + "exponential_average_bucket_processing_time_ms": { + "type": "double" + }, + "exponential_average_calculation_context": { + "properties": { + "incremental_metric_value_ms": { + "type": "double" + }, + "latest_timestamp": { + "type": "date" + }, + "previous_exponential_average_ms": { + "type": "double" + } + } + }, + "failed_category_count": { + "type": "keyword" + }, + "field_name": { + "type": "keyword" + }, + "forecast_create_timestamp": { + "type": "date" + }, + "forecast_end_timestamp": { + "type": "date" + }, + "forecast_expiry_timestamp": { + "type": "date" + }, + "forecast_id": { + "type": "keyword" + }, + "forecast_lower": { + "type": "double" + }, + "forecast_memory_bytes": { + "type": "long" + }, + "forecast_messages": { + "type": "keyword" + }, + "forecast_prediction": { + "type": "double" + }, + "forecast_progress": { + "type": "double" + }, + "forecast_start_timestamp": { + "type": "date" + }, + "forecast_status": { + "type": "keyword" + }, + "forecast_upper": { + "type": "double" + }, + "frequent_category_count": { + "type": "keyword" + }, + "function": { + "type": "keyword" + }, + "function_description": { + "type": "keyword" + }, + "geo_results": { + "properties": { + "actual_point": { + "type": "geo_point" + }, + "typical_point": { + "type": "geo_point" + } + } + }, + "influencer_field_name": { + "type": "keyword" + }, + "influencer_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "influencer_score": { + "type": "double" + }, + "influencers": { + "properties": { + "influencer_field_name": { + "type": "keyword" + }, + "influencer_field_values": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + } + }, + "type": "nested" + }, + "initial_anomaly_score": { + "type": "double" + }, + "initial_influencer_score": { + "type": "double" + }, + "initial_record_score": { + "type": "double" + }, + "input_bytes": { + "type": "long" + }, + "input_field_count": { + "type": "long" + }, + "input_record_count": { + "type": "long" + }, + "invalid_date_count": { + "type": "long" + }, + "is_interim": { + "type": "boolean" + }, + "job_id": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "last_data_time": { + "type": "date" + }, + "latest_empty_bucket_timestamp": { + "type": "date" + }, + "latest_record_time_stamp": { + "type": "date" + }, + "latest_record_timestamp": { + "type": "date" + }, + "latest_result_time_stamp": { + "type": "date" + }, + "latest_sparse_bucket_timestamp": { + "type": "date" + }, + "log_time": { + "type": "date" + }, + "max_matching_length": { + "type": "long" + }, + "maximum_bucket_processing_time_ms": { + "type": "double" + }, + "memory_status": { + "type": "keyword" + }, + "min_version": { + "type": "keyword" + }, + "minimum_bucket_processing_time_ms": { + "type": "double" + }, + "missing_field_count": { + "type": "long" + }, + "mlcategory": { + "type": "keyword" + }, + "model_bytes": { + "type": "long" + }, + "model_bytes_exceeded": { + "type": "keyword" + }, + "model_bytes_memory_limit": { + "type": "keyword" + }, + "model_feature": { + "type": "keyword" + }, + "model_lower": { + "type": "double" + }, + "model_median": { + "type": "double" + }, + "model_size_stats": { + "properties": { + "bucket_allocation_failures_count": { + "type": "long" + }, + "categorization_status": { + "type": "keyword" + }, + "categorized_doc_count": { + "type": "keyword" + }, + "dead_category_count": { + "type": "keyword" + }, + "failed_category_count": { + "type": "keyword" + }, + "frequent_category_count": { + "type": "keyword" + }, + "job_id": { + "type": "keyword" + }, + "log_time": { + "type": "date" + }, + "memory_status": { + "type": "keyword" + }, + "model_bytes": { + "type": "long" + }, + "model_bytes_exceeded": { + "type": "keyword" + }, + "model_bytes_memory_limit": { + "type": "keyword" + }, + "peak_model_bytes": { + "type": "long" + }, + "rare_category_count": { + "type": "keyword" + }, + "result_type": { + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "total_by_field_count": { + "type": "long" + }, + "total_category_count": { + "type": "keyword" + }, + "total_over_field_count": { + "type": "long" + }, + "total_partition_field_count": { + "type": "long" + } + } + }, + "model_upper": { + "type": "double" + }, + "monitor": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "multi_bucket_impact": { + "type": "double" + }, + "num_matches": { + "type": "long" + }, + "observer": { + "properties": { + "geo": { + "properties": { + "name": { + "type": "keyword" + } + } + } + } + }, + "out_of_order_timestamp_count": { + "type": "long" + }, + "over_field_name": { + "type": "keyword" + }, + "over_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "partition_field_name": { + "type": "keyword" + }, + "partition_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "peak_model_bytes": { + "type": "keyword" + }, + "preferred_to_categories": { + "type": "long" + }, + "probability": { + "type": "double" + }, + "processed_field_count": { + "type": "long" + }, + "processed_record_count": { + "type": "long" + }, + "processing_time_ms": { + "type": "long" + }, + "quantiles": { + "enabled": false, + "type": "object" + }, + "rare_category_count": { + "type": "keyword" + }, + "raw_anomaly_score": { + "type": "double" + }, + "record_score": { + "type": "double" + }, + "regex": { + "type": "keyword" + }, + "result_type": { + "type": "keyword" + }, + "retain": { + "type": "boolean" + }, + "scheduled_events": { + "type": "keyword" + }, + "search_count": { + "type": "long" + }, + "service": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "snapshot_doc_count": { + "type": "integer" + }, + "snapshot_id": { + "type": "keyword" + }, + "sparse_bucket_count": { + "type": "long" + }, + "terms": { + "type": "text" + }, + "timestamp": { + "type": "date" + }, + "total_by_field_count": { + "type": "long" + }, + "total_category_count": { + "type": "keyword" + }, + "total_over_field_count": { + "type": "long" + }, + "total_partition_field_count": { + "type": "long" + }, + "total_search_time_ms": { + "type": "double" + }, + "transaction": { + "properties": { + "type": { + "type": "keyword" + } + } + }, + "typical": { + "type": "double" + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "hidden": "true", + "number_of_replicas": "1", + "number_of_shards": "1", + "translog": { + "durability": "async" + } + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + }, + "index": ".ml-config", + "mappings": { + "_meta": { + "version": "8.0.0" + }, + "dynamic_templates": [ + { + "strings_as_keywords": { + "mapping": { + "type": "keyword" + }, + "match": "*" + } + } + ], + "properties": { + "aggregations": { + "enabled": false, + "type": "object" + }, + "allow_lazy_open": { + "type": "keyword" + }, + "analysis": { + "properties": { + "classification": { + "properties": { + "class_assignment_objective": { + "type": "keyword" + }, + "dependent_variable": { + "type": "keyword" + }, + "eta": { + "type": "double" + }, + "feature_bag_fraction": { + "type": "double" + }, + "gamma": { + "type": "double" + }, + "lambda": { + "type": "double" + }, + "max_trees": { + "type": "integer" + }, + "num_top_classes": { + "type": "integer" + }, + "num_top_feature_importance_values": { + "type": "integer" + }, + "prediction_field_name": { + "type": "keyword" + }, + "training_percent": { + "type": "double" + } + } + }, + "outlier_detection": { + "properties": { + "feature_influence_threshold": { + "type": "double" + }, + "method": { + "type": "keyword" + }, + "n_neighbors": { + "type": "integer" + } + } + }, + "regression": { + "properties": { + "dependent_variable": { + "type": "keyword" + }, + "eta": { + "type": "double" + }, + "feature_bag_fraction": { + "type": "double" + }, + "gamma": { + "type": "double" + }, + "lambda": { + "type": "double" + }, + "loss_function": { + "type": "keyword" + }, + "loss_function_parameter": { + "type": "double" + }, + "max_trees": { + "type": "integer" + }, + "num_top_feature_importance_values": { + "type": "integer" + }, + "prediction_field_name": { + "type": "keyword" + }, + "training_percent": { + "type": "double" + } + } + } + } + }, + "analysis_config": { + "properties": { + "bucket_span": { + "type": "keyword" + }, + "categorization_analyzer": { + "enabled": false, + "type": "object" + }, + "categorization_field_name": { + "type": "keyword" + }, + "categorization_filters": { + "type": "keyword" + }, + "detectors": { + "properties": { + "by_field_name": { + "type": "keyword" + }, + "custom_rules": { + "properties": { + "actions": { + "type": "keyword" + }, + "conditions": { + "properties": { + "applies_to": { + "type": "keyword" + }, + "operator": { + "type": "keyword" + }, + "value": { + "type": "double" + } + }, + "type": "nested" + }, + "scope": { + "enabled": false, + "type": "object" + } + }, + "type": "nested" + }, + "detector_description": { + "type": "text" + }, + "detector_index": { + "type": "integer" + }, + "exclude_frequent": { + "type": "keyword" + }, + "field_name": { + "type": "keyword" + }, + "function": { + "type": "keyword" + }, + "over_field_name": { + "type": "keyword" + }, + "partition_field_name": { + "type": "keyword" + }, + "use_null": { + "type": "boolean" + } + } + }, + "influencers": { + "type": "keyword" + }, + "latency": { + "type": "keyword" + }, + "multivariate_by_fields": { + "type": "boolean" + }, + "per_partition_categorization": { + "properties": { + "enabled": { + "type": "boolean" + }, + "stop_on_warn": { + "type": "boolean" + } + } + }, + "summary_count_field_name": { + "type": "keyword" + } + } + }, + "analysis_limits": { + "properties": { + "categorization_examples_limit": { + "type": "long" + }, + "model_memory_limit": { + "type": "keyword" + } + } + }, + "analyzed_fields": { + "enabled": false, + "type": "object" + }, + "background_persist_interval": { + "type": "keyword" + }, + "chunking_config": { + "properties": { + "mode": { + "type": "keyword" + }, + "time_span": { + "type": "keyword" + } + } + }, + "config_type": { + "type": "keyword" + }, + "create_time": { + "type": "date" + }, + "custom_settings": { + "enabled": false, + "type": "object" + }, + "daily_model_snapshot_retention_after_days": { + "type": "long" + }, + "data_description": { + "properties": { + "field_delimiter": { + "type": "keyword" + }, + "format": { + "type": "keyword" + }, + "quote_character": { + "type": "keyword" + }, + "time_field": { + "type": "keyword" + }, + "time_format": { + "type": "keyword" + } + } + }, + "datafeed_id": { + "type": "keyword" + }, + "delayed_data_check_config": { + "properties": { + "check_window": { + "type": "keyword" + }, + "enabled": { + "type": "boolean" + } + } + }, + "deleting": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "dest": { + "properties": { + "index": { + "type": "keyword" + }, + "results_field": { + "type": "keyword" + } + } + }, + "finished_time": { + "type": "date" + }, + "frequency": { + "type": "keyword" + }, + "groups": { + "type": "keyword" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "id": { + "type": "keyword" + }, + "indices": { + "type": "keyword" + }, + "indices_options": { + "enabled": false, + "type": "object" + }, + "job_id": { + "type": "keyword" + }, + "job_type": { + "type": "keyword" + }, + "job_version": { + "type": "keyword" + }, + "max_empty_searches": { + "type": "keyword" + }, + "max_num_threads": { + "type": "integer" + }, + "model_plot_config": { + "properties": { + "annotations_enabled": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "terms": { + "type": "keyword" + } + } + }, + "model_snapshot_id": { + "type": "keyword" + }, + "model_snapshot_min_version": { + "type": "keyword" + }, + "model_snapshot_retention_days": { + "type": "long" + }, + "query": { + "enabled": false, + "type": "object" + }, + "query_delay": { + "type": "keyword" + }, + "renormalization_window_days": { + "type": "long" + }, + "results_index_name": { + "type": "keyword" + }, + "results_retention_days": { + "type": "long" + }, + "script_fields": { + "enabled": false, + "type": "object" + }, + "scroll_size": { + "type": "long" + }, + "source": { + "properties": { + "_source": { + "enabled": false, + "type": "object" + }, + "index": { + "type": "keyword" + }, + "query": { + "enabled": false, + "type": "object" + } + } + }, + "version": { + "type": "keyword" + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "max_result_window": "10000", + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-error": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-error-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-error" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-error": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-error-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-error" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-error": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-error-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-error" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-error": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-error-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-error" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "float" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "float" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "long" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "long" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "clr": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + }, + "gen0size": { + "type": "float" + }, + "gen1size": { + "type": "float" + }, + "gen2size": { + "type": "float" + }, + "gen3size": { + "type": "float" + } + } + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "long" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "long" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "long" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "pool": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "long" + } + } + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "long" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + } + } + }, + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-metric-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "clr": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + }, + "gen0size": { + "type": "float" + }, + "gen1size": { + "type": "float" + }, + "gen2size": { + "type": "float" + }, + "gen3size": { + "type": "float" + } + } + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "float" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "float" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "pool": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + } + } + }, + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-span": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-span-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "productId": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-span": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-span-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "productId": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-span": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-span-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "productId": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-span": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-span-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "productId": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-transaction-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "firstContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "largestContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-transaction-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "firstContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "largestContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-transaction-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-transaction-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} \ No newline at end of file diff --git a/x-pack/test/apm_api_integration/basic/tests/services/agent_name.ts b/x-pack/test/apm_api_integration/basic/tests/services/agent_name.ts index 5be5e43b359f5..7cff4974916a6 100644 --- a/x-pack/test/apm_api_integration/basic/tests/services/agent_name.ts +++ b/x-pack/test/apm_api_integration/basic/tests/services/agent_name.ts @@ -6,14 +6,15 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; +import archives from '../../archives_metadata'; export default function ApiTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); - // url parameters - const start = encodeURIComponent('2020-06-29T06:45:00.000Z'); - const end = encodeURIComponent('2020-06-29T06:49:00.000Z'); + const range = archives['apm_8.0.0']; + const start = encodeURIComponent(range.start); + const end = encodeURIComponent(range.end); describe('Agent name', () => { describe('when data is not loaded ', () => { @@ -28,8 +29,8 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); describe('when data is loaded', () => { - before(() => esArchiver.load('8.0.0')); - after(() => esArchiver.unload('8.0.0')); + before(() => esArchiver.load('apm_8.0.0')); + after(() => esArchiver.unload('apm_8.0.0')); it('returns the agent name', async () => { const response = await supertest.get( diff --git a/x-pack/test/apm_api_integration/common/config.ts b/x-pack/test/apm_api_integration/common/config.ts index 110f42115397e..d79e2b401bbdc 100644 --- a/x-pack/test/apm_api_integration/common/config.ts +++ b/x-pack/test/apm_api_integration/common/config.ts @@ -33,7 +33,7 @@ const supertestAsApmUser = (kibanaServer: UrlObject, apmUser: ApmUser) => async return supertestAsPromised(url); }; -export function createTestConfig(settings: Settings) { +export function createTestConfig(settings: T) { const { testFiles, license, name } = settings; return async ({ readConfigFile }: FtrConfigProviderContext) => { diff --git a/x-pack/test/apm_api_integration/trial/archives_metadata.ts b/x-pack/test/apm_api_integration/trial/archives_metadata.ts new file mode 100644 index 0000000000000..f3228176db8d6 --- /dev/null +++ b/x-pack/test/apm_api_integration/trial/archives_metadata.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export default { + 'apm_8.0.0': { + start: '2020-09-09T06:11:22.998Z', + end: '2020-09-09T06:41:22.998Z', + }, +}; diff --git a/x-pack/test/apm_api_integration/trial/fixtures/es_archiver/apm_8.0.0/data.json.gz b/x-pack/test/apm_api_integration/trial/fixtures/es_archiver/apm_8.0.0/data.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..27a90e49cca427554ba64bc8c9b375c8757709f0 GIT binary patch literal 1268812 zcmZs?b9iOJvo1WbZQHgz!Hy=$#I|kQ$&T%bZQI7gwkEcd$(Q+^bI)_neZKuib$4}j z^;*5VR=@Q=YY|03fBW|XMLYL-aavbR_`G_dQ!iJxVZ{)=671aG#2s;GvQ#v00o{2cAp&i>`Q4=A*8P;X#8?i)Vi_@gQG5!lR(p*kx?J5pk(w zDBv9+eq$5Q+tKTx_55(a(tiw_DX}LryU|@iitjot`*e7Rc)Cmf?_(|d;K{qIoh?#* z%eI+A4G|}P-(?JS|EFC4rr0(CnQg2`rW+qp)_ez5kP)wmo&V2z_KFrLbY`D3H>1mL zBqQt!HnTtu!%c*cfnLd=*-iCH$KlJI?#YSP9>KJQMUWn!z)!!ogG4_+FFe80ETmw<9JCFOTLRq>51J^TCR%xo<}AdGpqg-;8^9Cs zmdR}jM)!@QUiVK)wt+U_W++bxD=+FH=m^b~WN|2PjaE$QNZib~rxHhpEqjaJKeVd# zc2B4rOtV0tu^4IPbZe)>LGV3xasKs%>6dzY%gJ$2++#UFw;>fXEr*ldtW7|)7!9!_Ss>ak5I7aNh4H*_A z;7(gvFf}rJE_)B2y2nZ^#;(OlXxcasS4|)>Zjeds%;VfMJVI!uW`pO0=MR%xkig3% zHBGN0_-p=#ehYgO;R+e5Csa(LLBKMx_-Xp`Rc-!&)=kQq@!a@Hbs$)hT4U*|(E-~2 z;KKN4(MIDzB{d;x%p+!`h(DM@fob+jUJOZMWePd#xB5gubz4um>n&uM+{Y~B`)d{}S#qd26dHD<1Gj7Z<>$K9XDx{^foZPJ%w;E?c< zLX+#*6#oX!Jq(_$qw~4-ZsW?9f&&qK5w1Hy1(0%zcXMbcC=$(@t%kE5Q#|MhvLtTp!}-k>?sfa#d5n4;4)6mRpd*sM`RN5N4QG8VrYX+CW;>ti`|!^x zntVe9oe#`S#|fm#%H2OYyBE)(grEgcm3W^a;!~6)q_4yIVFTD(iBL!b?i4;QY07

m&u|X>Lm_g?2O?4TD;vl#RYr+T5 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
+6Q=1NAB;6E((uC+QE6r&&r&R4K?R#K2Uq( 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͉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

q)(jiwI#xIkDQ~mzPV|#wqa99v4E!w zZU?LZU`NmN;!1~a{xSJjs+sHOPlKP8=}5~GQ6@7>b~I_KA#LhQwk}D z7E35}FoQjMB=&Zf!`phdiRr<<3o&80_V=_WYXS=oDCTc5(2n4+Laf5Fqc$C_)iOhc z^wp>ZEncJ9o+^J<+DWf_+Y>X*WXYGE*& zA{HSj+iJ2z8QQWa7kmJIr4-a&ahfq-A{ks=160Mij2MuR5yO98V|{0@(oKBzlM?4! z)uOC(WPz@Elk-o;uU3u|MPm|N)CSmluGl&HA-ge*LKEw@ek}wU-saEs{qv|O#d3*R z3g#bmjP7~_?wNf*^DL*6*EODp?xa4Sq_Y~pHJtbR3IBj@maVFt0&WeVo+*ut7jekW zENZo&$>ZCFwE6kdm@R;ol=IpO6V}PcEd3eN{Ph>a6`gXor|-rK6=kZZ@(21dc@TjH z?b;!_O%7&-O^o)=a+++nT;ACXUsOQW9tbG=Lt8=v9V~Z9DT$})8l%a=UG{t4FSZGn zLHkv}1}6|NR3Hvw92S(WUV;!+$vfGI4!#|k_WEI9!czg1CvVj7r2_K(V2!_h49gY3 z8n++6b1Nt}-19zB1$CGqvCy{4!jX?$3m_7lto;)ZX5xb`d3L=~KszK61|ph$Y8b7{ zMAR3|WbrWQOCW}{!3BawXr0D601vHf>$(z|YDkwA8sFlr4bxtZ0@!jk-pU#Yv67^{ zU|m8#f!t?C{YKMBil07xvqxLcNrv#;l>7NR?LVW&^eycAD8Gm-Uhg9p_XNAwOc(dvj~M4?(pK$ipHoRI|zB-OQnPS8>!dR zns}&0SirBq?kPA9Eh)GnDlEjj><)*Q5fKa}OU!pqLbzldH>nn6=SD9J=2NWRO_glR z`?h**-3cQ?D_*A>G9Q+oR%$N`s;zdEwD&soTBN{CFYCR@R}{IGhOR-1c%#)DQ){LI z$a&u-2IFC%o7%K41ng;h@x9qwRjOLIhl?ZnV74VrGf!R1y*DZz>bsE@4lv15)<*xh zZrtLMq1^x4mKOI3pyUFizy?aK-RSVv=okJvr`Mi{Ed}sDU!d|E=;1(E@E9PdKl!Hk z(Ux>ohV0$$Eea3<$7dXxAE^fy=hW@lyL>Pi%k#2odow(-e0Azv0ohNroAZc08WTGB zsLtxVu!WzL*FNRE?H)lHhxcfhe%@ryPr6jWr!J!xk**_Yo-iEkrXy*SzN6iDshnWZ zoV`E^A*+;x=@P2V*{=Pn)%nawpg4X3l<|{+#TnX-ezHioRk^%*tNa)zaY8G;-F_2V z7Wz#BO$YW{+w`Xx|Bpuu`f`0=eDSHDrm{U~n$05@p!(+d$U0VXA`1D3i>SzJAS8gg z!ye7+6xwvFE^#2khH>_Z{^?YNZqIz4k*djQW-J=;nW*t+_EToQZ|+cuNsf2BS1=wG zxkp!Tix>RP37ee)b6b1q)Q%C3^OD4P$y`r=Zmw}Kxe4w&EcZC*0J*8VnusO+i3cKX zSt;#JQB0Cz#e@jo-4v~dxfj-}3^PGD@U>Shd5)Yf;ZjRr;n`4rPGzcd^4rh zF1Bn1g_#|h=gjld`QCr<#foKK_mQ93ygZHsOkwPEy5IwR1OPE?zuqla^%sc7cI>ue z2ksb4#DZGU8HD@?@na`VH0dUOImjgnlohE5VBTOtU?hY{B;r-i76Y)F!`Uw;rheS1 z+v_%2a}&#lWJ0{-$@&ty&f9V)j%lIM$@(Mp*;~btM|5)-G0vSw*=B(cIp~yU$vg${d`VEFnW`vD0O8AO>&^-QGM=t1>3NaoFpA_?K;W(4%Lf!zZZ2HudLiZ<1Xc z5E6KIA^oQBXYl9mdRTUU^9u*%D({akMRC)oW6m8fM%?1u^Jw%4GsuECecQ7oyhuK2 zs7>Mmdvr-x(8hY`y2;(~M zK~gtGMdbX`MEw!_giQM}y20W_Ah`fky|!DDf7otbez?zkIg>#vE->7qBO~S_bCs+= zdW@~`G)zQ%Ut&uIkZv_=6lfKKGL*B{S*f#fRzd1Y3GpEEKcQ!|hcfz|bJ*ZT&k1(O zIMKAL$=i(VXQ%6!^T>>IB`wi5H7zQ%5*&IQH$J1=6I`Hc1}xGT^TJ(JSpN8G7$^o4~je60{LVd?`cN zKEH<1Y)xgVkj4_ip+`5*I!Z%HA&}qA{0Zo4B2+B3qsBE_>{W#2?A7b7ou=&md|7YE zv4=tWXP=<5-jdFg!hH9mCmV@d(11zj>k*W|E*nh5*iU2BrjJ^A4e=GiTs9sLGg)>n zC?EP9Iz8Qt#&J#-cTj%U()vIx+FV>t#6 zeddPddi=&5o>$MduCL3YE{FP+uD9B4zg3nY_rB?VLf zyF_JLX{?n{Yz>M;O7AP$F=xf34qSx4Kc|Ya7qx3`` zzwDqAV#XG$kdhx^p^W|G)v@i(`UZW$+t_T-B7T^wgQ9bV@4cC`=-F!A9&=|?(a7xB z$BZ)dj-uU#7V9Q+&5|0GrXm7+k1PTfgSK^{7*cVZ6c4I5@Lg3FqF72DvbzQEkO=ZO zLX|}vQ;PKzI~Ma3Z{Xc!_d?yuBTdG$*3-6-L~=FlJxq^23SqX^46|xiz{=)c3(ez-Eh) z)RXZ~@7>6%Mpo!Fw{jwf^y1}v+2~8ec1S{EDe8sEIsBM?nuU}n#4SWyKSq995Y9~2 z{0z*FfS(qcsX1YBvMoV{r^zuNs(ppnN@FYU`ode?FJy^hk4VXj2L7ZwrKT}^5yxNZVt$j!?wb|3a8=h5JCAwn#I73t1=KR z2wM6qV&NvKC$JvOM~JO=8-ju4ASyxA;jmI8-+Y(;Lw5h-7NG+b|L8BOw(sB0#%M0@ z1l=D-5_MwK1;Sf6)RjQ1rZjQ%NEAXNE!!l-x^jpt?q7`j34;!t^Nq z*+~YNp_|iOhlor_D1~XIV|y~~&a1>S;kVbp(1rWq`^V|LU9#bEJxbW21c3?mHW?UG zu$k+3KhEuL^LY_!WtvSrN=uD7D*VDOhC^EO9TDz4MqI114qg!!5nF8MjC(MsUb{d@ zBciuyH1i)Q@wZ)PKS`H3pH_4{p-t@2V^eGQu%Ec_#vQC{!Rb|d^U)-O(Bn*y5pb_~ zbh`br*^MIWRFNoT$DDFn8%rT~8H zIlB3kma?-%c9oOaA3H_pYm}?q$d+_4;Zj*c*Y3r~of|#*`06tLR?DKHQo=H!{rZ2+ zW{R3=q>i34z1`mq6UoZG&KRxQCAUY8gXga%dJ$J^m=+VP*4({#hbyL;Vk>(Ho3o=Z zELJmy)ZnaF>em9(ZD(5-4<04=Px??2+tjCKji27EAxQ|bsDl;I4(GYZVd9L~hHDrt zMRJ+jBx|Dl<3SYM-G>}eXiqF*)MB)G$t7eHauopOBkyl8kQP|OuZH_IQ%Lc&x=rdW zZ8}}hWhYJuJf!M#XsGPR91uCT=a4GcFGk#>5Zfpv_B|yz@GDAsHC9%Ag5nPw$Kp!a zFP55;Vi>5w>2MPAiH?RMeQ6G{=nM#iVgcU)U9(Qu@H7f`0}NDL-wi8}U7GgK_oMB9 zp{|eDx2)BeZ1~Cu_#lOj613h@d|U}ySgrA0F1_&dT&374J~5X*>18ljh+H4{OgI*(W`}nO zJ7_Ze`O?om#D-ah7tu4}o$k!p>`bk-swD=IjjBOz-N;^+?v*0jO8M#fjnmJneY(^t zhXi6)kfv(xhOmvXpPOFFj?+t*jIpvriJJ3bqZVV#!xsQHei+`qB&xKSbe_VF8wX{R zQFTn73DwehHVwy60M=dhQZYQ88-rawl(W~o|FaSX(|L%DaUuH#{iB{9b-7T+G_IjFrQ7f`p>pqfWJ0(PcnHwP>%<4o~K1 zTSJp7OQ#G))@~fM{GfBF1|&Fo2*uusP=9AbtRZ(-W#6Z2&bfp!Qm+4?|M4i@P{!F* ze|wyMNc3BTef9z7+xsSr(H{G>+{L8@@&CuDbE2d|*UTYYs*%H;8$q$E_{U=;eC% zZnq6_KYpwmTX3G@FTWyk&ws&<#o~s*1@=rY)-#u~$R%vn-(zAJ2L^;dsE>yN}z z8{`IsVfh}&yznn)0f9N8B>T}Y3|$?H-$!ZUuMKD!=_GBhO+94ICtZ-!O?(ZPTi_+Oxrg*Q1dRp7IA;2I+rfSt*6Lh?jH zfZ>lNDj35M!i^vbMGS@n0__{n!2_R1`N@ANqZl&8m^l91S3aCypJMTDKS-dBXAAel=oYDgsDe-fCjd$KN$nfC{{4=r0~4=dMi*1muslzol>!>0k_2QeDMO;)DP9 zl9&%iW0HM$cD}+i34r&=a5&q*HYbK~i}Gdq7eUP>!q{7dI^Nj}vyy0uZwSdJ)OviRf6Qt0qV~uCH$_7)^GJMahXdhj|q(yW#duHchgXo zQF?Jm3W%*^;XRvb<=JnztO1$1(60W-S|Y5U9NopJi&^zi6@nTxVJ@+_rsO2=y56V+ zj{i%Q5=+cC;(0va-((1%5Mc^&qAC>~>t|^#x6fAq9Lmdw{0rFtv}*r;cYY2~RkxvF zPW*%c`41cdAl{1t@6%xz?h_J|3rFsuirdI9=TIz2AypVO|Kmfgv+@ztU@o#mYJ(o5 z$B;0-fnD!Ja&js^c&*Kg%_Qfg2i{XaDgbXN9_0T9MEx`Stg>k`r1>{BGcw5XK~Bv1^y$zh?*90Qe$kgzu1VMhfFVhjSk8QSWpU#AmSSSUvw0?O5d&n@(2ZDP6(_9{ts)! z2hgEe7LzJZqLhOc$8GK3;VOEsChb>PnBdM_V=n@ zn2`eO`ng@R5M-gq!2r+juO7E11I)EVXEIVB!Oj5uXOPhqP*AIjPmh2B_0jPca@VZ{ z|2Ys#j8B^0A8P;m*@|=UtMVlWzKvh%3!YRD9DvvYef8l50Njac67N&xZuSx3p$^Ed z*9Jq7lz!bTk#T-a_pobtz`Oi|mLkbt6sVrt$ccSMOON;t1Mu8Aj5)Qz|KBLd8$Za- zYTzT2ky2VIG+A*z=_a}mRWxy0!D;P&5WGM_ zSrmr%jH)|MULf15job-5(`nLOq9jR!gA`g@^~ zj(B8DUp>hpvBx+b6t8iu91U^Q57)!*3T3vy&O)HIfB|0WBv#r>E$bNRxW9P03L|FU zyqu-InH(jyNlZTe8imaDGUfRM_jF)mcI{weFKlC`kurbB_jdg{M<=8HvSzg8p4^|f z2w%RJY4XvIbh&0sV`4&NQOVtyy&W^=)8n`5`IF={=*PI$`PM4rNOv~CN)ChO_9UGT z?eVBIRt;}9=m~G`5PBS0RZ!r1zE#Zps;W+D9S1eLcOSOwr?)O^VC*>3npE`&Xb}=| zLPiYIn`wC}xwXOVI7saT#E+x5a`Jou1S^t~q#>zHq;QAWY3B^`w2pouAyQ=~-nwC{ ze47|P)m^f#ftI;=iZTXKCQjOIfD(-~oa+0}$iGM5X?g5=LcHL(o=?aja4NybL=&!y z#7EW%!Oeg*m$h=N`KIi(?zS#EhSRpHmcDv?co`Eq&lmQtLqt7JuNd6983_t9A5!-^ zxwvc$nvs=JI;Jr553u!c%(AH8&%VB{R)L74)jjj2i>G^?C+X)ERXky|`|YV(d5Y5L z4bnA3)NrEZ>A%v#o&@X(s+_lXV4{L&;M1qH`171I-!9ZG3X)=mv2ukj0w4|whk~u2 zv)5Y>$F>@6wZ(gf-_O9&i5-ql^m&8Lj`|OBmsDu-oTSO>Kkv`t6WJSOsCA6d#@6B& zub3Pg`cd#M$WID4U2kE_>*mr>I|VA;(mar`?*JRNWxA)4k%m+4^Ot%!QME~q#uP5? zk_ubYbmJola}AFCyB{6`b@b91xj%AEHOy1U9zENwwIS{rT{NE>HbW_7yyD06p z?kE`&p{Sk$I7Cn@39mM;UngXNbfi;JpWWfKdZG&hrR*>=3;80a^Vq!Homro3Y*D8P zL}ViByvila7m53ZCFSoSskTt3%{PVeSErxjbK&uGqE@TPw!UX94dr)^`MP8@08K{_PrvFy4tiS@!L3l6_lpp#hUmjIG__FgqVr%z3~qSIZyDW%-7~ zE1k*@7!T*^y+RKd*Ar4On_pB%i#5u>(^?FwhTG3cKvmME2B)dz+8cK|5zs=SpdWGk z0N=XYAJC7hG@ys*vH#L@iP&S$uXiCXsESV=rLF2pbES<>JwQa=$>(2%Ev?G_ISRaI z8cYwdpumj|A#ocqkq?e%UVk|u#C$8pFjjz5&5UTqN}H565TWiDQj5n_TwIt}j$@Z~ za2xfuX3CbaSF0MsX`SY)U(+YXtCgwDEoZmdRkzOsT2(Cl(e++UKSgkgd&%oFg0)R! ze~6)wn3<;=i#r*jIHZ@<#qLLbL#8vRtdGeys)qUe2~S!(U$H@cEI)^?=$D$ef4j+A z9SHKn4=nUPFJ4F8p6Nv1j32|P7EcAbQTWdF z+isJ#DCz+`x~7^LHiKe&2Kr92a+;Y!-?hGIR{E5^O#%9jSE}#N_?o>pjKxg8*V{v@ zF%}{vC4^628EJG7y@A>tRFKt{DJY()3wo7!!tGu*mk+&(mh_cgtT;x!%=e;&!~TJ? zYo8_;;S;z%u+b|0ZV=ZaZubT>h+~MKwmBu5@$*FDySPEB&1Rx_VHvCO$x4zm^zK85 zqSVO^tjWRN0bbOR;MjsG_^{(J~K z(2Y&;&(Ijt2>}lvoL|c=wYyc^;f)5(u&9a@kxO!2YkrJU$lYST*6Ya+bsbe8J%H(H zB5t4z2~-vskvw*pLvrXSHvA)AUkcXE+%=3pz zTU)#Qo)}j)Lg#9rS2`tRm!|_l_q`@}C&vC%X=C03eRayh=9~mL*o{L6&}6Vqd4)LpSzg^}Wi! zSyMTvwLk_?>jnDLEp>N@ho z^bj$G^nQDWJ#0^JP&=Dgn2hT+3ngjuE#OzceOpnQMGUO4%%h@k-0^84Z1bt$SD|-8 z?XkD)VGOLomQ}3_`ptOss^KIW1TO3UiUZMFZ5eP248vz=?O6q z!=Z%1h*-yst2&bpgf9=3WcHm_^`#%PMdSEDL;Su7X$44$&L~# z;Y546L_pKhL|-{wbsf@KJ2SbkTw=KbgApu(9X;4HW7mv?w{v!yOC7b*v6f=fWLLIT z(Fx3)w@i;T=`4#kN*J1>8ia=;qfGOcPkHo!IGIgT;+A<`G@_o z52~*nd@4%5AgFp8$ZCW%*vNAa9mI zN2oc2LORrhK7CRtFW?d<`fYjLu)qi^3=KnNT%P1-8PM@!_ z=ZQ9=Ofu|cyJBt7*`DSImmrgY5I%>%N@Tsj+d;+{?uS3~@Qa%krf6hV%YLmFK7I$|`k5E4g(o56t<^g1~52`PwZ#{t)x`(cOw?UFY z4dJo^WCfexC?l9u%kPdkT~o*NuM39^@0~L~-cw)`zx3VN-5r4Zgpp#w$A?pc6u3+imD!LC{=)2; z$%E}Fv+yPW=cUSJ*os7SAt#7CuM=5u>O*wt3vhYt>JxdJ&!tNHv3IbK!!qK<`5+O~ zE_ugQTNw=e5L*b|%TNmsxV}I%U70FlnR~8I-fMvI&R`)Tt5JnFy#G0w4486nH9R2@ zq7RfTX3>`8R|7mPqpan8iQ7;Z^eXT)Zd%vV&3zk=%0PTrt<8O%=7;$yn|7twFElS_ zGr;vBc{hwWU6DZFK)&Ea;B1082Po`;es)1V0Lw#uzp!y|qgv1!@o;6wMhG?HFFv1J z;Al5E+1|pwQm-V7egmz@Cut zhFUNOcn;EG0j_*Yv~ZXZb(&&S#>PT0Oq22X9we(z>5 z^Zm#Vfe#uDe1lku?{7H2kilEjr#BhgyYb78pHWg13=Rm=2h#P2U3h{G?`f?RY0-hkofl@BmC1Q|T2wr&>?JrD-aN8N`$bNa3_BaZ^# z&$AqDejXdMdR-3wn;>04x?^a8)g#bM*&mD;P_=Lo}Zz{&5hgH#ROfy=e@A*m z3{t@pwN!^+Wd4L*F7}y&He|F4VQ0>FyHg=a0+4ckx{`RL8^&1G1syyXGE#etOv@mD zFxTrOxDk2la(y1^_1nORBD1?v|5Y2T96nIF;>m!<5Y#@=M+?)Ole(!*Too#EoCc{0{WMNkEc7r2I~op*0nY zxurttDoQ@Ki!ruv`s_6N^n-*x82lgcAyknlX%%X~d%rnea zotNBeSN*ax(;lj{m8_hUPR?YNY*?nvh9Y(+2OpUkv7N4DUhiJFp)%-%<@{!(D?M1# zv;$A%u5X~9*JDY_yo?>2ciM~ynA)I^Di&xcx2pTVomQyYp&*ZOR4ed4S=e%6aqTIdM(P@UyRhcfl& zCzNCu5i{c~{1lXWO{XQQzS{YalqhLWOPr{!UOE?&i!3UZS9FaV7@R`^70lo*1wbRGc7g4=&D+MNEJqp4{k`P^HX>00Tg3V<;G|jBbpb z>o3fQHY7hBq3B@F54@BaZf0oo#SV*UeVcn(yP;O5s&EVJYcZi(7>nxy-M|8}T@JHA z-+DaR5~nK*XcE*Us1OBa<^`|nH0n-g61V1Dcmu6JyF7T+__eeibg|>5aEO;($Tg{O z3Vw~^{(&bjgH=nWG4r%wUi)?}|M-DPbP+C3k`kQ4KTcp6-)JAJ;uy=`q-~{k%KR<# z0YjM5Y8zD{`wFrzKwpqSMxLQ`++r7n6^^IU?Wf1%^?b4CL?`z`OFN|%x_B#SJ`2*g z5jjm9nz%=(xP}v4^xU{rPTfU1l2>D^m|$@1QdIO3j%ay3t~^X};H;pzjLVnU%J$=4 zvz7G>foWnxinhjCd9w246mclxEyhra z%>(pcj~TbJwWIpa4(Nk7B2SAUMHSkVsI_0bm&wV9K{|^fpdL;M{2xx8TBv zE(8(UxiPqTh|^GJ0nEI_5ldVR$&B-v%r8u@R-|En^Mx55o=Qi4za;C*i^#)zCt|Pq z8V$4aTPshV*9f;>05gf6ah7&Qz1gEX(o8XWq$&pSrgm}^dqyi8I7v>UR(%pkRScoc<@6Z)2Jxk8<_ z;YvZI`S+y!VyVa?c=74|s9A5*wsdoCs!lRXMJ+J=<&jvA98%Gla(PwaS?;r6=V{|J z=ZqJ7hAeV2%+{Edwp-efHsj3bS<8hj!I!+%)IImNZp$WN?*Bhgc`+<5UVY+hz^>UPUx-0 zSi?M6t!PWWuhf84YMgtiT)5RP zGfUS#p)fT+OWzj8R5@d8@3*&3uBa2QjGM<)Xlmxt%)gts@YU09C};I?>*CgZr5aVR zr~y2DHVAq+b({>Vl><)o!zWYb+}#=|xu;qBTyu|UG4bj~DJCP{3U(5;ZEb_IJ;K(PP%5aP}kS?%qsf*lgZ5=WM)NGaJ2~ZYt61FS##oH{8yj z+tGU(>h)JB&$(T3-8_Dsya(=tM#%;zCCO!6B(V+-dp(VtnPI!1XQZY&Df0H;9tCBN zzPMK`MIQA_v(?H7@ve@t2cbSS6jID(Tlk9JWJjBL4{bXO97LJBJkJ9SPzH zbDxl?PrvF$t}Ix|XHnE8dN@}ku{AlpB=g_{<0Nb68kY9kkHmu0pQO&1i6l2FSn;dV z1jE^+YG9bQ({?jnbMlN?o&uYrLkT;}<6Kc{?&EJCV4X62W z=ym4aAjYKk(womRA!3#^`uAq65q5-EsngL$SMi3FSZRT*(tTBYBdxCppX-h>*Xl+f zxjYSfi!oQ~rU)OP5-VXt&^G;U1mmGT3xCR_#9ZITSns`Gvm0w~96nqjENHfsE^(hW z`@!Y-b2t2Kb+n@p7j?#wG7nvQo_lvMIX`umGU9;(Fs`xIG4S%vgM{!}L{kO@%xHjK zE4%1W-p4k2+smWz0xx99R$&xsl>byH9d-qCD~Z@E#A2uH(^v_vo-<@i3Cvaz@(}fJ+VV1 zd398WaVhF%6hg6Y%k7h#hwQlO1zV8@%FcvCnq;T8Q=5ofA0d|-6a*J(EJ`YZ`LEdV z>Ak0Y0n3Pg6sv-ZsYEDofXG)C8BCXp+!S{v0umx1>1Qd@o`N#^s7vL13;Cd{%xgw9 z`zDLi`!<5<`7upM+Abqo!*i~#ZjR8Jy^7>zb@a`koMJW$pC6yY<-jk`-(E zT7?|vg%x>O*zjRZDRtQj79V}ni9J%JeKSv8r*IN!{?^eM9QV_WV?yfTS9V0J)1?~B z7wn;QyK&0ic7vN6ho=18IgPliU((joQ*tPM(7sKxX^&iAAda{=Wt@Kw5kil%1YmZr z`rnKt+&I+T*wyPM)G2Yq-ko`ledVHR8k5P6A>cgAKdVOie2MtAmGt(6x^{n=rPv0t z0YbySynDXB>V}@W?3`8lDIMO3%!TbNYYWMyXG%@HJwq5*+m041f72-Dt7iKz&4Y-a zbAnEcCg@g_l}awibn3n5SI15i(4n1UI2{vY^1Cj3oa_QY)eluki|ql4Kc==Ac)UQ;u>|ZB2RsL(OLkgG9Rw0t5T}{o;!{4zBz%3Y}9wCZ)@e z_STTwtJt@2fEsHxg{44Agi65w6H|E)k<@G`zH7%K3`ocaFqyJJ4RkO1VEYg`I7}HYA}o*f*gNt=W}W7s2XKA43pvVf=qDe$}K{2n6#L*VTABKs8#OhlFlTGVtD5%iDL z3I+UdOV=<|XsjW4rD~?O9{s>b}(}I1PfdfZ{sct{s4c>ZV#F_ey69{WNMHXhfen1y$qVVS)CKgPrPhgq|tw}@yv_1*840q{Q|j~&_$GFwYPWITq{xN&4^O52GL z(*z>E5R!2J8!7SmGLQ(z2?o=RGb@TV4QJHY{g2}A=y;ILR=GZwY+8Bl0IefSv^gLy zi3sQ&`r{o>7>I*K0H)npfN8h*h+$zSY2HUY@6<)|EJq|Tq-Ur8+d+O$l;BK#QQ@L`pm*gTHeZLJ`vy8n5lZ@GIH#bli1Fh5OYKw^?|(Fft>ak)CeEINIp8|{?>_Fw*( zxBFXLc@}E=5Mm4=VdC&qM`5d-=T>Z62)iB0wKHz*wewQuKI;Sda6`OF4z2h=V0|m+ z)eUGt_DVP7%frWlbg1rZ9;1qKSd}p5KG$N?RuyuMbGFGidV#DZ_*oMvE0^TF-;9A< zh;lwX84R6Bxy2xpoJR+>9rLq<7)_ldJCbL}Yd|Eti-66n6w&eWt)>4C{>UbjLrDMqsol2?*!9-!CZ8hw^Fx+y|8T|UR)$TreoUG#r=xTHEmf)`yT$j4FLnKfN5Wu1>UoPLF~VC4mro1zuBqP%+C++DfU(3@f{ zZY?|h&h$pB#U<08)=8X0#ML~RIgP#i{KUJm!wE)3*?r`awb2pv3j1iU`MsH`ps>z0 zjtsE7_^#s@n`+Gddo$B`ADaWO$BTXczh?xIPOV3E4xPGk+utnC`&ID1!7zgmnY~kc zT*S+bX*_DiOMI(w@N7aH`s>B#M^pLx`q!a22yrIygRk(7KzB+IEKRIOEf|C22y^d}wN#wuN4213ZMT z08_z*SK(E4^yL%e#|A|J{s#0z1mfFl4A9@9vd>R;|L$EOijo3s)V4PMA0f<6pWVl5ueW#U9{guVu zq*r#R7w4E)Npob1{)VhAIlJSlpzYNB!>mW1M0fVairC}zLkt!1Av}Wo9_LRt3kGhJTE#> zYWHgDj#{QkA(&{OymCh4Fc0$R>V}b#3m2K!A)uy>7?@e&Gqf3YaMrTM^WJxG2vf;6 zA;&Rr@%oTTV~=ej#?BkXc<7nHl0&e%os}6#!c$4X(*jSz;LkbL?z-de#=}tv(R`cS zwy$tzRwqigShR2gYut0ST6!!|xeh-;j#1a~mVWhS`4Zz2rhb(%4_|K5tH<|36XA6# zHD0tgnNV=^GQrpGeKQiP-070spj~ibbo=?}VQK&iAp~x0B}FD+cBrpA^9^ASvGhZg;8b zIdoh%4N;5Fs?zeR?v?n|!N_PMf$t(FZhO@?SjRsJ`5ybN9zWa>fv8Vbd0eWC%Z6Ed*AajKnL$eJh1SULd>0Df1dKO!)c|D~; zp1nRTrn>O8dv#`0)a8~-rtSY&`ZC|2mOMBK--b-F%c<9Ktu^4HYCXi19a=vZ)H+C? zm?u1N$sZfbZbr2rY;E)bwld}>Lsn@O`Edl7C;P#HZ1v`Ue0K%G{IeeS0V&!_$ru7> zqe23;W#3t*lFf9cg$!$2+RjAmYYZH1%t*44@!xm*F*Dd^j>S%;%3NBt!zF>us zVA4?dz|laWK*a2X#6S0vs_%>^u3X`JKoqLFiferu;i&&Wsc786!da_$+-M~ML5-ab z0zTWBu3L@O?FArJ+bvc6CT75_`41mcwT-ax1J5}GQzt3Ecc%VHh1wRFxbdr)pBaE3K?{=oHiBofg~wYsHc$;YsvhlAV*Y@t8? zFIPvN7Qe9Nb+DISEj2Vcodwwia`55kT9MYZt~6pMnF+Vs_N)L^zi25jHAe!ePa<40 zLmfLMPfhstBNQp&ie@K}`H3ecep>3zT+`g_4|GBOptZI?c1cxNC(&2$(i}u{cFBj! z{y(vsLqn$!kF)*Ne~&*{rT@e2IfWuMLCe!&fhLTx*fdIYx$*c}OVfdso;+Zsth#%3 z;c%Xfo)+f=ZV(IZqA1Y&757+L6jg9bl52YWI$H0Vu+~%Sc*(s%0tx632aKD6!=;rs zf%DVYQQ(f_A=bJ}9S@oDF-ci{A^1VFd=(0Tm6{zx45P+N6=7()${jE3@B_@UG|Z4^ z(YKTf~T)05bjiQ|zwZ z1TKRli-Jsf%1t_URKbvI74m)n6q%-K z)lQ9KSF?705J^1aEjT!La~4Y9hX#n_u<5+G>HQebLq~N6stI6`JOD6_@cJSScsT=G zdc2+qM+@oZJ5$hfxn?l?@++jvB0}yi;YuAUW(YMGu+DWoyd@S_V@GB->5dmiHdR!e zZU&eUVuRRr`oi!d{jnDSG&TKL+8xB;ht3Wt0#YmoK~NFqo)`0aDo1d{d}G}Xq%xX# zW2oWNd3%X^D~>{ECjfQbv~9!p)UY4{1ErfCfGIJ+U@L}a*87}=jqV%PLw{c9Qjve* z2$6c_XQzWyJqn{45P%;J&imoYB`}NNzYwtvNE?XGvg*8Nfxs^)t4tx z#UCptd)aSrgDyc{^KD8gjj<_1t#lZ{MB(!wr};R~AK;cRS+Ui(~@`zT{mo!2^!sC(tjzIY4qzbm=|}4}eU-ND93U#sS#- zvqW5#BfYAI3pZl=oN-7ZsB)Mx4wvtbvj07d-jAsgufoP_u&ldDHn;7~ezrXJLz0C; zm6i;6<6U8D`K+T#!FLO#wAsnPpp?c?!ym}`3TxG&fzaFH#0|L$1F@=9bb)o(`l^T$ zw1C>oFFCz)0*Yx*4b#(SrN%{N6f z`mpu&h#LEL+?*nm6Ap+T78Ike9{6`O01zG+l>?QWQw(9c4bn-gg{(N$rt6f{_SZ@2 zrz6hWKtG4M2Y&|fGK1^1&_%Hk zmpfjoCM?oP?kEoIP? zBN;P=P9^QlTHC@a!Qpz1NlDdpXV+zqN#HV7nfjPpgHcx*HWTxt{I>-?DLqJV$pW6B z>@noR_hxmJju?2N=J>t8mh(ZAvoJGGB|kApqC8EGN@9RcX*dbJ%F?&;5Qp>qP7gN51`zkQ$~Z+r%5CHb4YCEpleMZ z0xi3#Ik48n==NDMQoqKvCbup#=&G4_2}(Fl^BJOj_hQHL1kWs7{Q{*-QJUO_a{MER zGia;tYL~U{ok8E}ONIFl4yI5pzPHTi8)}OoVer8=IE>pFJ;bPi>(ywDsiQWW3)>%PLiRGsG7X*0NL- z@&OMi7g%Eu=ZTKgKfUTj;{2W#ac%6Mdzm1*m)f+yEFGSR1W#n##fj9VYN#1;)Sioyv4=laNXk?W$+4^xv6Cb#;c zl&%`2(l)t#Yjy?yW`^~HoDR;+iHHJirL49Ex=+Y1eha)b^~N}UZfrVTd+EtOG#dso+?ilfY$tENS){D9TeD$Pka#68@4 ziJ{K{(c;_GNr05qV&!Jp+w_wMQpfQd#p~vgo&TG3FM9o#bay-bCfzXipTQIXqlYw8X1W z6smxA#`2tEGEO$p)8Ki>K=OGTJ}AG<<7rpXMIAM`a^~991gkgxlh!u-C$!uon=3h= zuW;(df57uJ&_2a)^la6VaoU1yVkOV&>Fi43Pef2lWeVXW30QAxnB+4#VINenltZ&5Ci(&f}7m zry~Y{;SVH%F@j<$l*M|7T{8qGf=};&c-Sjo*sFEe-uQcL;IN=kc8%;JOX)sT@6mqc zJYBB0z9|47QxX^K@(UB>Mo(?yEUhSgHLwmS)tfIT}2Wd2iIlYz?+eak$;=Qq6HchPUyF>ggIo!)+Kcs^Mp%MOn&UJcZD-^@yq zl_V!cK@M$h;q{fQ3TwBMY)Li=DA`hq;K!7KF)s@BLkyEe3U_Z^1|n#gsVrt36%`F=8R zbVLU!WU+7f4a83!_o@|fi0X&kmECYh)?Ne*!qra&fg^%*(LO+d2Y~34?tT8SA8wQ? z^{cGY;HQkvxZ%Y=H55~GtHa|ggM{A0VrV=zWz?62f{pF^2?A&YVbMZ^g!8yst+z!8 z;^d(TL6~&$3nc|}lkpCI4}svFcn?dtlCt~x_lHSWqp=9Ho%cnwqvG1N_vDT8FgCY! z_om)0UnsERYAEteyXl)vJjAOjKD);3^UEW^{HFmdnh?+cCQb3)09JtVPXkz1(ccEJ z-PjZ&)B*y?d~Bz3XsI_#EepR-ddjmYlfxex1j?aLfo%sgE%aqEK4o-dJeMll)mx2F zhFZh`IvSM&8Z@aME*}8@K zVi);OdqRw#N9Asf>`p>!6&pF_+%rc%@1ZD;aPbZIwO}f-bPl{Nt)g+jbD z(ki0emeFy&GGiUJv!3a8uTO}DMR9s|-9k1<{jteYGr z4rUN{%SKsON!ZQ|T-5G_cndYJCkOf=jr!xKf)qY!fDtZ!P#XduFyu^(Pbx+YcK3h< zCa7_82+Rjm(wmd3@!?ep+m@Jv@YV;iVa6cy_f9>wy|w#(Wi%4xS|7#RCd%-{DYEe zN+Uumt}+0S9O!){W_!7a`LNeofSfrQtJ=qOG~sl>&lcf=iT9}1z-%3p_fkb%69CZG z2kluh?s`eChRtZGp@FnGbUx`C6EVU^MWh8k=*|M#K&^vR?@84eu>v#SI8Pk+^Hn=q zS~pz>;u77BRsgM^MOyJ@(^}u+QS{MA5@?RI4T}zsbd>-=at#0^zs)YJEg#(brboX< zL)E~7KlVd6KkA7Zs^9URdw6Fxu(79J9LJ*S?BC@qqVsAZ4$NpcvbG`B!mp1;-99U) zEujZqbON09vY#37)O$LrOa-GSFHzRKRG*B;CkmX<;DSxAKDpX-2A>|s1uR2)aK2@> zdssD!VVzuctLy}BU$B!6NFOJUrWa<|-#`b1oAwCsD(C|3lYV$3@jO-ky{$=>`P>>Fy3`>FyMe5a~{lMx?vDyHmQmyE}%Ez6X4K z-{<~*_kPYFdxMBG=Zt68?EPJ9Eh)o9qgHsEQ;`M+=trQELBRLn;3kBMp*X4ZpKgNX4W z*UR@t87jc1zeRHvt|p6EbFzK)w*qI%2#*&Uw>6(-ET+da02);xz#NW*0uk8s02ct9 z@K9jNZ0~`53`<%TRRoTg#S%rUX0o~QKo3y>oO=BaH%#0d$si=H~(IG z&(ESLqsYM|Mo3d=f{_;g?fEF^d&^w1Fc9n;o%BV_jpH=wE;WKvN$Qov@qask@+!(n zR@k)4=siW0`zA5vU^zvqvmz?sF(CW}NabLG0Z-F|5}#aoko*pAPO#c20!=Lt5fQ?- zjf4Rf(R|hJw&33PSDMCcj|TEn8~-WFORZ2S;j0FnppDOwNGR~>sXu`3B3S3p9epoU z5-3=3Aul;d7@q=kR3;yw%Y>Yx0A5f46%`5!Tu|TxwjAV#Oe{+g>S4M7_aFlaiz~a5 zJi&WkD>Rp_M;u`t1zN@&-1A7FW$2}BsC*mo1EH^gxJ&`Lw+Rdq)Zf$WeJnvDA1N@L zUt@H;nyC;#o3hzti7+e`F7x2}*Y`g3?0fGApEx7czCvKi-rr>!Vo5>oFt)+fdKKGl zeC?>NKBjguuQC9MB1hOR*c)4r?VHs$$;knW?Blyi!jV_6xU-E3g`B|jh)@v)R2>}& z{HG-<&->?gK^e;UPjfS33W7t(yEeWu6kuR+_`Q>3)%H`z_9bZge3Z;3a4?N4vX=p4 z;#Hu)n+RAkh`)W#S4LyIB-T`1>1=7GdijP}I8 z!9Bc)S7Cm0W_zcdu{2mw4paQ>5SrcVffEIM?;q_mwL~Y{@4(?oSo?E+R$X4&MYJZk zeO03*4a|#?Q$YSW2u3adCkGJ)mc7lxSZLz3tGWp{rNAp@P|TVKv+wPaMwGYnB}wD%#O+?}$* zmoE)v7xLDNFYTjYs?QLV-6?pQYAAdznbP%i#Nty?njLQ5}Vc7@o(wP$(zUI3mr0whTm%v^~%l9ZT8nMe> zH6Ey?+Oxrw9dY`@>eS~#JV|EVv8Cq+p(iaLeaV{PUjbnr5uy)${U1AN4q$@v{e-v( zSMw(5Tkz?G-wf$lT9k~iRi|K^>Ci5k1!X_)PGWg(9nl1OwE4PuK4|U1a0atlCV77v|y#>j@O;M@_+A6 zmfI4ZjB0ORD_e28Y0Qw?zvD_{$b*RPmS5dn5yW9!CZ)>hxLGlK6VN#M3`jS7Ys|6u+QX{Mu73=buLg2yU~L&`uNU@a%rCVs;QG!_ z)LgGd&?U}{Zlb$bCmtD&uWC4z66^!uzr1PFqS+YLMAmb}W3DHmG{IjZ+l!cc@TQQX<(IAqT)MaG*jksJXJWvKV;DKASIhHATPtT?^_F*Og0rK+%hYvQ4uPZ*{g3MYoVujC7{YDx1bX`PJX}wCuJUb5(R2u{EsArd)Uw^CgBKC#; zWIIDpCh+hVqN3WWe6sz@lKV)xP&1qQeRJ|%LMvyVD`m-7*>rROE&Q2ay zq4p(1V0TqY3T-avek>MaIZoWJjw|R@y*0IE^MW;J<|)%$n4mKr&Y=nT<@e0q-B}l( z)f@knh-p119EUfEzlm^tbY&L{CMv8(bAy|nv?IkPtlA5)H>PIsFI?>&P+F*Q){wY1 z-?`A<9B)&XdRCryliga0@4V#7snkm>tz0z9CtP%Y93D1#LZZw6nGlw;skl{Z!cfE< ziAfG@Dih@<*4ki0)~;40p0TMWy48Dd$3m|PSNCy)m*Jn(r)pmI5Hqa_97o%bNWCKv z&&f&&^&Ka+a`?z!r{i*)h6}qx3>KXr*d<{G{-@0bEc#Z!I6RQlxLE(Pnx&{(S>|>A zFN)^eQ;8+FjC!AstLVR>_`E+7bqWN{T9AlF{X&Xe%scSLD7_*U=X8R*TefbKTq-l5 zd8O!usRykFu9CnTr!b8#*67bxH=~S_L$FNQE1jP#pTxod9|DotM#&(V8EViU76?03 zLVUwR*${xhFYKMGo300;GzAGp3;+txC) zmfw8`asI=@HlZ@>xldEve0i668T4mx%{Htu=q)XiEiJ#MZvn>ZIEoSP*ZW;VDkejy zzfmbGy{k>!LK-~}cuAXZFgJPirLme9*nZLwJ@ja?G51I=QFR_3FupD^@h^{$l4Yt^ zn07vkHN`*9VjfPko0}b?qz4pP6sGN1`s(8RqkNtfktuXgznq8d8Cb zM~c^|Z?K$UtD=R>ErR1aAsG5o-YDfOi#kiq?tx2-$j?G)v$M5hT?Y@vEL9e^&3mBt`LUsi$g`Jb zX*t~p+q3)lzc2AIHe{vDR8~l=WV3d{9*bJ&uuB!$y##D5)O%VT4|2Nx*Qax-eU(WS zF~*sEN$$Yo?;K}LR~po~8d!}CRcG=IW_D;_DDt%_Sqqv9rhF>hQS654Oa2pb*hE~P zhnj+7Usles)IwR@^V;&`N|V*o?Y-rJx)@=ZOfRY>BR8Te?bOvF@fKpuvYpk}SxB9g zEkc!J@p@jGcLloNha^wV0nn2Gw@xZH$t3KH$#bXCc9-?+JP`mu(d2jK(n^r{rz@f9uo> zHC>=Lp5F+*@BkGyN@{OR#bLO2P4(LwW)-;tPT)1d$+WpEYg>+|Hj_#Qi#0Ero)h+% zIxFN$7w`uSMpfx6M_v;4RMIamJvpCNrs;14>@8Z5uh@%opMik4FF?TeVM{X&-KYD` zh1gcNh5hU0++u9Ad%nAz%fks95$wzO&jW1Myxhdbv3v1rc8=m!yQ(48CAFJ0Gx(0h z?9T-VSi}wP1P?Bz9_qNlD>l_bd{2)b8Tea->^M#A%6&*1NE&#g?KoE#SI_;8Jar{X zC{z2q+s3onBHxq|Fqb(Qqp6{)$?}!iv^&DmzN9yQrw!++kw()D!_h?Cd0h@&zIDM( zTjO?qb8xfQ7mk@RkQqjos`~Ah!cB@Yp0>zBtjxZ(n%xh}QcP2ilU*M~SdrL%7drB3 zTerB~3VSB>45{J_1SvG_FdS``c+@fIvFy2UQ1#C(;+?k*ER+q>z@Ol1Coz4e`%ag; z;waw~1ak{Ziv&*#E;N899IQY5ri!F0$?emRoXDLUSlS^t+7XrRU&Ed_EhTmh<>sz^ z1K(nHC%$oi#KKl6cq0^7W7ARifJK?C>%Ab^HoFn!RbR5Z&Z51LkeM;?g}MQ1B!)u2 zdoFF_AO$HmR^JuFlKO{%k-T73<(`vW%uMtCpOnjyjAgy6FS=8%-%d^@#i}X<53Yfn zOY5Y%f`yFY7A1;V%b*iU=BjzR#2TuD?_1l4VS9CV9!Dyvz5Ax?lKF9_F$?!}7tuq% zs%6DHWkL%w@^jKoj2S!sggZ0>I>@iyj3MNzkDtzU(gJ`L0o$X(-3$A ze23RVudSkJ8zw+MT0*D#Il9WPPDY$gw`X!oSME>ukHYNZx&PnZegG*dbCa9)dq1s$ zfBdFXD-w@zV3UKctZGFz0kZf*Nq^;PY@?dZ7kg(_3myw~Q|Qd(*kRaohh1R|mZ?fb z59hhWK@?)#MLaqJ&BC+$F9U@W&TDH;SCvaDF<%52>wd9OitY^9%GV)*(?8ml#7#?o zejimieQI4KWR0w-$I;3Nr^x5<<6M4pPb;}~MNXdsqZ|Dj^84nV$3c^=`yu}t9rIZ1 z1ls3ldXU5u1)&z%iK$6qbrS_|g&j7&hejA7b@7)+)VAoao#v?XD%VHp2K}=3D_6@C ziiI~hp&2A3p{oh_)&&KvQkD@})_k+#ihz?JA>-G#FDWt#1*uFuOn?o1xyz6##fHJeNpk5ib94TINo_ekY}6W$z<9?JJX^a>22 z4WbO}vsqipApwSRM#X@P%;60GqwLT%a}dvqkN>GxtS?>F`tFfEZnZqI4PL!dzDN5N z3g8|6{?UA6Q5gJ%cS9{+$C5UC0wuGGpU$KE(L_@I{5^j4GGZr( zs5x5{6nSz&3M-lZo{8QF4ZTr)9V4`*oUiaj<>%jU?YO{E&)9y0n{vs2yGj#hreaeg zT0Zy51dkw5_gm(*HDA`=sk(y%fGDi90EgYzb(WM?{#y>(=pG!`0cTpM+QjZz_7=AX zC>_`CEX8o!kOxbyG>bQ8&Ehbp;BH{VEIlwzuby_@(|ByJepH5we;1$4lgMq1)x|U( zD24a9o=4d*vr~K@eZ2Y%u}#r8OhtYQpD+3#vF-Vd;yj!PLCi%DTn!A%%fBbozvAnK zpI(Vw^_2}r5yGp%ekO5SJ?btmJIm-&1C1OdQ}zX%egp)2E2L!&O>De|0%fwdDU`|Q zVahbpII3^T36r@}em!?UX5Y03so7Hbv%h;ySQ7TSDcYJ^#;GCzZuy+USWp$e$_h)4 z8$)z*U5yxVc!d7`+pOiYdY(k%wIUp=q^GdD;emcA!oS#ibK)7BHCCm0y5HqQWj^e& zlzHHJx`Zx)G|(?a7}Ri~alSO9s`F&B6)JJDWbb&?*Dv*)LbVe5oI+*$l0t<$t{Rqt zBe7#7HK*7ji=`qGquG<$a!^#1GN_3SY+eulG+(ggQ@5(A-P=r`-%Pd}54~O-$)WMy z!>m10$1&~C8~2CR;qhGHLI`NCg!b$){pixCU;Mi5J!@rVXZ@Vi=kK*Df~uyg+#ROEkz&!I3pFRBKkauL}o~XdcfEL@}xB6<12I*HdTWu$@)< z`wN?mu)wMux~Z#MBBUPAK&{2iSB0s`qS$`b>Z!iC^$pYg_Qj57MN0El>ifo)C3{V7 z_s`m}#uzl+L2c0_FNwRyqRCC*d$I8>4IQ<6QxS%e)fY3oEZF4*|57w76QWjMRQbu zfj<{Ev&X02+wI5fqrZHyu|S7S`BnkHKTH>Ph$FIJ0SRa(dYUK2%B zqPb|!uC3%FBa2;qaeyEdH;#f0K6_Gbj?8i!s3 zV*4!Q%t;p_mvoue6!KA7`Q*CP=9rmr2TIw=B90( zi%oIutJz9_(3k}1mx`vQK4d14SK|&4Q*nKO3EV7!W-rhP+&X$UX1-;?E;ooHnhd|jM$6`A9n=?%`)Z>7cg1+S zk?4=9=*(GQeaEeyQA?wH8B>ua@g4QXE7iZrS9?o4pBe5B?YR2CnVovGMZ-wRI9m&7 z@_(O6h!Bl4cyXCd8pb{^?<7Vhwk+KN?0F#xu`wdh$E1EkMPG_enUiPTw+jYDUwz5^ ziu>HhG(Ww_vxZ|_sXxV>OQptr9L249A6zH;#yXeH_9+_b}Nd69fs!q-_?`JqJ?ZXc78KKkd4NP>Abz(e;_slK|6 zynPdd>YPWaic2telVRx}@Vr9u)O{24Wq1{sL?u5L5c#ZBtfXSWyWhlK6!w|(b)7$R z+Y7H;x?d+Yd+h?c5T1L}TBaC!{PVW~%LU`GPJi5g@ z^3CN}8&}91S9%_xo}>J^0mT^cyCe;AbzBf3I>x=lFSlsGG#bM^k_B{3^L`$wuau28 zY3^W(Tb_L4n%c7@mH`S%<#NhzDUn2i^Cf|()>4iGC z`it+tq>(jMA7v0#e4_QX0?Wrw>c2Cn!99OPt~O_+;Z;76A}(7kIrvXvjkb^Co$`8O&b4=XXe>6$Pw^FslK)7{SR)<5oG z-}waQc8g?V#y!vU-o&XjQppBrM$_uLo z7%nH{%sF0Wn9|US?UVG zzo}gB65*zdQnI+1<6Yu0d!@;L!oc$vOCO`hv(Gk(QGM8LVJd#S`yH6mq45b*!(XNK zQ*@pmt4+G{Cwund=Wn?~RbOz%c1V$Dvq(}-j??qVPKMZQRP6+DZxd|I&bn^8rax|k|*u+Ty9So?cjjZN0B2%`vU~_ zd?Ly10t-|q+C*TUPsw^9tmkcrzR*dZ+X3oUkv+* zOuE1f0|#2ndyF2ZdY-v?fTx(WT470^>#S`vcXC`AH9%+t`!TJ*czt zTG?E=vZm6uQAKqls4U5*cU-_Fk^NGhB5k+CXZ9P$^>hA~Xy_0$r@ipok%c57=euiD z9w*Sj#Ei9v)1|`)Jo~EXK=fp_#NPQhW^~+JZ^t)XS`8#y|1bTk>ASsxk}2|w4O{WKD2%n^0jE7rCfi#+uT@(C9Km~ z?AI=qC1%;Br2{_VZ2gLSndof>yCLg;bx94cU^h;E>xjTxo8DjKQcYD4AZcw@ZkF(@ zQ8%5lv5iUnc+0=H`o@|6=TXrXuNm92abs$XVUMK6;GSBeZG|S1(1O;r9HTMC%u#c$ zraVPK%J8qI_3kfw*$yh|s#BleNtJ9*6MSZS(d|CJzU7O6RD&p3E?qHH-~r)2^F4vv zG=9h6NQN3c4C~C~0ZZdfoQpnzJILsO_{Q`2cTnlJs4jvdkogkm9^Gmm(INQcGdn^&+U|5nh-m4K#EsK< zfqrg^B+7nk*+`v@bmm?x1MC@36e4us_wpg||Zv~Fcg{ozq6YG*39soP?(+-Tt3uaYt!s!&>>2%h4 zHQV}EWnW?yRA)?p?+*JrXq%~3)CU@T4d;INXl5nCTML>aC^LP8j>p#<`)qF=zIzObt2^AAT@nw6 zS0Z^ZB;i$+<+3U|jp0@&+(TlmM$Dood)T9?oR24pzsQhLeJ74G?t7stPG5~d!Yl6C zpY?1gYPXKx|A@fYaxZl|Wwcd#`OkWNW3bP~D^h*O*=BVI)nOaqV!uo2uj=aAjP%(i z1#}M9Kl$?=4fj4C(+|Y2V!AE^`3r1YJl4sKD#QivRVX+rb}$7Yg)dHdcsvI{L9R5f z!AA_gd(@J;gp;~3wB8KvL<)SWAN!@&?QSf5A&J|r6&g1}$@Xarr%$@f=Y1m#G2kFV zi<0Ehr54KKiU76h#*;sRtoflZbJx|7fSaJr2^+qOgSGqQB=ZFZEz5b+=`15b=H(SXcO>^x$!nS1PT94$0pKOf&vyJf-4Dx5`9q|Sw#-~N+S&|71jHG)n%G`l|=!|_ah0%b>E%4*-wa|&~92vN~us$%-` z>rU4mwzU{6D#mWgtv>A(V)HM{uEKeoKGpVDxJXtv8*H`lCy1r8{o<5})BgaL;Fe*( z;My>Uti1h;2<8*}^f;65_Umb`l4>8*0q`I$u0K^Kh(MJ|qI(Dp%`dk9r0DFC?Bz0d zZV_KAH>+Q8SEChw9=%QGy4(mA)UFlPbjKy09r{2$G#Ui?9U+GxOeL|BJFVhm#!57( zh=@wo>7&A!bio32K8h7aA(>jCTH;THv+uJ1usi~f_ zW?qz1RX<+SXWWfYy*YY#OG{BhI{xOL!z!ezU!qbfFVy;t{uvTyk$Mplss%C0v}7il z#h>GV$bwz05a?n%`FYr>XV|;cu`HJwZ&26Bmhu_hvK|L0hrJg7(yM?poM%m_II@*G0?!NFRhOnFbGS5#^ zlh{54HVXQZCbttC74_b|Acy%GMCN(kcvnEZz}<#1krsV4?~|F4=OZXK_G2MJ$yMMW z_OzG;SQM0igx3vHx>};eL5S${*Bo1sU}|dk{$O&jX}3aPNyt(9LU2bk{st;Tl0+S@ zea1R>g%R1hch*lVOQ^cSUNwHKk23BduCJOVsMlL&tPk2$v%%EjWi8QwF7YW` zeP0J(!uP5qhVJ-KQt#3OQz-2F*zZ}~q=I5{$QNaTCC0n+^2$5*lSctQcMqlJlka+J zNN)IJ3eESMn5$=N6`PpD(T2um7c(6yLcuEAWxT>j#r}%e6*|z?Nh@Ld^PjDJ3IJEv(FEgJQV5parA}4Hx zp{=S}Nxsb9c)^kwlsv@tj7#24P$Mdj$-Nt=Bvlr_oXpy1&4SMtDu{Rw z49k*fMi`#d^a#pmqCcGBf_yS^Mdi6VI=nK{C@JBAFVl8o1r@t5`;Zb;PCxUDo>RoZ z=cM2%`eW<82WCF`z~Ex>ODSRhgEY0xuFlR(9H$Q?4zKP~=%> zT2}XdAQl2Ff+Y|B;LaP%+H$&zQxy)2ni^lmSxwY)T^G?x(7NTiE3tBO3>`yF69yx`Wizh!#L3g?4@9wrlRIN)S`egZ@Om+(I1 zV4}@eQ?Gd=Ndxe9!CioL0+?O1K`TwWp`q+J@s>x5+mo~+t;4^y(9xoul~?=0A!c89SWwrMZ5_%H4a3wq`Urx zdGz*NCH|dT-zhLNV4fsXv8GSzr-LXP}l69i{1eRVS;b6Xs04YA~WsK z#Gzh$i;$p++g;?^BMm0qUNgW^m|3_jXX3kzT5d%{JB!*h-?<-%G+I!cosN4{Op)eDHoBIPFyKQu`m>9wm#+(Z)nd%5COvO1++6?wHalk z@jFbz(-61)7Co&;ss@YY73 zWl0g6LF&3OQc!yhAiL?ks8`qd#!-czxSaS&+N;Ip>>_JgQjpJ8e_A6WkdvWJy_QU% z{zKV4!*=F_=#@d=0wO4sq%Lv7c}V|XoL!RrUsMv6Wb)8&&lmptTgALEh}TI7u&@w5 ze@>41p`6_Ewo)2N7WkBcpn?IxKhPR1y!k4JoantEpB(K?CM~3A8}TX3J-BCEsu(iF z!-)QtFI1XFe-GT?laCt-aWBldw;LYY=~uOLSfl&NA3Tv}JO>be*|>znGesHaPu?M^ z8t=uOHhF~wo6;^Vp_yl$;lk41xElTzKMeVKkp`U|;!o z>yhB(adz@gt(%hHQQYsHi+24+la1*ddFJepHO`dNL95zcsn48U!X&`iG5(jct3CTK zXNMQ_4`;^~4EDm=N!5l#KQF}6pZ@$Bx$Dwj{>`h}Y_#oN+Hf{5)R9@$$WdDRaWJgL zm@qwq;b_#Ekw-SaT}qhvomRp39vgj6D^5p%v$Fv>JJ|n=vm<-v?3P|QJ4f@_?dXLK0Z|cI z%&{34!hC_OB)Yce55ONsk~!yhZCet`|Av6@84E@jnsJ(sl}_z9?xII-t(0FKrcy+% z_nlM!UBi8wM?;c_N?|b2#f03v1?E6O{}X}9pk_=u5;=YeCDvlh?((NhVzBM87Runl z=8fFYx$L>ymCMu8(p*ZV)x`M}DoU;eDR-jZgS{d0cJax%HE6&A>xX*cjtIM$4Rtk> zN@6zqqdSEx{lviM3p0B|*sO_+;=PdZ``=&IcrTIS&TCtbPppHl0xT?wDiemMa>`n# zmobRaLwi1fzc;{Uzio`IxhNSFHiTRFep_clNrcAEg z%_(0RD3zDD1w{ULNikXZp9Mu5kENtmM#GJgUurr`nSR`R4vDz#?g-j|HGkuZ=Hq6X z*_#m$Na}XUvhymny|@nvuzyx_jlZfn@37E%xbPiz1e}t(IT`RpNx#fsi8}(SrRZnf z;S=9;uTpYcJ0f!cVg8{odC~h}<7c`L8QWxmS4Fl;oQnKjFQU~zTAAp1EmnyEQ`#L- zn)Xg>5mr&Oc&GsLcEoV!Q^qy~uoPSJei8@aWkJ@QP9QxlxS9uB>eB`^yM|hizar*P zmjOn!-xzCQeOvWl?2d5^bNa(Zas8>AaTVw9NB*b$*_&x9jF=^GAK=>3RbcrWA1J9g zd^szb$VfHroZ9#yXPuv>4F^clqyDX;bwf>9^MRAiX5Z7zjy%h>~QO9zRncC?RrgGy*#_CFcL>sm=S0902icbQN8#Z4#+U1 z;i!9P!aKSzS(vp$u=cMsah>2LTsb2hmmfs?+ymB(voPnz#B$4(XA#oSooC^8*w7tt zyu)x%yknP^wbrdNGgAJ!-lt>jjuTLGv0=zmy%HzQ>B8j4badB8kPa1f+X-+IFhlAm zaSMBiR6c-;GuXx)xlTY3jk1{na^&Cy$L!T}tSOozo$W=wq_r%yres*F_Ov9MsxjAi z2Y&;bX=AlP(n|f@UCp3U4niw?VBdqw5n==f_I?oHX@& z!>iNtM>E!^TO_hV(msM2wH_og$UXt42t=|*{=R;VZx+Q1-_C^TcU0278c^j3p~;&6 z^^O~W2XEkt1kJn1R9CyBHZ)zSy=h47AiCg5dQcGq%k)}3_OGHDeF*R-8fLss)z?Y( z&>^AEkGcJ#0;spYBF-@2Px&AMC!g!M6f!kw7UYz?PzrMvBw)4pCBLY2jo0FuaDQc-w}6cMCkMH^d#`6D z*8>Orm$z@@%e{#^bYsHBVkKd>&p80a9l~UxPmM~XNLc;9wcNa(4ebBYa!+29X&Ugo zjEHvvf1f#^<@k8qJw#082=_YU*Z&gkfSQ~AtL8qCJx)dnb{Igx{?{%6E2sP@h%86@ zkjeSY8_;ntaxQfn8B&|R@VPlKz#mn?+Z>LxkmZk4;u*DPwI<190)OxeN#lYSmoxg; zh5DoC9BPiL>He+fPBB74DgXa^E&$gy${db49sG}y0|edSBLlS*o-q&fXU|pe0z(1V zKFMmo2otqF$iIrRz{)R(xpRJ5&GVsW%B?KOp|>h@H2Xv0Bd>Ia#5`W=^{yDPou;$4 z_ulU`F<~NQ+E5c#-!VNF93(MdsOo=JSafcwEW~n+UsSLx$p1F6AO`t-xKq#ul>iE+ zUC>6(kYal10D*ud{oZtw7EpOr{&~g!v2(E6NNQtV2^J{O9%Zt8^8^Imi_Qbi+tZ>F zrqj68@N>nbHc^tuv$zfn>0x1eaZ&&}FVDME@I%=seJ^rBwtrLG=^rZv;Ha3aTT7oQ zT^^LNQ@baj&kOr4FQkXZ|03}KrT0}5QV_s8mY#bA{f#Ro!qJ0($hTC<5A{Hg;5Fpy ze|iKD_DDQgZ??BYm+`#K8R(c`*CV82J-0{-aW4 za8s{^bTs}Y+8sJB^r8Kv(}An}HCUSTuh7e@7Z!9*RP^?Vc%>u-P4z7h^p6CSlY{K> ze!q@#?rq*j?AxRFkNsiwqcDv3<4)T74JMpGbri~LuYW`y32?sd31awq@AKcfBRc-; zCChM2;8X=;##c=i{#qOaI3kE5U^c;>@vf5&a&|vr4&*!rX{Bo5_2RtxuPY-o`BZsm zU#~RcT2Ts`GrVEsKac7wk%uxD)CGJzzx}W9EkNx3HK~{xjDHn1G79L3men3yLK{=M_G5RAbbMBdt$=_TLjPv@K?mLkaBI?k)r0;P^)s-#>2Rbstdj*Rw1}WG1I|4Ip3Z;6J2Uq9O#UKr{xgDKW z;uQI>qqn!MNl(^5RiNtV?d~9VW{VjwAy5@a{HH3=@wqB+hX3jGYKwlQ=C=9T>_8N+ zbp-gKI~K!Vf0<4B*6Tr=24*t$3+ir-8BN=FyR|?svLDcktm(FUB|C6Ad|xrHKWCE- zFq_~VLBeXBCTeI}Zz@PClH82sWn;r=gRLw)icqzQ?CqSxWCs{CgOx+x{sB7YJnO!l zuxcr?v6vl8q0EvruuwImo!Cz9W<(3y3EG)W=FOge;%%S}XDah+4_4Q62I-#d?{9V8 ze0{K1H>(M>pw{n)j)w0(nBUep+FvWj`ALZuM+DJl5Ea5^#WK`A;j-=zb?Kl3+Ks z>oFtfUEcr029RyydUZgg{p5R+B5tmxqO&hIAz4bkvgEdPX|1vxC$fUH$77e@>``&9 zK+wIj=a|W|7n+)sJoJdK_3a`$lR`|Rl{MdpH`fnyD+;gzT#AnE_chrw+A}Y27g!FM znbprN$3UISS)R*EkSsZkJn)cSnH}f(vfXVgEeS&bw~Wr}F70#G);x8Ii~tStri{(G zT}%!|_Tf*~|AFIgZA_j_$qY(O$ubT%Tm^gFy-Ce3@?)F=6~wbm6w0*>R-qNVl}Iqf zv*#e`jmy*hb>)0xaUAofcs4)5r%fVJ_M3r03xLakVSr_i2{2}V5RS8%5h*u`{UH2b z#Q%rsbP}I_#G(Rs2ZwjAAPFKYWQP|+_`2DszUiRNc4!lB#@vJcD4MOB!DiW{46Q5^ zVv_)^9Ks|-H3_-nl~J#T`w{X8uq|(gSVHn6+d+%848tb-e{lC!Rxnd61SQL4`uy~u zc-`EM%Y`?sUZv*~tD(a^Z(6mTogW=d7c7ehH-7hXb7it5hnvB##cMlP#|~<^Skg>L z=S8d1n-aJ7qHKIVs;u1gQHp7$`;P9hH6_6oKSUO#A}MuUS?A7A&k8$fSA68elhkq$ zVs)&`W{uUfKFmy2RMR0Jr+L#ac>CqN1i$s*n$ES-;RC$>#k_o?Q8w?ux&Ou(95 zQi-M7BW)#bjNRa;o*12b*A2SifwGblpz85B8bI*hR%3+}fBwth(>7NR)<-*zS`zJ4 z%g`pfXR;+hQ%9rsTjLCV>qxhuB!Ca-u*f{U^or~moH}Z-dQ|Ng)>}R;@vqV6iHFe~ z$luvIrhf6bmQi8>s_?&lT zHjqIHi5+jN&TuUGBx}Rb?Uh2%b=u^o^Q8GL8PC4-vWIJ>?7sAF6z_Pb`7I)S&vhdZ)GcZ>Zn zRjmRX+7VBCSccA#tTy)R0#|}>0e5vl1L%xhB-T(2dkZN8A!A@KHlrjX2_Hhr7eWf# zdn?Yn>r+^pPn+$zcUK+Zn}NrH9g->*$|^U3Pn;&7zDWOrQ?GTXRJkE%NPW#1*oiiW zY~2es&qM%9z-m9lPN^uXrSL0D10ilHKT-d0QrKMM+|}KX2+z@S`SAf4W%>U0;xds~ zr+JByy7>Q<;g()8>2!xYz)UHfXJA>qM#nTro7_gHeJ zzD~ngp*iM^b;M|Z_!Ing^>t7=ArTFB*3^*f&6cq>6Th35lSQ4)XP~xfBStkB)I{B& zS8rtd6=K0_-3&kv641m&&e))ueh<_esA#-B@z`hNd?pX5FqR~hT}ST=?z_owZe~UM zKM3Z2wSV*w_EDw`p_nCLX@{2@p-*m|b4Z9BXaGLH^r?IB?L9r0e?5G*yj34?eIu@w zWqut~Zxf5|`G*^}0#ikfC=~ppc{?WD6_q?54q(H@SXj!r#9y}e-kETH?0!A$q%Cp# z<8;|f_=!vFR{kG$crz7XhjGPcsD=;dm->;%$2kUguq~`LB+xXVk}h389lgb5A9giC z;5&a>Ji~O(I5*O2;?8*REd&= zRU^I^DQjVP*`4(L&XEzqj*-X}Ti8sqldhYN*Iz#db9t}!vIK(=ZfhE^x_+6x*(KB| zXRqL^afceMVL3ytN8U{nNP2D)wk!^cRjE?dd9w3#i>R#4sk#MSVtqxxA3md~^0l{E><3k!dCh&`>C?6}Sd%6?)dYF`BMW zW^4R`tn*WJA7TcQ*k>TNIeTzzV%W}`k8S^Faa0^?i8?8f0mH^ zf}b#%#M^tArb-VSIgByXgg?^8aM!4H#Yy~+ZrGOkc?W)K zah6uu3+%;(ss6PG=V<%%XqJ{u=|c7Q4W4a!3%FzQPZ6QZ)G3OXV$BtB3YZ_R!7z3ieF2S@c(D(uJv+t#$hy zBxs2C8o&Hv-lyj#)O<%HUXw=`x7b&2G)bN-+!L)TsiLfzf_v0dAaCjXb}u}m z+yC*XsGzQ@$wUa@$UcAmyqnUnN}Fow$qOCr$PUSXUzxAJ{eZ8Zv@RNFt8JebXN#l8 zV>EiDl3G_C4&H+5R=s^!wmRp1rp-Ib=|;R_PhoL6Sv6x^Y@eDujVv3|c*B@{CULaL zuM}A z#300Gd4o?;caBeVKxBG@za0;f8fh!PM~Z1}C(s@o>pEu-=;bxgk)V&;UbNWA18FE< z{rK9?VPAKcDMsVDQLi#j;CO?7EM?g-7Sp;m?`m3=)|e!5?5-W#iVMAKz;i|S?V2^O z8M6Jw$gZhTMsXJ>$E0)1xi;}XtOh{4-wa5q$i^Eq*57-!%z)Dhfk?!O*jtS!dQ(P6 zG~ERm+eVJDrFkU?Pt4;$EN;2#dsh;i8#gt`Gn~+@hK&N;FcR`0jp%q?2tRGV{0-q3 zIEgQRHN^BWoR0&aw*2|`2)}Shd}AEE?JswM;@aLJVJo6Hq;K?pn#2-VMONp0TRqOV z1N59b`*WClMk5Wd(l17Pc)|#Gm&!ZeF5#9Ewmhml_mSdByaIdRfS$*xWf^K@gP0eq zDf-z{K?7JTgm7ta%m%QH;Q~5&Y06UC`BTZAqF?Z5c07G_u_rSDI}qpKM7-F3nBrT{cdIm<2GVHHje%e#k4#>} zao%CA$J#xw5}O^x$o}|ox+|lHl*7~p#Q-i1 zhCV3v`ie<#?hJ-5Zt6OZSxaKO9U~qlJOw(%a2(><;sCAJz7_yqcSWA_f#~ab2WABl zQ6n771l~I@I6a6su(?;p9Sxg7$yzmn%2Jrxq-(2V!QQSgi~@+LkiWd-{d~jUI1L|z zKBq^r{G!ex;Bmnehx=opJ?-s5vzu!x3FWW<;s>9?NrJLArYWe2Lfr;m22tc?ifmk@ z=dTov{jrFQ_6$-1m53K6sqHhg4Hy9!Oq;g?0Yl_jKc`&ZPd}7idZ$AIhQW+9a1JnJ zFGw|w^hFWKkxOq*n-HN_#1YD;yR;-oDH#7;!l(+b)tuXO?*bEI9&KF02>xb56$*$T zi405f1v;ODOqP2VPTiIh@3h(6amRE6^oV?pt$1AC#(m z9yRlKE|BxLf=v#%fJxjm#0t$ckaApdm<3?p?k>9>S8@d-b)W&e09kLwqtRAwQ=4a6 zoaE<#G4L?1hjsi7rmQj^wS|Pls2F(%K}J`%?Yx;0LdX7O+Q)uPmx14(|39{Wj+9Yy zrtq-f&ZaZh5|=(2FOR9v*ce8_?4>T}W_JSz5xhU`L&L#qU(A(~zVS(mzefvq?k8&& z#EJc-LS8=l9?t%dO4h;c7v(q+oLNJ0@tCVh+Wqce;Xe|1J--mQvt85l58J)0!caoOd%I~qzC9CLv? zEJVN5turcLmh!lfU(8@Uy>)X{GUYFxK9Ldnyt8onr7vz|%R1)WriW$~chY*4y~=^6 z)T?5@>uQJWQ!q;&kwld7qfQZ^+3NjXGm{ql*6;pAz`(y5<4^<$b=Adr*};YKkDxZw zqER1%?(X}saO>jtJ%?&2tUR)|)I6m?;l5{2dS{&pZr zOk6sHY5d zKb1nM!__Ry6fTaZ_}83h2dg`8viP73y~8_rr~)U6{|!~Fub#-lG;`n=_fo-b>*)%% zXt-m$3su~6Pp3S9`~=$J8I8UPmZ zy#bysS?1rhVP|}M?CT7QlCHrBOeQmT142M5u}v{Qp!cAMoHip(@g&hj&W{wTC)dfd`Jr47 z+`T^ljIw>xji5GYXU#2dg9zu@#{&F#SGa-I6o))JOhxgqA=T&epmBTdoH6P%I_aYX zu2Z;9|20S=ytv*<#9$7cvi$Ec0)7b9t{qa{iuxM5qCPZ=7s-s6T; z>(lI{(Zti~LuMFqY_F>7k^og|AbmGHFS{6v&rBP{-{JFZn-0U;|t=|bq zV%1RB5|1fy_5iB#_g>``=^ZZbrNEt1Jr)@P(gRt;SaZ=&Q4aR0BT zT;2;;qh+WCtG30@i^)BSI*y3y5$NhQ-%zvPXK(585A`~80;+cIi0?kmq3c1h(g8fO zweX8Xv}VR9VGTygEG!Qgos}}V6chv2b)a-t6LmQ!#yt>qfMREb_ zAURMu;<-74u1T=H6kUTva8!vhldIN2@hgj^tCY}G^1~%qcD`j4hEfC;=FS4PE7#I? z0sF%JDf}~2)@lkx)?dnsw@swPNb)WQ8Kl8wMb+eH;-ck6&0(UMm6Dj9IO4;+eXiE) z7Y~pw52b!q241?65WxWuVEl))%bfH(M8-_|3ykS#U`t|Pi1h@&zLrbdLrd+#|w;oVzb zWMrX|9y+SVH02R-Qf{ZEs@g;Cit+RO=07Ofa5YU1;fzq54<>d3tn>okqI3T|8eTG=;Is%n0Zl z{u9dd_^^4Bgs^`=G9JI?I+xjzT*C$RLe{#bsdohjCFG=9K7KhH9S_^$^Dog|(}Oo^ z(8Z#)!6Hoy%4o_FGeyA$C(jqctoXnq^emAJ!SWF@fpz+xwL7L~5oo*YZMF1BSoNy4 zt3W&2$ja$)%oiD#@%dBvVeiHy(#t~*wpu#nCN8tIk@C3$pqV|V3s%d$Romv3_O<#* zO`C~!$n0{pdP{F08?R%??dhd?aB<#Ids3DKt=h&1hW>gDI@8&_7h#*oi?B`PU&6M7 zv#);ll6s>terexIa;zijRupWq7u=TLi`XZ6!(HLVIYv~F?Qi{QzGYwK(M1cjkfxVb zvxsAu`IFwpF0-|87uuNXHJw3=WR}M~?R->rxK2Wn+I64 zR3QoIixQB|V+7vf!>FH-;qL(DJW_6~=IKq2zW38~=E5%oZl%q zUzWCf=U;Z2gse-XXLo$(bwsHFI=HYdQ^Z$K8`3vLoCIR4?IS+{WtB_Nqi<0B3$ipQ zo9KaI0K?P^vy-(g%|yhG?OO5xp(ap^95tI{4*$>F1I+x;fP6pcBA|nU`F?`M1}+)o?FTN&_d)*skCF{=o1D|jIshC70UE2b z5HN{QiV_eeP%R?<8ogk#AxfnA`XNg4KT|6&ettu+BIvTfB7|ucz5-gL;O>xnVrCBa zH0AsOVn4#m!3X-lmOOR+;Vp1j^mo1gc-b%k^|LS_1kA+|p!Sj!2oP^UUK6XYpcsf< zfv3l06?Uzf#uvtsg@}O(e}yO9f2yM#U7o9>96KC6MU$kWD3v6VAOq9vUWl{5IVAz; zd&?2)$A)+C$~eA){po9U1VO z(gD_>0Hm0&=8z-#5!=8_NWAm`nv#o-_A3snaNjn;r6s>x3k_{ z9y_okt@ge&#lAkQ0s5m}9@gfmK_CnQ*-dDc8IZACyv)!R(R++7ZRMl zgml#i?DU+n<%7||dL`Kw6XIUPiMjiKqzx_?*Uwf$+Mm-P;^5H-4cb(#Q<8LV-N}_Q z0Z2N_d0jXz8zNkGX)o?T>eD#O4-nWs;K+h1`igIm+g_gF zhoPS!AStZfA0O8c89g*{)=H!!bHOPJZYm;rmCr^)2@dXogefKk-d`>y=Z4enlwxo; zPky2s753j!Km}z_NXSKfP%m!_JUSaVQZA)5k9Ia^Z=Woc1#N4o5jUxR;37L^D}D3k@anO-xtiN# zx!~XZY`y>CXH$`97whwfw!(IbNnH8!JDsgnlCFBZa5|hIN;Jj|xjH(H9da0D2PkAc^7e7|y_;#-20h=6SS9rCgg9$8ipWjeC>r?AZKh2Tq z8sZRLV{Lj;WR-UcxL|IJ(q`V4&5iR7V{hx&%~|}*fXrg+lB+=H>9@>hf1sq zR=CZTtCqAxY|{c#nVWP{NzGM$mDbDd2JV5tlL{4hu3h{pkLSJ7pIgCu@*J-_w-UQm z>`g6oQT|ube&ID>J#Cfl0oWXQ&Qg;V3j&QzT>{ea0a*nR67s#6U6U z3DmE|EfeZsl1|Ag6B?1MJd9(SF*6j89E>*5u9!cHX4SO%iqUcE)CEMXV6nBU@8rVF zS--Stb=u6I$Uq1D&*itD&2$tD+1dHY?8{8-{5i{< zvm3n+DW_IlK>z>3)fzlBM9cGQCpH6!XkuS*HNVsUz|~~`8&_i=Gpk@_X_{gz7ydWueqkd9F0Tk!xVPvX)GL51lX%m!C&T3~A>Lgvqt6zDk@q@OQ zQ%4Y+kMwwBslkpkrsFYY10Vj2B>1P(mV=VeKx0YD*3MLQDz81KB%JcaNj8+6g?`vh z)&2R%MQSxO4DZNsn&0(V=%x_Nn-KVm=4Anh?tQKX==hXx8!Q24R_A(+rHW!e; z+_c{@H`JwVMB`Hv7|K5Qjacneq$4h1*8FGW#Qd+36ALhMPGHXS{dELWgulb_7Rvr# zCd{H(LSoqI39$tB|C%rf^I)c9_%eu${*FT>1EB8Ni_XQ)3XNpXGT^GfeF*$c?%rqh z@rwaDYu|VjdS02t9BA2H*O@07CR9B-bz+j)T{rMYj=H`Wpf>eYI1H&;f*^r>QQLl1 zm;-JKE+iXPmaR_M4`rzG?#-<`l5Qew&vq(#hc5O!V%C$_LHujPw0RyewE!b#w5A>+ z(@*eMJiD;bpLd?TSbsq^Oz?TcWPk(Amj8^HBUr#C{k)L&pUwC1@?l@3zb}I(lQa6R zduMpH7z-C*IDrBTC)r;J-&nS(U6MXHI($RWX?eaC`ZvG{0;H+_v!EF8o~J-KxwEX5 zIJS|Xknjw!?L#n<#Qohy0ID7gL6H-fxaO})<=yTuP!jnl7t)fio+8Tl zrXPSHz4bX<)^J!9uH!wtdn%MQvLU0i_Vcmgn_Tx zD)Id7;+toP2ucx!gb#d6!VDga3<0vME#p#oY+X?;&OQ^{oM2@sWfFhx*A`H`q;_>c z47sy6aA+wS;K9WZ0>|HQKY`dKo=zg2apQCxP_T#RY)2R&1lV!v)n}XWAfC4co|gvp2z_v~sZ2j(XDh3Vs=w|>JU{F0Z|}}MO;O=( zzOR+%5vF|EA$Xz8_LS*lM>apL$WRSzB)@+H$@nrVoUU8k9-NthlEPO%h5?=^sCmcBV^K_i%CF9O$P3^u=0K zaidX4Q{vjx)OA{N?3?Cjs%x85myi%sO-JW;1j*&bgPLKHTMe!i#*txp@ zh^`T2cZ55ww?C&FPv#wK?m8HP)QLbRt4^0c5SYf1j*e_O!DrK~#Npmmj znQnjEdY6z)r)+OlK0WRNApNw|8)E;3PrgV>h zy+FJE;pVNR^!tZ|=Gb~Y-ZZ#b@a0wO#zzKT)CFoz-1@CEJp2|=2)amgZLSXxbP#m# z$l4Jfou(nyC{u3}{X9#XF@5s|e7E{$A*drUR3-PMy&$L|sAZ_WsXFr+CQDVFQ45*6 zZD*4JKDPWML|>qWps|9WS-KefZp6KiphG2?Xo91)9=XTR1oIUCWi|2<;mM=Tb=K5T zkK1JHaaX=fDPT((JppV&1F^_^3OxuY%hu8-5gvQdpO0JzBBw z2%~d0#E9Q5HOKu{qurr~KF1*?8O`S#T8&gYiK!^7D*g?wEw)U9>qbv)hMH>E*TH)d~v!bgUW^&O{*|YOT|NjkV2Hv zPiCEsmpPZ%Ali>>X}F)pTA5tHzgC-Jk~Z^4*IW^!ZM~1x-84X>zC^d*>!M?(xq2XvXFg*^kVYfd*Vr~Z)YILNcv~hwif_rkuk=wwqK(qd;EsM z2~}$cz*%6Udhl!LD7FC>yia2EB0iI?sHh~Y7RjTvZk6i;Ij-6lmTiif*~-|JAbs05 z7eSQTq+^#!g>|VHG4!SBzsxthd{)#D6Tl($&vFh8Zzq|wdVoZ(Z5Kk*ukNpA*A_4j z$^g;aCFtOwzPB&fq@^4ZvG~~U+xQrroyhyBF7Z8y8-$1H62jRRB1XgJ_9FF2fYx|X z$n+p8M5DN7<*V>wef}j;8=>f^$(BygH<|of2Cr4Th+{5rYjRDG!egF*<*|`ot7UIn z7oMhOyp_dBIs7hqP$! z%R~R_vnq|w`Gg+h+~hr5%SVbdZ`V6|DYD8cXmi0a#KPx`^FyIRSSRlt+Yzz|-d!-D ztPcvF^LEaqt>xH&b%Bv|`Qp&PCoy6#SyZ}Brtd|U=hzG0?FYZ^0zI1sPtGq#9No5n zJvlIaZ+QW{m}Ic;-eMVHRwoLjcg%n-Z^ViXyQ6Z#YqBxD9~?>%U;c|Iof4iUq|a8; zgm)z)zplwUjozIpjpUms75ikE&C1R}ES{$*z>E&lyI1HIC6w#7R><|`eMs?-YYeSl zMZA{QAnvtR|4B~v& z==x}$GWN*RM)nZZgaWRNR&Ll6yA3heij;U7y~YdobiH(JR+HWh^xpCd=`9rA>AR+3 zq7(w$==Ku-?M4rQ_rjwO`4}n4;vUtwbK6ieFx}GYWjrZkptPo>2Ip87c9wTbj-Ht= zquFSQeWE~dk#u*_KlHF|u{E*b*|;f^79oFr(+dl&ZT;BNwiv+Llgf)mIqVs}7+#t9 zG+=tMv(}J#r14I*$Vv_JF|XWl=eBKt-HdWE7($G71-HKGL|KytcmA@W2<-b2LTjWx zywWE;!S5CvbdMSbf@HMVvx=b~E6Ve)i_J_6V$W8fwKpUSgEHj|%Fg96I0&}c zWAA-UrX)>_6k@Hnv9~lpKdMNsJr#H=N9Zp}tf@-H+6Us{Vcb`Vkf6UrU0A1+bm8v+ znO7mqW2Zh>Shd+F=}+H4Jb-UX{?KypSKV;VXguEW%X3j!v0Uy4`{{~fURB%^i%8_I)6DyyuB#4UtDR#qf&`Sh??pTA2N$9<<~ z{**rKqXZkOt+>nr2k_Z6)45Mx^iqP23tS>R=;hQSa0{+_jYAjK#;G$%e^(9d6}6#O z;jb;);IX;>IFimxs{^FKGUAzyQ#xlyw-;j;a_dCT`yBp#duzJ&k^r_=VKqsozjD`pl=; zLTZ8}rgs`KNp-`EUE9^uW)>jgyvPS+hQHz}yw?*%M-={osF7qMdr;BQ#pq@-yJ3l_ zrGjB{ag$d@N#G{Cg%c4m$MEO-w_B_jeSrS(Dp+sYuJiM&2l4rHu+kgZ*=3EmRYlZT zRIw?VHXZTHqm%WkEtwsY4?{dGlyb8QgG#Zx!of>|pQ!{ov!6SR)E^c7DkYLSJs9yLwQf}R*g6|o%=E1E~B9I$XuOXi3c_xrmBMyM@YDDCRTQI z^dW*-2o}EE8#J4%O15pOVZBRr9v^*NfajJ)EVn0XbNWJ!o(nXWfct5~MnV+nlA>nP zVxXQC&+Q?#3oCYa5pp@GlPSHGyy8UYsOoajECt4dPFg1M2}@JXvR+@Q;U?}tWYz%*cyTTdKw3$tXc~D?_035>z0q=(UH%P!N@A|E- z+Gk1geD@)~QR+nS{CDyPhOSM@*N2xqAB$C}fNLgL%E`yFP)y&e`zmL}Uz_HS9wTqf zECA|XtmBP?*LD2Kt%yR#kpzL|_>d9a3+^$=Id1VFmV6mjrx@f8;K~ogi1nklG6<`N z3j;RjK>r99*4gm$L7^tVQMeNEM>4yoZc#EeY9w|-omv1RWN8QGH>fg@Qe8!Ix(M|l zX6DW9IyfgdXl794yz&}2@+GP_e*3)v|G^`|z>QN*nTm{&Y!Su}P*F=W9Q|ESaRkQx zb91u`U4P3InxboUalh4-##3roGL2OBFk!WpL&K$&Ed13yJ=eyiN#8FWheuWjHcw~g zKhhn0*{(;fGZ1ck<4+}b*H__Vjevd%o92g6wzz-ix<9X^==D&(KcH40of;#nu+I(6 z^lZfe?IEX4XR_SMfK|-3^15)Xa$U__iBqd9q2wCqbvS7}57Rh+!b_$TKJ`Xu$AhH{ z9J-FNC0uPOKOA0JWh#lI@bW^UH8$IGMy=lJz4)O{B-vv{Azp`}rqgAlH*k_kFK^Kq zl4zF_F=1Qh8Kf-zvEC`QD6Q}2Qlm6~-u>*BR#nWWtYyC4{PN5p&dec=&l?bWcVJLyWPG_i<;sF03*5df zlIR5Jl`O};Q$96k6qNIC<;6~uMn%)J!94m98g0bGt~Fdx=*H;ih)L5sm8D5r5r=nN z>RhRL2|bNSHveZc(UvXc2hKH_1nRWv%B zD8O#yE3k0Pa?8)U>=EX4Wxr-+tBT@eWqHc&MtgaR#WH!e045tN<^l-*hHA}}l(_Q) z8QH;i~aUl786!CFY)cvXcpl22IOm-FqYrH3nuC^ZnlRgM*v^6`p$BmdY6J^*B zqV4aGn=A6mT1+f9e+U~bFiR@yeE@1e1v>uo3zMjUhtIZFlBj_YaOFT}U1U-vp4SiL(nb|VXL4Gj}N3G0Rgc=ZkLP1B(XfF8JSbHJ#a9s1y^hd`k? zy5Ic^TjzjvMza$`whoZ30>jmJ5GgH^S*+BKe_>Qwex%6LppALV8n{|$I8q}msnw0K zly;t*4;gQbIY)^sP%aotlK7`nfu#UN|YT|ox;_gDC4zgpkUU~OK3 z+X@|lbY6ED+IUc3%jxWY6ffV&Mq41ZLlP28Q7=r+QGexaWgK;0cw6;>pH*`K+2MFb zSM1sDeuHh53A_r9W&{`eu&{@~s$bGY*ekCzggNVE`OKamknd&W|-^G*2WzWc7#nUEEtC2Iu_NPa$7~2$3&R*!5KJuq7od}Ib?nybe z)JdW$!k$}(ll!zGy(&d;U^fHCC^HV#)!9YX?T#O?Gia1hlRV34-5XOyZ2xBrbjzc! zC`J<5p>W|BnnBvI*i=w+P)PrymGY&hCxhP|Ic#i{tim&C@r);)AyV&H1a}*bELOoi zjV`e<+KxlKFaWgW*VgvfL38U3z(Lo-w%&SkVY@VT4J!a$%?(Fm*gT(+7Te?!$tKZM zdCgW~6ELzKEfpDRp0gU!aVPjBdv)?D$LDJMPh~UOWtrPgXnRVc0Y*CR@f^gT5(T@t zP(v*|R{?hA&SBfaZkv&RZ2zl&8sHn5ikODDEwh=(P3+A9 z)8R<5657S7uD4mVermM#`gyyyT+l;4RF}XZR#dAfU->1`zsh|}zb*r%yEwh5n7?30 z#l6kv@xa~=&e=qf4f?{V*qB6b%^j;=z;D12Q~SYc{A34i>DHNb(xo=9sKRBYX^N>} zr-YhZ3r`ONbnAHYXUwz_l*Nz342{E96Bn(;p2G-#Tbds;pj(_LJ?={R%d7(W_c@Qf zqvgztMYYwSN35JHA2Ef8SX)Yvwe{=@Z-a zR*^8An*+LsX8QZbwhiaCHMBZ3`n>!?jh5!2#CfF(ZnPHjU8Xm#=iYCRb`RO2$^^x_ z)%HrSiOnrexskhKPfg8xKYN-k8x95%!n7dFk?lLfvOfCQGP~c;39V!=o*s_j9Ox-o z?fs0;QQZ$m<9Y()KepNPy!c#BZJm_mN|2U!?K{hlb2*O8Unt_k;4)RisF+r^BaDI@ zwUFwf{BbKxKi--8HzgkFsnd}vt#*#vZ0~k@9o$GW3-d{b#VKYBSS8k)Q~2GwxUsu@ zb4Y0>&!x98d|g9r9`vZ;)m8Z{bMF9gi#lpjjQLsp)}O71#2VBm;DH5E1`C+iI>qN! z#pP5(C7N9H06eANqbgD$ra(Zohzc`w1eNv_)1=Z!Lu83fQ-jb56%u#3Hp3r%& zTugiCTm7UdDgwiIwetMpeE*_z6!yVWXmV18R*Rf5f4)2KD=Nbj%OSc8M%{onm{=NM z(ionMZKv(M2_2Zd;(!zrD0hr;hIv&iJ)4%AShZ(#RRH29bus)>>c7beh?CRLGUYpR zVwl&9u!6j8_QDd<%Wa4nroh6 zgi+^5!^ynh0X@uM-g3hz6w!O&H**um+`FkbpQv|J;!myth#&uYo0^yTW*5!VMythI z5%?)(u?X@S`&`lg1|*#kS-qfuj>Rc)V2beUk8csl?jwji%KIP5zqmJ?*uUU@QxM0V zrXZp8frWAv-yQT)IKbQ>9;GEE3NafPurI49bH5LVf@!t)Ngvm+#8fGN)H@jU2g6SoLKVnxbV{FM(};*+rHTXP}=-2P!p)ATt=?RKmNF->g@-<${P8zZ!TIw5|w z06s5fRTH@t(f!(+2#|8gm^AxXqoTOdOGl>%n2Y38$tykF!L+ zMF}{|QqdST2E1`;y4e*@@U4LO!6?W5%)cc|dA(1=5%jOoNv4>{wC-yKRY>(si(~xZ zZFy>%yQ$s|>%@bx2`=YHn;fDYvUhFUc( zqQuRz!;(Xo@s%q^*}kpR12UXW@2tQ-{+?ON=OPBn_z~j^l%wQ0d?&NcUk?Lh?oObln6!Eo-K1?e0(PSd}4X`YBQqug8Uy32RBC-q<$W zEC&aD&qaz7LcPx`6{+xlt_I+F@&GFpU>lc{T>UxYEvJ*jL&CoLl-Z`zXl(nDgV0?< zqA3_Q=_6Om1tAw)BP!4?DP2Vy(v6c>nJpT$_{?wPS;;-ozmI34@ut{ieh+Ws*=2`{ zzpDY!+S`1_w^-FCE0=V=*9K7SE3Wr1O%O#64i5q@X$H$URv%|4H4KGe2rqu}-?5iHLm+95V|Z#P?N1gni2!lvp%nEIuK zk|!Dt!TdeW0nL*a0Y!#oTa~x5JD!RE8V`WCk&-3I_)0Uo$OgmuZZ5q=a&+M9yfmX& zli@X+rnS)IdNiz(;Pg@>PSS4xZ&R}6zj?Dia;EcJ*Ml}yDpf{+OU*Li&=NPIE}UI^ zx-GSR1aHwu(3pD^nKj0OCQniEcVjr~qZ`1~G!bg)uEd1_vX^sc2{^cK_tu;!w5N(& z{CUD^wEF64I-aih)~>V~r=6WXYx-NM$tnHW(^M7%*vQx&kIp$g=5^6&3b#>qA2>I$ zKF}y@Qma%3^da6F`b}&XdRDuIJ)gV#=GUkr5-Qz1G`C+&O6~aEyPcj0r_;GBi@)eo zE7L2>F4MYiMmScRcz}7weUbU!Q-hlfx z`iC+n@`^*=SCpOmb2QXs6tCS*-yV7Xull{;iTV7i_aqPI+JCCYx5v8eco)Il^~Cw; z06#z46tc*M97ysVwW*9W9kS4d6+Yw$Ww9!onSEiA7quuipSw^t{q!j}X9pl*4o%^D zD*0*S6Cbu6?#?5lek!WY2IP5TUOOlekr%*1LQ{sfVx<;VWhvi+3t1Z?z8`;TFRNUs zNiFihgI~@-UZS!!TR3rkRqJB~3y7OAO}iWi6(m&mkRwH@0RP`yl0dsEq^UM%uPTu_Ze z(Nza>H8Ei^jEbiZ=T0iPrM}%rFuuHl35FJYG5oD*NY-R7Z?c9>+_wqUp~iDq*5fi= zaWkc2JF=ER@OLf6rFMxqcC%f*I2gF$oQ8Pj0eN^wCOJ`rZXSELQ8`aPp(%rRA z1|fVz0s(`LA!zq@!<)}X*5%d*a|T{MO1&5_K*}!r6+h0(gmVF2J`DGGoo+UP0n?4L zo{#3MgOWgW_wj+Rh0s_~2Gfnq)Hrn4n1Zz=8|*Ubo}RK)JZ87QEvM&CcaoqB!wBld z!xnx-3??VY1*TQyJ*9xeKXms*}EYyD79yU_llT_$LGTz6lPqD&W$l zE%1n80fWwh=$qdVFzE0v^VSCryawj>)fJ8&fdg#<;&N2!n`{LMf5n%}Sfr(B-2JfT zMDEyqp6&oa=ZwN%loTS;6nwz%{mC6Q>}-)V7vaqS;`ZA5QakjZ|~sp z(fvSy*oWBeN8cZr$_)J$fd1!yYM}RZ;bj$`y+&9M8vz}?`ftebn7`Azv)m@%651c4 zI`ZTW_s9B$7nbs+fo&o@vQ*4@$pL{`1f~#}et}up9>2i=L&FI>*?gjp>m+ByG#z0c zWUaj5450ufq2E`0!mkj7P3>O=l@P_C3wb{!|H?^?^SBDOKB~-Vs z!fvA~#rDZv=dWDCGZxh}Cm5zS01KA*jG+sb1Z@0S%|S~kCa2Az<$Fa*A3maeGJu4j zpmzsGRT#-|I?gU?mvsw5>?WuDhp8LI@ ztyNCkdQIBE1PTD|AxHNwYV?UO{RnFCAPo%p3saUdWj_S$`%iC5$>jrZ^FZDwVZdLF zn~h}9e@!6L&L9smt>>RWWU;n#8@dGD-o~6l0~}uFSU^2tLO=IWH^bk+ekrSd>8y4txGR*q*KB)yoL&3_ z89P?Me!uyfR;SgN*E+!% zG)%vs4S0(e@5kMq(Tb<*SSR#Vg4vz9u6@bJc6Z!Hk(FD&~mK8bh-i6wU;Ai*yrku3mqUK3U2Hueq zvWHAZ&kRphBqy~C9>mS^-wOSe6TrxKdW_D<<_6NU3rdXY^bkjk3ji&Kf0*+n>#_us zoPBjddFY4-iVSMcMT*IVZH*RHgo>}hMg5Hc3LVXCu6vg#QF$(qN&0v5jc@=)@F772 z(th!E8qop+wund6URXwXxcdEy5kTbtFajt8?|>JKfaDD$7`u;J2VewlI&0G)?tTYK6tu>fmplj{khE6pgu1yP3s^a8S}IIJxT{Pv7YXU$ehp zIbwT*2<%;Wnwv9MG{)$15o(r}1QZm8q2w2$$?7&b|CqDfr|FRF^^>qXMV%AcJ)sJR zydVS!HjdC5=s`@#q-x6QKW#R&D6Hb_HJlcpPMWn_Sz7Xfs;{03%);bDuOl0^|t#o?Q~Ij==1O3#YZAB%xl zCD}uNDch?!!v})T;DjgMNk`9W!4=sMwseN9gev$Y?#L$CK1iwpG5UO^LyqFT0tEJT z|1W@``9mQ+*wf)g&Drr@pBZs9A=2}uEJMicnE_wPHYOrUdXRB&aX!-SogKoN8NfOs zoa=a-sN`pmuHen1-|;YS(4poF{QJXBEyB_yJxby2(+y)O;qu&-?sA9MBOu=;3&^AJwNbz<&E3Gm2C=yEbVy5WamCD06U& z%t|3D@lr>UGndi(Tzg)qnh2OY;WM2}%2wer|LG&i=?C4}Arz zWTBdyX2>jz?Gc(w6~3FfWvXJ@T~SYPq?Z=nW7ype@>uxvdz6I7C!1rP7%TH02~MOL z?KV%murNYvuUZxsWnFdbQnI!|yKMCMYgM23;R-$#md<{#I;kc@evACf&vsavE5im8 z<&VmX@-pykc?gq|lS1|>CF;_N!#t-c{F7?)3z9mhT1fKSp-IREy@1SsIMkoEHY<+G5<^JC-_-Z!obB6kjXq)VJ@DNC%<-sPAy3xJud$c8Q9R2t`& z8QQfTd@U@y%8^xx3``tqQfDhy>X|l5jP7`6O9Qkt-WiW#50P`TgNF%QQD<_YR9*@? zOPs1;I5)ph+0KPjfBQ#dvZP1VtkKSYS8y(cEkQg^Ap}Kd=U_H`XT@V9q%!pCVCg5b zeOT%`*5)m21QZvFdL5bc5l;D6uc<_iF!=+w-2fJ`G(owTf*G@OXPuXN;=ADE(C2z$ zMfm=I@{vB0I(QWL6=(K2Ora%rGDcm=eSILfX?q2UBU2Fw!? z$6pg|RxiCDkCz8ZEmMw*?|RM|uu+D!AM(||EmW}o4kzLQ#3S5%%FXges^jYN(dSdn ziPEm!W!6QhL?>En+9@-R4z|X-c*kWmD-yI?)vefrwny=ZCE|2J*`%Z@epE^dtbJ_D zOUu&to@cA1F7*mgbByum%O11U3zX2opY)^9iDyuP>1EE+8I1$fX$NVsqLU28O*@n1 zjxcN|NWmkNFLlIYiKI4=V?!{gO5`LlD9RI@!r8*n-iO?TJ~1_oe>*7V3aWd}KRMs%Rcx$8LAX}_g*NUU5ZA6{vW0r)_ zcDnyj4KBdcd}eDTuDpEnyu0#ofl@ETW6)^a4U;YivO&L!4c}HvLzHX}^){T_n%ST)9iP>xd|HegtZ&X)1v=hZIo_;(OLErM)q$zJ-Y8bgg z4y*d~F{jDn(kezc^wU7;PBm;Doey`OAM4|FK;A;`seI;~3_wi>um)V&K-oy<*i>HF z=^$%|bpN4#a84oZo)4Xz+GTpww< z`UuOgvQc7E%51~JTvcgyAv?uZWXAY4@;<{OmAPfl7}i9-xTV_{lV!s8IK_O%HpIr; z;awBiQkhvDBvG1O*qt~H`e=jf=+tcTedSZ$klw>ud(7$GINtinQv*eEc#SSo0Wi-x z6JM`~wg*RN#Stp)7lpwhvKozsk0~dMf^{p)U2bhRMfxZgjTtxAYaQI%X8IY%4;M@p z$K&L1%L`o?`?T%U#LW0Y=w#TUsa9YmPTg^Y!i=%>j&+?2`!| zWaNHBK^Y5^Q_gEom|4MROR4CB24&JAM_qU>&9)7=6+s6F_77(~e<1LZfK;BX4UA#p8=via?BiY_vpwm`AYFVeAuYmOYZn?C)4ZKbL9 z;Jpiau1L2UNa#y;xb4-Jtor9QJ1lGfS7S;+^BxpXeb#+sj=zt%%{>QSC(Og=Ug1bh z^)e}#w+FZrCIjvI((MZmc-=&7lG7vHqI@!m(?~lbC}Ix&A0XSjDiteE*~!5XmIMC0 zs!kEP zR1I>oH)i#%iV^$I?+m@M`?S zm&vK^$~`XQh)~s+&r#ff;L{c3%)vg8r9C0 z)e3jvNDK5^C6Y&pF|?5dy~0wH))lCclJ0)OJPe>OoAu0lG#@|!1znj8dmD~%($J|t zLFpvuwKat;E_V0>8qJZA(XJQn-Pn#z?reQL?7Fd*9Dd<8oFE?$M2$iia0ft_hM7bB z=C|F;v!hvfno!-_<6zHy&loZg*eMfEuubWwLw}raTSj`?PIvh8sxp)8Y0(ysr&buS z3ySwk2L(c6t=F9b_|drYY3cXEE+1aoCp?~{)dwC=66|T|5R2S+)E0tmiB!%)=3$$p z%S|4c=p1#tHYIU(h1vau?dOGwP#O2IY_pLxWv(O{+J7o=k=$9+g2yS zV~?p(;HxJz+z`7(0lW_SQ0vF85Y($Ri!qe3we^66OOy;7yvN1FNEq+UH9(_*590k} zKM5QV;7{oGXSW;tf^*ojJ77v(HPuF{JXM}&Ae|?=R`kZua-;<*&&2rr$*ryNrs^AZ zU*%JSZFs@{=3OA?A(r;YXRcM&C32F;1y)V&;kLCHs)4BtuWp))DO6pLYuH4MX7SZS ztkGSy-^QzLYbj=pCabnoe~!JnmD(bpyW7@Wj7Dg!NWW z3tMd1)S2g4vF`#6R!_SznMY2rtZS|Y>9fNJs}E9>HL24sxK>%x2QDR*OQ_lD>jiS_V|W8k86knhHh8|*TMnb*-|oWV>K1U2J<{{?bf$nnddbe zO!w`WQCb$lM5fqI;KAP}E?0fSJtW7_`Aa4nhY0E1o+S0ip|+iSTbu_SEr~Y+5A6G00@t8769P^7kfr{2%|@Ab`ERKB>S&?77OYe zwxty`R%<9yyW9va6Q8V=DKrtX%gcL_2^zP<>=a_7(YcsBjR?u^M1KK4lRUe>ZquQC+Ho|WY<@kCYuaA9RS@pMG=}sm30ACE@sV>x z#CN%FQWB~lHim$2QF1)L{C;r&Yf2D|J;P>mkv$rC`!mfj!HQOY#!pjdfF{;2y0q+9 z_ztE0ahZY)fy!BX=kNAa+`UlRz5==J(2RIhWf;H?5c>RF!0F{$MRm>s3a3>;hBH1Hjjv_g>VJfvS-?nmPmKB|?iB9+{6 zt8QCV(L2A~q?dLQ>=w~4XoN^+tE@e;Yko`Hk6>GPvLbAimo&vB)o^5@Y0ZMB;~7UD zdd^q3txt5iZQ1cGCf}RGYa4&2wZOiXtkQ@n&ZIT2Ac4yxkJ?NUo3>m3#E z>f%_Q#6^-Um^|IL3H9c6`88ADoZPXSzBYVP=2UDZIi{p0+r;BHfeiXv5}rmZm8LA_ zyN7fB?+mv#pM@@c=e|#IYo4XKJEI=-QctQs85;qIzf8{iHit{%n1wT=NHwd6uHB~S zG^?kNeql2CyN>n*3GJTMw>2t&{v;P|Q?z`$x(R)o_{|JJB2NfRVo`Kf75DqzQaa(N zcKUsb(-K*OW=DE?*5#yO%4)5ay9&2;q|^ovJYBaM7moDyG$v;NnVyXTK$>AEt6*{` z*Bbs|e4~PFas20Zaq;8Y@i35d^Ro2Z0WH{*z$$}JStYPI=G?YqX*Cl=_hr}h4sC87 zEU2v3jhfYr8MJ}1`&p3%Kpfn+vHA81Au;DE86TWy6TNqP)3;`lMv6n4cbMJd;gS9{ zZ8Jaq`q^M%urZ34ni|==yuoz*+2R*w16T!C=M^!w&B}oq$9_80#%{<&|1CoV#j`F*RmVtmkUiSmtzeNC|e3Ac(@_RGlrv(l!Q^ENV>}fTE@$-HE zW_G)et$gr1Nq1LIOl5e)B(?IqfzU6SjhEHOJxes%mZTBJ5(1M#xkZ&J*_|Xf;*d=}j5jRUg>2H2 zUPk7z34Mo-RA&~N%n-2_Nm^U91JV{G4TubI+g|}v_xBR%Com`SWva$}i+@3Un>a$0 zE4`vVO^M$@_}VeP9eD%JFrSt%NjX!;$c#|>M@lA-Fi7tpZ-fBAz%U)=OUu(sOMsJQ zQknK8K5J3@?l@Gs03SSHQ5cAuZ_FPyY`S^M@e!8FP|s!y5)scl!|3V5xxe}V{?NAx zrWbDpV7JlnsV%c4=8W6GP{C{h_7t3gzkD-t66$Rs4%mmIxnGt=DkX{Jn(_bR?X6?t zTI22SV#VDG6qjPfT?=h-cc)O?-CbK81|Qs=;>C-*TXA>y;=ch7JtsH!zJI=X67~)x z%#aCtfA_Q2`Ye$2*-Zqe^-m%abQo{>ej<4V-SeUN3|W{RWvynO^1F8S9;~fJDlJ?&R^ye$7^_%KR{nOFZ zqC4M{bl{#VuS`VrylKVw83 zeDF_86R`?tC;X$ORQ$_K}mB}k=eN05$--BZ4Q z%1}N4gT;!#q4!tOuO_qWYbPWPdF zcKlJIJk(%`H^Clzy`BLd^(ZC=*6lUjcgC4Ml+?Pd*iVH_k3r9t@y*U_?*$T2lMDC? z0igNiA3qHVE-xL4Xbqw&ieHZE#XJCtckVI#wt;hN1Q#Tcp@GU8277_>fZ02or>bqA zB2DvyHoj%wzSK2=xz|lz*;eeF8na365WI2?yiHZY?dC%Mw-z9I``#FX-y7buK9rFA zCyyx_zr+QGf_3u@dT9c922H%>WacI*`bE<>{TC?F>E|e2>msR3aZB6}; z49&Eg{$2lbiUu;q0+=SqgQ{MV%Z&Jc2>Op!%!4_k{u@y9(!`0tiQA(U)Aa{$+(6Di zE^!KNwV(qVvhZx@+ftLofyIsReI^ol*kdKD4w$X8@QO~$hT|b_YnNw*pa(?+Ti6xD~U#O|$S=dC?D9Bwpa!_b@!!^P$W&O4BQtl0)KKuXD z^9PgdO-|*Trg=Ke{%|(`k{e|O0sBsF94$A8v^|^c?q?S}cKcEXhZZg~l@YlKlam4k zWX|96qHARWDkPJWb^{%OSedjyj8b92;_N6F@`kt36ExU;3xO#SDe@iCnDG9heU^Um zTFoJa_Nqy;0ITT7N$H5G8KL!m&PpW&{>ouZZG&oYiJfN}F;LmNq?GzG!#10!gQHe* zHul2KQ(FbU_lxSGJ|hZEIUiPO_8)M3lbbVXK?)h(9ZUu}7#HfxzG|kbaehb2gZl@g zviP*&8!IaIez*;f`*FwDV$Ud!i^}P3-nSXfzh;9nIyoI&8@uvM0DkhG`L14RReD=K zIVFD8ZI)aZvjxy(OC+-xvt%SdswbN#D?4*rn?7Nwm3!m%-eHg(`FH0^r)XxDZqSU% zf{6RDu>7lJg1eq1T#3XKl zye#Qg*OifcTDsWwf4Kp+$^7c-qT^fu6K{k*Hj-}U%@>0c5m6rV9Y5kOG?hs4c({zp zM^Lr=vz>6;0(*EsORdWCUEK!)85;5|GB$<4zhlSZHC+O9O&9NeYeF8orTs4@VP_#t)%NalTsNKxxpxEViy(^v zGd>Yn;j-^rl#VsiHA+8n2l3J%#FKrHs{XI1Q2EhQ7}rf@k`0LN#LE8LOLQ5~v-26* z##ik-L0?$`>+{TkJbd~E;_GdmH=`CS{Onl+R^Si~Dc?9x#XafM+;KR33GqTym~TGJ zEzr{#g6(R$Z3BuWSa=DFV4INob0p(XLc)0qrlEii_70KhW{E6}U-wAMy+MP^K-v83 zm%(McMf4OjdwdrtJ_~34ZH)Qc6A694ZNWZ#9)S0#yVLmb5wn7(j}t7Q#j6)9+TZCT z(+jf80PpYg0RbbTAQ{G1m-~~}QO1;_kh9QruD+L7e)oFi*=lG6vKnTU6xrN{2El`@ zhVjJ0`7sRW1c1wzUZIK&gJRLIE>csx%KMB&etOwTf+AEBi_kBL`NZAy6(xBL`G$2( z1%;NL6y^dO!iiDb19GhKnO6^adrvOu)Un2dzv(r0)vZ&R+^K$9qybP+1tU?o0%8Y|~0fFrdep6+h|A^o$Xs!^h zi^jZ}PVihRl(HGgrAZG0fsKp7hz4-#y);M4bfM?$K7znN)`b24S`(^iC`)Z|Wl%=F z)bfemMbQ71;O&19=Hc91fyRVL{zT3qJji=5{wEliT?P7<=MLy;$xDrjFrVQ89#k3m zjC)Y|$7M*<^VJXXMSlN~G6<5{D|lFhANBV&+LM&@7Z}5n{!R$0lVm&Tvhoi3M|}tN zMy`%E?SS5_C+N)@6BE7oUh@k7@fd=j3ciDng^^Fak-4tP{OqpUNg#N_1sKEHL*?iP zDcu$97Xf}e`5;y3__Po{?oX}E#a>|k-Q`5rbl1kws+Ljg;c_h@e+LXPZB6SBmWYL* z59gU4OChoXW^EoBs;!~r`idX5k{lGKcs$RX4&#)0oNiA0*exHfuIIfYc1&r|-(8on zMOHByQZSuC90~`CN#@Z)kt`Yp^(Mk978SG2eGaH4W95qN$@~y>oD!!tvzi0&|Nj!< zSF4D6YX46W{*V6Tgb;5eA^mOT=0u0tc~=N$aidiYO?W7rp#(>s6`B~l=@v)!JJcim z)RL{!#<7iqg58jrZ#^Z{a)~ZKfN>IXDgV*nRoJtD;$qyRbrUcJ*8$dmYptUe57OU zw4O)eqVzTY_8*?BA1piNJMJXC>XvyC+Sw4a7i|VdlnPx*B~^t1mAV)+ft7)9)X>EH zTb6ZGMj2}c?}6CBOX?KbpiS1Hjb)>H5Cwqb9}0kONmqlyj7yBTl8EtmC*DIt1qCfK zI%Lh~>FKjvV~=AFu*8vb_MrWut`<;x^n^PK=c!S_5N?DhtsnY0MF3*iX z3}rFxUT*kOC05P}$3do{j!EGCt-(!1@U#QY3|H35B-NmO5AnkyKH)K@tPLN{16P~% z;7;F}yC+B8>D!--XUT8sZ!jGA+3{-ZZ+hmh_6|H;Ecu&5RL!?hmp{Q9_+MUhGtVCD zxv}DT4AKM0;@=eJCq>77cdcQ(zd@gQGt?NWQ)H}zw;GYtO4cVPer?`JlN~B&Q7EUr z?LJjF^)2p925YCE{}OvzX}Y0^@cLSBfv(#=Zu)F(pDe2!d8+N)>JHr&BzJsU_T4;y z$R%^LBB`=(HL8Gs;nvoI7Z5YWgk4cZTdpU=_k{*w0ESr!`hWQv4nllv-fu@)KmUNs zu3I7Pq{slJoY6*nt;kj@_#}lKNLdNp4_6=$&c$0m8LDFeLk)7;%C2&)u9x?_SU@Q+ zx;#|gXMN;ABIzFSNgxq_H{9j1(tzbNtLeT6dil#TynP&i6mK8jh2wU7%J;Rk8#@HT zU(iPahHgimP=rScd3C)8O*l#f(W8FQ#u`hJ3i>JF;8choD z!M%zGjFVsJ3j5w>?&J^z3Z70Ph*VTi(cVZ-wdItE_4ZX;2h3u-Cn8N=o?nD=Mwk`R zD`4cf*U<-b<;z;*UNaEaeB#-l0-U|p(Lhs=X%{Rc8!xL7I&*KQY~?|lRv3ca9I##` zNKJBXUNpNlmax^1c>?fB7lc2%diy$`f>%BK;XDsKsST3hr|VIKpxjl@CLTMjQ|;C1 zwT0z6k= zIJNfMDY2by8Hh!e3BnV@X+kVUOV>qC;(WE&w6(aW_s|kDr~8>x1@4y9 zqg%kmKLISFT%zugx>{VsJ2lM3&%z>Xo?R||p4uWo@3M=17P_Xt{0zSujbqS$O#jEl z4<(#S*^&^WYv4_fyFh8E#i%!b?l+Wz?a3!!^S{h;pZIYaQ`3u?JH2Puq~s@}2sqXD zl!zN7yr+R}CcGnV@5l{Dyqp~y@Hz!?UL0+H*Y<@UgF5B?+|j(TV@63_I<)J&-* zlw%ms;e6NDQsg=;aDkvWxii?=Yb8BkiOsNU>xCjaMV|28>Q>!gn&fu2G85Os4G zcGfmgWZH-I_{T1UL5_|Au0f9C;`#DXa;;NGaxKTDT0R_bZqC%Rq#1derhm1RssxIh8_etCH&&Wv?Nq%G zzd-zcRSgZM-q`q+jE$H_Ic4l&y*go`%#B4EkLri`)WOG%dOI9*f7fx%I$A)lB8R{5 zY&OlJ*|_QfW{jZ#RDCwku4Bu}?chDa=P7h}zj;dlT?}$9&k!QV4`FN&TglPR{RhYE zMm)l!T5KJp!y^$(wrr(+H*0|Pn71mrWD7O{iV_KB`R|0TUAY%{l#;roaX=cc&QaLyJ zXG73d4^Q&ICZOCV7UXWM!U|JkdPmt3acjHjV-Thza^Ixx0%~JhLr`}Ce~kD~Bpg77 z^zge9!Yq#@dmTW268zMPWdCl@EKGO|#4OSy?BaIC6yxVtm1ryW#UH^=*KG3co8JxR zF(~!+Ot|-Oy<75xiDk(Lw{TTb*5K#p*;pOull=zB-i4Mf3?rtgD1&QPwj(j)ogZ~F zVWFl9Dm^{l6@#a!lIxi2xVEPYUD0KR=ke4m(RNHBTD6qqzdvP&YUkS#mmJ^%IaIcN zqd2~2kVzJgNywIk>6XaHpe0_DNHv5s<{YA{VbwEK9|tL8{pwzhVY``FD@z2m!5Cc(234oVkYXPhuK z@QVrU0$H88RK$gvb31s&niw z_g9PRJuCd0V&{y)$j=BJVeghE4BSX!E(3kXdR9pGBs1NEXYo{L`pV)ZrG-`BJ}PY- zIN5z#VUJ219)Gh8zI9Znv`i z^>wl7mxSrj&@w^C;9}l#Y0+Y0s#t45?mvC{MvY{nBr4UMoTf+kXYrXh48u~4nk&>& zL(8MG5lcx^G6KaO6Z1zlipsXd&K=qAhU?rZ;8xPeR>IIzOXNPg5Rl5svs$w-B`_sh z;2$83OW>D|oY69LEqumj;BB{9zF&?RbxC|Dr4YSE>m)Q8Fo(H6g#<4!bNvv5;JyQs z_qg_v^STV-f*Q5!?`7CNP`Y}_bXEyaetcfDR+mi)om=&W!;6+v{nw-$!k_w~zs1WD z>5@Dxhni!@DYw#I_k!vl%d@HBvqrazOE>y3ZZF{*OUnRb0I^JO3M=NOgXH6Fnp}4^ z-(lUh{xNx@OPBBD_ir$Ie(Z6Z4i>V46Pc~|^byn(Rzomw9-`KXU^}R$b5czT0`>6a z{x92fR~h90xk;yPfo{@U&o}9bx0@I`hPhIBo&Q@hdZ$p+*!GICxA`b;HP&;;4r6fR z>|2q~;!F4@BwQPDCGx5@m8CkIOcJDuEZ#wpS7r&A{u;gluTDj z>laY^27G%}qBZX94Nbb9=Ct;;wTNQT!~fi)Er8nhnb7AO#X&PcYPg0yhKrZh0nGX|=wk3vVCnFG-?UQ({Vs9JHwSq2!%CzR0Uy zk)*cNmdS3*5B6HJK`chxG?cPQ%ZL?5+vJo$y2*B<-tG$qA_BCW!2WSMi25x!MKr07 zel;(i1T27p%kG<^(&qqcITJ&_l}T2%p;*-%Hhj1d?O-j~{dk*+PttM1G#e&pcMTC) zw~oXQMsjEU=h1~6QjM||=DG!T(Ju6tmDO}C`6JX(sM66=&WqGo6d^PMMU(lfqD3)r zKDdhR#-C|xqg(ONzw;@FxAGpisxj@`!(P5t)e6Kmpf&($Lb>8UdJBIJg|xe^nQ&SU z+a|~DwXW9P&#pV;iPuD9E=DRN_4!+3Fsog+7PjeedKDCZ>FsS@*%}Y&L2kY_)lH%r zH15yPXEvxBPo}&-w{IlMPl-$s8y^I3WUa7OoM_1X<;rVSlLQ!wkLw>!5E*P#>cwc5 zT99+)|F#$&fZev97|NvW@MSlVc4+TzpfxNpril+0yP~pEOMS3UAxff8zk{ogY_5oY zxx9$>Ff~#QUWq5cm`ki}0{2`Er)yx6J1@SgR&t98FVkV}sTL9#L^H$xYvxW#&KO9GbnI<~h@Jbi;B z_-w9QMRqT%{Qfw6{1!uAGgn6-ot5yZBO+sVDFQ0uk|q2#&Y^Wxp?{@jQX!iTK@cu9 ztIq4=$VFSr8-Ml%k7XZSRBvyIWvanM16+nA@dDdg7NcL$EMNSX!>s8GSiW$8S|!^Q zHNT>HHb{8Z&-*Z96Kb>0`1Ev+=UnhKE%`er>j1w<$n?4!GcF zh(w;6Hb#$Vu*iJGdt!OKgqiMfk0goxwy8Z<#i_lRu= zO^=`{zeK;bF|)*BRxWo&2@}n2t826XW1vpMR|W(Gh_+u03=*ygwzpUyo)e$r`=+7- z@Neq*ldqWim9+e?0;rwISqhb@9=zq$axnU`{U80gP@r2I$Ri+!gB#UT#oW*^i*q?k zkuREzkOrvU)~m&$w*yc9@NO8^Zd50^JBX`Hp`ysXmHkAV!2V4hSR+wzw!MpN?+5x} z_%rav5A@x-J%kePLYpq&$D}*ycMS)4-WT3my{;IT5Wi%)EJBAQU9C9)U!Y9YZD^b< z#{-aodqUU9h~?JH6$tt=*Df4I!cHqli=lG~G>OgHt;7p8!M(igC~V;_%Z;~-T4N=G z)xGvqS6>yBipfSkB0?s2f>P@Bc|c~{wc^S!W*=j#*GXW8zi>c@p2gfh_6u-^CsZ~$ zTJ1!o+4kQew*X+eUT=tAe-qH^yE|2ju3-lsJvnNK4RBG9m>K2DGun9dTub%}^Q?M} zvvS2{ubb*#flD119HCrW4f;)H85-Ryh+nT5ULoXgZg$AZRFz|eoE+rCDF{ic;a1%E+)-;Hw+u9gUnFss#D2@i0@-Iv)C=Jz(F*x^bE^FlWm;gT?ve-%3 z&nmPG(CHs2QQ-VeXal_4W!pYvoG?V3O!bZ7P=sqj*IXnF#C59}<12m}OoPh0kJUNE_?=eLQCJ__I1xlNbFG{2%ZpyF_|LZt)PzDV&NYXuZ<)IH81nWUU4`_#w3s2IGRS?BT;g{j0%GF3Z&qnLzdsSQ zz`jO|+8jn>aXCAWNoSt%#{MeSq#=x)7-cG!AusuX1YZeW{DEc|F2FywZ>eCH4qIPy zmDz7c7|upnEfC|HH3B^A71am02p_tb8@ND%>s?m$kg+a$Eag)9h?Y^VT#?XpLJlY? zZ}}w*yBym5mY?eKA34s)9jr>Q8M-x%@xQRNr3k)4c>bLFZCJXsZaym?vV0<6>Ykr?HF#w>O4XlezgFaNz)H?_ zmUXtysI)3S+Tj5PX5Lz|GE1PovcO&rrS_sOEVd+&#yY$i1CrEhsrKN}ahy)#9Pl`H zlrn=P?M393%gp5tt6G+9Jtb=M-a*hE?K);O_UVphx7&Uqt-8@Es*^Ngu-d`z=+QBa z$*V<Goz^MtLI%#y!SD zGgo6-4NhD-dN`;A!06BZpo$8UtxW5=U{FymA6%kTCd0A%=2G`mKIp?64=pWiA?5hB ztZ@&>w~Ivr9_qV^tb-Y|n9r7rL)EpKp3IZkf)eqb<_HnhFFP?DsW$nE$ znqqkkwx=ZqO}SxJK|stSqB7H@{;pw*XD-%DKl*)?pt~y$lCTcTUq)pC#(xxQntv4P zAEhOPLvfsr?a%_O$!ikKO;>x1(ch7cBeLQI7C5n=wx^7v^fNy&e%6nAHujR(2-xpi zffQlX*}nhN}W0D+_~**>4gz>gWRtKYm4t-b47n-+LeaO-upMdt+{p0Auad= z0#u5AaZhmc7+hyi)%7k23GER4JN5GR{!cz7o#KD_loE(>puMSg=%BqR5zL-Ur|7ei zEytaonyMg*uLr-#`Pi%N0$OM;rOrPd8Ki>Spu~CR_~YIbax@>4*n{WAK^12x%`D!Z zn^UU1e&AX(-u_L8^ZYiDGdT3SZj-#0Ouoc0GfTd@Qw~|j zjy#dBxx(01HY~Hy+ZkQ-a)Q?K^JrYD<3k;uV(*T$81=w=^g&9)hN$wCtSkdH(KbX= zB{?~G;mfFAfN$pnFq);8y4Wl~D=TYw)eo~MBWZ1@^w(o68$Z(qJo(cZG-x=Ahl?6h|Si>F;QE9*`x5fx>h;{Hhomr7|O{c-Ucx8z;x@Xgm0#QPP-;cU$NZS45}zQ_BTmyNg!B!RUsqM4C6v_U#$m zqLX0U!AAk0K=Ln(hKtq)T`Y6xy%firvF$?byXd>={qt6469hHw zht8`9h)DtJC_}v~3atTwbT;{`#ck5a1q8Hb?sQBU6&g+c8;=MM_=g$TMfd7vxc%>-&zg&O;Qx{TGca}q=aYtr>-_p z$y>S-qm4H!a4WqdU6@^c$Yl*Fnkly$#MM0OzoYI?ZUS%0)&mJk7RIsF*K8?fCu3=u z256KgJF#3+i!UkAggSI`+oHzF$JGkrZ7oiU>HI{{bh5D3gz>vR_9@I+_xDPXCG582 z({b_WLc@qft;o&d)$A^ON@b5DN?fHB=r6VV5Qx!G zkg;VYn!+R`;AYwRv@Bz^tU#=*$H*!6aBmhE%OzDfol<<|uf?8t-x^30q}*s{$MzF# zjBv1Rv2V6B-Mv-;BcXHJtmS}>l_>eZ`5qp~Mq6IE9@=2km2qpNHl{l;4cl|AIxdYn5LWSAVE z!u~NP@yKF(D#QeB<02o~e)^u~%B)G>xhfzF5#>PuLeIN$lLh5aC!XEq5|l&q*?iLNinXjmDp1k?(b(U17!u&i>tog}=FFVX0vx!)=}wK7#G zf{`+$#Gg2i6I;3r7(oqvs5W0Fvzxxj6O;xyZ6Fjg6XSdVXD zj4zCqEy&XktjEyjA41o{$C3WEBuX*Co-I!FLPLEBjSe@6e}KCBz!!nM262_7vXZNI zqLH?e`+aTswfuqr!Lz|E1-;}?zM=CL9kmB;KG815i-8OhDp{*TTJlz)Lz?tz6%+d3 z2=-XYg<`Rn%+=T@FxZXAS3WO(4k`Oy<*G9QC>hdiQVfH7-xpZGySUrh*_#zwJPJi* zFU^em+{o8apnB=nm!76vz@#$v52ul!ciBkz=@4_ z4Sd>H#CLy8W~i(D9Xp+_XBH$MT$iWrU8?^m-PydK{`_0oWxLlsf?a#+N)@Hys8lms zdHTp;-4Zcyd4QiHS!yA#*sXTUz#-RaGp1svdGhT|Tx0fBlW$fqeUjD<61Fi1B}Z+e zhD1fK#X81fQ`J%L8`AMkTW%b45A=g7W+`9?yYrD+|LpBK_D74KLpqkf@h$=yP0KFN zCN&#oj=z+UCUc0L5&DP%3+o`1$6lv z3{q10tK%tJG$TFr4Y7LqL(7bhW2B_5FxOtu&T~t*+fdN?Qh%+YY%(TXtZC~Hqqx||h!Zg*Eko3RnEJ(Pb@!*enljbnNG!S601KUeteWWnptBA8Wo(MS9$I)|aZ`ifxjreX z9>)t~3=%SVa2$|$?t7gjw9|zPd-s8V82JnWbjZz3oo<+|*gT_E+#!sHU>)U8Y2*J3 zm)J)3P7bXQ0R4Ntmq91aN@yV=d+|OD!y@}C(xvgidE-(MrT=YjfCNi6qu#Qh+3AJu zxTb_N$@0VK%J}?J>muVGjAdP{uU@Qvn9Ep*Wo@pf{-*i7{Ij(K>z1s9xY}4jHg)da zrEKXq2pRO^YC7Lz_t)zt2+IS%&wgjdpBWYh5^}khqs+T&;iP(F@^h|%SCBPeUnWN z!n%YcS;R8v@Zww=?!j_UHYFT~XC37O-{o$7F|u^2(c3W+U`zE#^M`|suZ^!K;Pvyc zK`$J=^zyQ3NeZ*k?5nCkcK24`alyXAw%HBKg8uR7s}Au{ z1)R?sc?i_Ly=hFKLt$|cP<@eYp`zZ?tYbm~ng}&00auhHSdm(QFC>yA> ztup_LRWg(;;`DdHUoS9MBbE6?1~inI~ zXBXQGcT?%;J)Ev`!F|IL11dsf!~Xv9iG|B9EkdEex8Rg1)wZ4H5{k6%Ewt*5%dZYWz{a z|Hvc;8l8gvj!tk(YPg5!jqZO~4u(Dz1xV8g26cx(@xgsg%fp8i#Onl;Ch6g(Mv&h( zK}roo#<{VW*na&`U?$$(Y|@WrJkvdDzO0HCMwdbR7V82M+OFJJ3yY#q+e2{b=%c`D zWEPF`#X?sjuC|-1OxB-oP5ZKeJ_o-3gRMVY7Y495v!^_J@AocTmT{`!ic39LZyzc> z`nlnYhX&mkc7T(?EopI0(wT&HtIRHPv!j(w_schq{C9tfCU!j})EBdlyY_&SeZYLW zK|S?q=iT*=h?#rlw(aeRx#93Prt<_n32CV|Q!aQ8tvZhPIlvpH8tsj)Y>)oLdh_dh zR~R~^mUXX|4$;TKh!-l3S~-cDcli2XeHZ_=8mhb$Wln=|;JO#%XXZW>c@+6Dz8oW2 zuDk}--fW^DJOjVbNPoO#_#twDqJp9l#`nVvU0KMth+hmd0_16?0P}V44V#ZzTQXOS;a^#rD=s;pJw-h<-oAW)Y^4T2BJ#H<+zoEDiDJfX#0S z@Za$umFKZ*U5^p~Rp*+FHediOHg}B~x397m zLo0MVkE5Vkaah{M`* zPG=epbYHptFk-1C`(?v`Nrkg;u|y|CL%dBmq)YJ&2#da?w+ODJQp>g%3nrp9WlyIgDG>pmHz(x3*i!V zV{ZU^AN0qiR1ADc!}yKOaQJ~FSvfez2Z$6*cfyk5GSHrarFviXkLJ+@jFj}MO`|*2 zI>(eeoaIh{Vjfjatmg2;R`%k(>0Q419|Qkf+U8BArj8AM!!#^VHrzQ{GUt<=d-7eHUSbn&f|Zad@Tz{fMRIzKvTp*ZfrPF`?|`^|Sx&3)k^ z-xtLGcKBI$yq-|R;La@aWVqu<{NzZGrnKW0A9lZm$@)&Ta+PE=aFkl?Yr3M*d3WUw zB&dGxv6jyt)WS!vR<#h5`l{w8j2pT&?`HjS=^lxPuyxJW{SD?2t7$!tWF>57pUy`W zsf(|V;2HIkJoG2I zxSZMBw%HZ9Wb53haOFWzI-YpxqI&U3Ok6c^mV)3Nr@2KF}zi zTIreKmeguLb3#xBN0>3&jP`mG;ZnYlKjK27!htt5M*N3 z6G>U`PkMU$YitEs8DU8l;b^U6NxGO@`!|q1F#-Kx-~j`Pzv(VI$2V?z!fOWiY;PII zX+zKD0_^pAs!I}ElI_{vNQE%jC$dkhp6e608eBO9vV+=vTqIyZtEoKjezIS{R9<0u zK}mBjYjc$|>qvB%1{b@0srD1he)DVV0np{O^0a&Z3PSoVMBN!zW-tEymM5apub&Tq z8Xq<+z^&S#DKVv2Ny1vq#rhQ)f6zFaHqM#o;E8M8#deB_+G4i*INk>tl<}T%Jhu;x zEr3gJ%sloFbYPJvktoctV(VyGQ(f$Uv{)`b}L=G1u2w95sf!VHCX2P>gMa)6p^hcdf&M>I-4@!eDg@~IJ4V!AR9Uv)HQFW4buS(i8jNisR-qObExMpPxMo(NYRZ37*5)#w zoi@zJQLFYb2HLQxSqu_b^_CFUM^ctMWQe2}V+e`RXWKW?WuOpNv6WDL(g}h82%V91 znKBp?cTVCDAp35&5G@cC;jFC&s~988*FqW29<-X+LdgIZ0-nh-Pgx(QUl6K&Bl*U& z$Zoi;@dM@TM@qmPNi^}(Vr{B#bl>-)<|ZC-IiRK^$m7$!_xV;E_$|LdsQuH^a`Qp0 zI5Y4HsQ4(oOlX(N@5zZ1%535#bQyGF&{8rg6I{0B?xz+c1XK0Aq#4FzlXnb?;%5D3 z{?MU$R5kZrLUgKy7$1;Ma#5g|qCTzEgLsO?hChAFK1p3hn|wY=!hvW4NRJD@SF%>U zT1HZ%M`9ZyKn}t8fH>M^PzEAcCg^F^QAIOp3R5;}I+$5AmYb|@F@{*zb#}?7Gc000 zHA$S=ot7XMPiR&nC{xiVQ8lVKu47i+qYEw(2&SFE5u-eU6+iH%HB@R2Dj%c>XYi1f_JHo&I?f=lnqWXA#-?gZmB8$^LF^y@S7Qs;S9~I+b}E zD`(B($QO9rv2t2<6!LRreyKvVeEf^%SR0nmyq2Te>GDt!e?1RChfTy++Afbr#R$L7 zo$K18!G?VRX!z_i%8E%c?!-R4p7rH_hzG?1@z1t}VE(tkJT<&9LeR!@-RPimEpVE= zV|OHB3?u6;sDWYNp_ltQW<)g=`sz}&RR=AvbaKBcu37jP`~IY|T@I>EV!9L<;f+_=1<^K0o<_ z;s3)_u?*b;&FCspNUvC2h!oVhglO|%jIJ3zsE1Kh7(QWD9MSNh?t=STMtSXXxfarM z`#;(TD$c7u3nsi1Q~!?W0)zP1{T+mb>x&tVB3PcCGh+`taTwBA+6kaHE}eOLK*25M z`XF493Oiy(L=o3sZ}vWm3^bSn;gvJCPq-g@wT*t_#^0!xU-*Jl5_*C$h_~)nE|;bC zky%9t$!`8@&YvqB0dJ5$fz z!k0Vya^J(O?Ii4@*e?(4E*1#zNIuz)U}c{%O5ggHRB4~P&*^xvpvv)O=Dtljxc}i| zR-1pa*KHz)8|JaN`&NBJow)Ysi$`OBP07b5X*(i+ndgr5r*I!JAh-2uKfyAv_gZno z^q**-U+D|X4ZP+Xs3ZMt|6=SF0qD0$r(8LQ{bn{%`bOZQvzua)U>P0V%KGhUj>Gb2 z%+Nzj&wdJuRQv%a>28z{-O;5#y&umAdjn5^Ik&xWLCS+p$}Yu! z4x8Mk>fHUF<)>E+1d8=r!&@*a-*HhvVA+NtvHd5)EC@8)JEpTvik-vr4H+M#KeYx5 zZ+tXmc{&5hP``h!`0O~q94GQOu&=MOz2fu})Gmttc@GT|q0)!jsK>?o^?U_EA`}Mb z8_kpoE~~*-Gc9;k^!5vsinOUe>sL-&Ex63e%aEy>R@@3Pph5AEoY0FIyc~=>=>b4F zPesvQ7HtQIrfe5=V)VI3`A^*wdP@jdnm?NAxT;9E@B{N1RdAOWvv~r=#qg3QEdF!f z-ihTle8q%E?~Ea`-yJ_Dn+%d_stlqf((TE{Scn&~`^oj~b*&|hl;bDa(G#9Nyo>B) zlnT%m{}@%g1-`X0M_ z8uRS&u=fx1h1;`3_iWA~J=s$gMl*dq%~|6#o;TISX>qig;>}IjYSWxHlecbZMsBmR zsm1fH4a+{vmdVRuO~WTsJ=`{ggR97m2a1k~j%gHfa(JqCdV~j2=$DSxKQFI|l0rsX zt1VbGsbh6BMsoCkiYUGtpnOJAe~Gq*7F8^gfk-R7@Yv$;SwWo16-8PX&tQx0sd1g| zfMVL|Qv2xV-)ZN8+?>mb<+b6Y;hEvKDNq;`ncZ8zU3L~VG_F_fLs@wcxKXd!p$`__ zYOVU_!}oZ$WM}7ZT%&{lr#{N`!hKl?E}AY!*Pis<_0ae`NW-Q*i-&wC7w^QI<3D*4 z4%>4O=45X6HRdrii9GO001mdUKoK2J-$IZ%?a!P@9R*&Uuv?X5dr&n=gCk#9*5Rjc z;?FfV*h?)70|9(v&YiOw#k*|9e1rNotT!2*N_UB;PF;t!W%6yNhvN(z9ENiuId9d~ z_|oh6LeJDxEHo-60h!F7(9#|Nj)A6HY-${NVwIriLd(cf?+3K9$d{uD(A-b`<8n!J{nTdnDVGGl+t!=IEX_h%U=J?plU=B&GX6w)kAnDq-v_o=M;MvLZ%<VOv=z*Y1mfYgD!VHmpG#Enl3_?8+$7riTm5^J?nVul=_g z+D+F7o(JLWAug64rSw1R+@Pg97}6op#Te4{EH{SrNm#(wSvA1`52SI zkBJm*N~pCYNB56Mf2@!YDPfy1Ak^=O={M!wTF@E9TTVGZN}(TvVAih6--LZ^l)T5@ z5N{&`c^rMO-qTt_f)4Os*OO*=fzn!fYA6M}1)H`>MWu;yLzi|nySL8eBG=Z31D33Y z2gOzEBB?d#Ah{l5)nRvf*-mZs$C!@j4q8wF^+poVO(_;dR8Z(ra5rz&$tWR+J4|)@ zJDF|r&$iEj!g~xGt5+(4*cR-k=C4yZk&f1txfsMufgG5HM4ZZ`RR*}`f%X!0r$2em z_eVj5r8lJs4o<1oz;OF@-wpP|0umS1YNjTjOjll-CT!_Y@JvkMNKtW3fSOi5D`3*; z>t5%DK9@~D0m3V69X=yI>Tj=3)4w!H&b>iu1A0nuB`3MjEFM^dC9tUdIM-Kl4Bjtx zhu-F4o-1_^^dUaa?m(QB_BtJhX4JLiGGKC9lFZvZV8K>@y?S-+xl14L$y@CFF3}Z= ze7r1S=6pI)d&@p^o8Ijw$>5m$v((&_;y%+iyENXUu>+oM&E~7)s`Lu*(3(>_?@-0u z7Tl|Il4&eiZ%~2mbm$?^H6pK^BkC0@JAUPjs6!twp_PlVDoS)M(l&h=|namUt9 zt%0VcGR0B@klY-OKC)5r9>{37+&BPL93wYAk!KnfMVcojfBL&4(O*N1-n%2jDqtl& zT1@2X1K3doZy3;OAbBhWPk0`pFMe((lgbCl@m{afzq(aTcwVMzFRj>nY9;(oDB->jFwlN6s(sNWMkkk-+54uC+%6U+lX+ z{MKVaP+l+#G{=WzH%}+rgPzl>b+#SB^)ZOz>g^!eFLs65$2z?&Vg2X#ySOoKL zwELY%+O2s(G4?go#As+%c=dnCB~n#dd1^OlN_CMJ)}#N?mhz`J&kJi#&!pKTupDh> zo4ps(u5-V?F4v%Z^H^8%g$Q)uN=PpSRmaq&3atpcka;}?!9YmARMKP;2Sx(qAl!)h zMkOHg=RL$AKiq9Hhh?zvDr33dk!&gB7S9B%*jlS~`KhXNKODe(HrG30$m zuz3ym^^52k?4LHKKWyjwV+WJP+b1!XXpkeP_2UbwJ(uIHk}?*hmuKP@;dYrQ^$Y39 z*5^L|-Q6jTi8pQ!A;e33+>2jYN9dLVPXV4-0fH4(Fo}^i>@O!i`K0nkFVz2|>n(t) z3ft~)5s{LR?w0QE?#@Glba!`y(hbrb(%s!59Rkt~(%s(y#pik7|NG57BYS{3Fl_hP z_rBIzzvVBUAq*w@S?!-xYoAq^@l*=nE&wsjakuxJc!`_8q|UcvZF#1nx0egl$4WvDFS1pUh1nAJ|1ZZRRmF z?RQrX)9d;f)&~kEhLOl)F?Q+KWi#I;yilIrCrq;llI-wuHC;s%J69jRA>yBwCluS@ zl2^j}_=lo2z6(3^!!fqRzWR`5ih?PMS3JWS^OeoS-s58C@Dn^vJghom>pyHJyT;x0 zrm(3rr%G~fYg+CVpK2qgN{`~E{+}Y^Yu?u|DWsM z6nOp1BDDD{kiPC;W(Vrh%>od>j0=bOOspANGZ0nWfwz<~RNle_pt`qp#r|8~{r6=f zu>8l%@L{ed`9l>ShI^L4W(Pmv)WPKV)q0$|x#J_NULczh6_*ykHV<9f9nBK%@m>#u zXxCvZzlo?nYsq<6#*cFUnJGlTle$tcN#SW+${#HQ93ohj0U5gqCTYg@^R$Qc3Ww&8 z%1fJOMyVGsELJRHAM(d9H*QG4Qt>18d#*_>Q5Z|C;m@?M6NH1~X_w|>QJBfI8;2Gz zomzX^eF)?Llc3U&RU7dzJz$>r|C$@f2m+vo2$X?=!$4EpQ)B@C^shbzWawu#Z zZc?R^Lu}PFVaAi28_V9iQk4A>^VEtbM`qR*;o*oWIyf+6FqHM@(`&jycz#$dn3x+{ z;MZicN(fw7$1O7%S5o_rj;CFSb|ueR>%v!&+Tw-SmhSo_J{RHza{y&zTeUe5TY4+KeSDlsinZzgrJp0=0N{GT%WQwk*icNg#?cN+dXxD9>r;2a*+$8)U!yLyebgu{ zBWG?;mRI9Qd_f#um9$qpO_Kd;gv=FsQ<|^3-r~Ob{YSEjU(4*@bLGLQnF3mgX_jkVDmI}!;KY^I&(DN zh|Yl2YkSSkNkc|u^ohl)g{DO0Y&-50AyX7j3fUClzjt*KBv!3p5;Y(Ag=7iQ ziOMfoU$Hy(*Ok8?jJ)?w;evfIc5w?UAZh;H3>!@{np&Lu<}&0VT141@7QmcuF9f$2 zkXz=Y#Jgz{JjHiR^1Q-&ww$lsF^bC@&e;a)652QHLetW+48pZ>it1$mq}N*$c43k2 zbkj((=Q)~n5x2cFBOZ{#m5Vb7JFfDou0sWsc zrF?;OP$DnclqpdVGN11@ue6pOdsO(ul5EA@?uO;(o90`SkW|5cMMj7k>>2Ox?!kfk zlj?}Le~pbk9@5MYc6F{3XO^}oGQ#V>zuO{Y5*I`f+2RoWWA6OdttR@zLP$IRAMukv zKLN+}VeepAaC+^}jpnoHe|r7;Vj(c3vK9i@bUCSi!4f@i=Jms0I(}nGFEXBZ`bpAJ z6F8@zQrilABv6jAA`h52A|)^-iY0Qy0f~L{>BZhDZ32?1HX+cKEnN_`H=e@xTI(k} z8bg{|io#EdU`pg43i1jxdXtGrlUNGiEkH8O@y6PIMJd6*v#%`7X#P>C#fSgCJE;J# zhfeha)L)h$dk?3q)O`o73gHdmw-;0(__MJyJx22FgH!J5SK6nds8c$queh(BH{0C^ zJjgNN18Kt1ed>z$-kdM3e%_q<>L&`Lr(+-Y(vl1Ceta_Y{MW0K&jZ#f|E>q^!Ia3? zziS8e)puv#Ik{Xk4M*(3B+mnd*)Q93kY!CtHz!=Cvi^@owpCr=lQ_^_u+OL{iyXSg)BjBZIY(uDlyasn^boa0`> z^EU-u?R|B~*uJ$K9VE@-%#$KG;2tAY?c~@(!hJK~40SEM3co3`Q>)DanuQGgRW+Ja4ie zI)kv^Vk#$SPiN5i`x}Fe_r}DaQW>R4#QC4&i_a;>{1QY}X1FYvfWU7uDW@Xk7}6G= z-`Z)U&LmFK)VEca2&h`;T;j{}1oJ;P8U#1t8cbT3-%t6sG+X1f(TEg{ig|WvZ6|ct z9fSgN(pqT`i@P?MG&LK#yDaQo_O56XlZeEd6Ge;q^XFzmpYn~Ycc))Q!L?Tt^T1K? z4*id-yP2%N*HRA(JN%eFJ)zf>fEgLN=zF?%#k_ISXiN#do zr@nUEax6;lp^nqua(AYT4LZAwP|TdmD=*%;vLY@{Oi?yb!(dzuXSBS z^d4$d+S4jbSSaY@;_zCUbuV4;Nl1ESDDdtxX*U2Yo`@V`2ER{rqh%Rd@A}=f&F)4! zSWC6O=}IfcOw3Vy(6i&%afW;qKR<<><2lD^6E&?p?o+-n#M{@OtLph}xwRP0Nv-tJ zx4tR#)vJ)&E*hm>4nsZn6FbCXD(ZjLzC=|O%7s2dH5?HZKiaGrNWN93ucma=F<$qx z?_)HJF-@eXi&>_ZfG)itv}bFod5d_{je*)DW_@F`lf|!dxUYXyI-0Mwt6dedqYyJt z4BjN=a~D!qw!q_cS9(E@Sz5M;VnN3R!x7i;JjpeGp5(UIJWq1#UnaSYf{QzAOA;1m z4jqu%l4p&>LQ-#I!swKf+1Gl}hB)UGU5hMQpcK*=#L~5cb$Uq&L+yu^y329n5e9e| zycEt9#d`$V0%0tBQA4CwTefAkI~u;|%n_-IV`u~|YN0u}EuQ=c;;DM1JmNt&^kcjh z3>x$c2y9-+&pzs-fa&KHr85*on3+(jj80?kMa7J63SaDF6rI?|lc9UBI)zE|U=nH2 z;>|8GRiSV1n=M^dKhOZR9%A{dq1N`}7*3|_skX|%I87nHm>a3JlQ)V-{qFCGR%sz; z?B%wPBKm1YW}K+A+z43e^)zOP73n>~qpgw0h*| z+hzW^i<1JsV&imZ0sN0zcUv(e?ex1?`@!Fqf!bg5hK|hVHDdK1O+PPn-#@z<>7F+C z7uybJ7*r{wOT_n6>E?~eh-?~hwkQNh(%Jl`Oh4|0t^HEXA57E|XXjE=61iPj$;t0S z1@=$y-EvGw5a+zv<#Ubnq?k~T#L4k`o3qVNZ}9D0%S0P@7x~*XBdJ~btP6!y<`i02 z&6V2BfjfRKc|ud!{7oBWiSPARKHT#3p8NESM#qgccM1;$8G=RO&bzJ~CJtPo@i3>> zXWQbWQ|p){d+(>Z83s#J+tylng%|^j4fo7kgcJ@0=AV<5_rqh zV%H*N1x#XD*a^I)>4gP;U_kv)Pw%?{h9vMv5hx;pDYS)#GW304ihRI>eMnDVlEHTU zqx^zDYJJ$ZD{vb*l zut?fSg4TLfOqvx4;Fe0`=ZvClBu+eRsF6{^IR?4d9*s;kSqGMvr{?@tf5xnv91g6e zg}A5N@IBB0UruO54fr~D`lP^L&!=?$Y6BjrWY- zum;lIOti@ zD?5T<6)=SspCL)6kZO7oRvqdAHYvVtcRwU>njda@_Uo40TJbmV|6|^yyfRHhnaWoKnh_9r z#j!w{PUdOJpd#>BdT`UO5JM*qS5>ptLv%2R_g%>+6l3&$;10Kw;WmlhknY%*(r}lG zRR(s#(?{u-&OA{5zvB`d{qb)O?`kyJ z5^KToCkr;0C053L0eaH=Y6Viu0oJD1p^BXx>Is2hs1u5bzMOx|o5I;u%E5f@9K#K_ z6I`Y8bxW#S4JtRepDIT{NA?)1$v>AeIRVP2>+Z|Ixe0KKu_A)or0aMv4<5&MFL5~E zmj*C&1_!}q>RV;_1`MRg6M5}{sO;@bgjH^P4jv@wh70P{XzWD(t_h*zM_n&;qT2}P zkjJVGsgRPvFB7G4ojBT0J+_Rsr3jmsJlfYvCDei#{qktgsX}P61f5;YLXP9(!ht`l zY1B2dz$ZG&t?^6)6xq66^jKN(%RdC&#C9Kxo@dvoRt5F1p;^wmNwg1tdk{m^StmCC zQiQb9?QDI4=zKio@|lt6>&L++HbU15BCE&GP$LhJK|2X^EAKndf$PTJmtim{&E2|I zD;;26D^xLOY$(mj{9hhRWQVN2FO$zJ|E16m_}5S9uh>>ts)k3xnc4U`+sZjwp@3C6 z$TO~U?PQXE_%-K3b3O=e1@wAF-UbKPdCkrjRMUw>wnA!7cJZXb|*&aetqqkhP~W% zuZnGaTKBjt1#E}ZBBMNe!0#7+$e~@Gi+0@njQO3IikshJ?_9NUg&M%GeUJZO+}teF zxt8AaAYBW2o&|A^08F>YK%c9juYN-mmffD6dgnUyEkT%tSR~zVN##eFED~YpX8hMA zE-N;V9eEnvmhIHct`gG*%12W=t8~wOud*sd<-%IT#+2=#m>okYw3wczrs;B$;u(w7 zBYk3u(*&;2wnNg~Lb@5OSa!->pmPu;_?9m9@Mi9_EplzpIPo2ts>(06XTf&y+SO=0 zC;fbaZ2YvYD7)V77B3+M_tW7);mxcbGf8s@za;rSmUi2nCJlwk`3dz3S)E3i6x@>i ztbk5^W%0)MzDWaok5pZE0i%|<3w5hbORMS`jz+5aJqbg74tDCAu_1NL#9FfL-p%+& zkgkK<3d{#$TmmKqnH2xi z4l-AySasLo2F?3LAOl=lcs&#&V|=KX2gk5Qi~W9q@~2XRh)X3SbzJLHwx4X1W`RRI zLzpL}xEH+XN7H0n(;}%_hJkP6^6Wpp*|nx|1qI~EFr+gubFV@5?$}6YO8iZ&4Aw{t( zz1tLzXw*4+t(R-$RA<-<5-7^5(mx!PdX$FLujVP{z~pNMp}-XKype`$-^ydq#i?Ri zE`}?73tM$xlr*%;?Ughf)=#TrY>`=g+N!9z8zs6gy$XVusH?60N&eH0446aKxTMk6 z-Lb7^Zk*4OZLrZ~)ltN9WPh&4!RAA@8%Hd2tEHlrD<@8tsC?+3ktDO4#Ra8 z5nDT~kk0?DPNz4*?kC0`*`>3a4&^1Qjx%LYR8SXKaRYMrzpJ?&ra^rHoiynC?+~)^ zYY6#|GW?uEMzWY-O?L2KVCdOsD+i(d75~ePh6h-;c+>n6KMoqHNBVUL*Sr5$81@Ov zs$OK0-EKM#Thno(rACcRIP?#Lo;U#JkWKj-r`0b!t>JIdDs5$k#+6jusL2478y4RS zP!f64OZc1_TDYK>t{?1?Z@A1&?%%!vjxw5U-^j+iVQh0z7Eq%Z0@m4!%|k<1#;;zu z$jzLZGD=Y2xzCr{1^&*-sll{Mm^{4dQj$T{NpnF%&PmzEHf@l~a%KHs^+>mCe|kUz zX#HhzsDxJ9q6$RN-nvNEDam!-U1B3CYfw{Cv|YpYENG1~AevN?(MgV`(g_!YZ9BFO zT->tYf5Wi+5kL2IQ*d<~f=`D8>D9G-e3kj2xr_E)F&GiO#Tscr8Gu=8?uKfRSgxz% z*T2^%3q7*I>{rkY(#wh6EGtZR)qY7mddccJ)Do=*ZBVn_TbOGgi1Rm(I!9X)7dwdQ z>WZ{|5ssx!ooYA|hryZ`lS8fndbfvqet_|_F2)`@+bU>-+4?1cdXXKokYzsCT8TuN z_-i<7FfaAU;?k$Gm8zM73nX*I{*Fy_MlkxInI2R0eYB509=fPwBhdmjzc~p+MKru_ zF4*~E-O=f@N=>7It;D{63MG^fCJ5hv@h=+ai<6o#pRR|aY^hr2d0S9#p5qy+_%~S! z{4g0=LA&TUZ=MbwY?ZLi?j{`p$i?E1k|$)-PX!BV$G3*SdK=W9DMI3>FE&1wU4pBn zUOoSiVMqL|Qgt`}N2LO))HMM93t7UF4P*d?Pu%BEDv$u*I2^0oi8~a*M*Ic)KBQ#tT7I~UedZsZjab5{q1k3kYd{0upCwp;@o}pC`b$%lH=>0Fj zopL`AD26@R`@Z0vDS;p3St9fMS6F@O=l2EFPZ{qEq8>jY5PtqoA~(;+vTm6b)5y;h z-(NmMm|rvt>2GTZ1U!3>psdB)TTo;^V1$$TKf}>;XOORzF>7HP7KAhA&EqKtW1;pI zx#qjSrkZ<^px;1{K?=}Va!rgO4il1 z)alCg415=egb0ubBl>vB^-rrb{QUD2>0$24pBgV8Hy9$g=xT`8`*7(X)|U;JHLP(TsDBrnKM0qmmxTS?D8C+1jH z^PZfF8aK z^suU;K{0=fXK|JMPj>b>Ld)J^KL$d{$nPLaNVS1ZeAV?j@h15n6K|>R2m>|HXNmz3 zUB=Ts`tg(ROA@&rEdn}WSo%-)R};WKsKmJI^*d%ot;?KVT3uV__NHinWttySNHEMl z8eSz8^OZ8sp8ByWX+od?(KN?3r>mOo4`LptVA~{CS{W*n4rp(H#1GpneXXO(RQS)t zJG74=`1Q1oEy?pCTUB+4e(=0=mt8uZ;>DkO%M{HoO^E)l&47y=UD1`}XDwp9$4$^| z9M<q5=(wHF%*L*qJKv0q5Whofu-k z$^|uoe$dmGS-4#zL+73S2k{jq;D7A-ZTlGB z$;NF{F#o}HVW==?4DX3sj8*dO|C3Z52PReTUWYk* zK4l~80gC}ayEpfZOKr63^YIS;!JX9tvpvVGx$kLUJQA%732@G0#s1%E4g~A~pLvmr zx{BeC@DL2vGaUx23!7ud%Rl@f>8$JwFB>-No_2?30hw>h$n~4QOf-YqzwLMvWI!om zi1=hb!FGN*fyJjo9R2JiJg71>T~FTErUq)w#LKf$rRs>gn6CS)UH7!%DDJ!{;EndQM5AKk7<&63n09>|BdFtS_?K~Af< zk5|7zs0#dTh;kFU`HQ~gx)Ay(Wtn1;=j@Ck*P&O1Dwt+@or{OPeA_^s4sx^$Nb5!& zwKHVngd4@J+8!l&uuOqT*g$&6riNN2d#+b=uYL|Yur{jVcALH(y(XqpmhoU>zqHux zz6+H|17sjQrzL_;SNTJx%Ejznurzx~sJ-#ySg%Df(>j!_zP9%pmF4d2-(_TOgP1pYA{91k>_>INPQi+;U1y+G*Zx`7>O#?ON=a>G+HIRSTUSYW2qyN|-YqX_%y@}n8X=b32(-BF{c<5)~+OPAo#KWSjil+r9*sacG{*lFAV8eUEGbsgknwvCCuFW( zai0CKe#`gJY@qITr@5^DjD&$Et`b1n2o=boY=xYBp#|99vYg(W=sR?u1D01n zPR8WG(^PT#G(wJ-08d{TZW-$f+2my#nqm$`nikrNUK5#JwY`|51}TM?`Chyq%BP|B zl}R#2x9J1CqgyT_o2HKJzJFF)LxD=GOP1J^UOM9}hGC4&{H^Q6sJ3Kl;fxqa%9J39 zN#-gME94)umK_b)2)#T1=N_)WnudxXA9{#S0u1SD*XQV7n}dnN>~Xgxl&KkN>ijBR_PnCDHV z3~nYPaFZ#IlFRpRHvkC`ndQY*e9sikE&Q3ubRAglSv2P2F4u)drBy2FIKx2rVCSg>Fk>3w!p^pJu91^D`|54600x0yf{m+t}+ z;$@GimHPs0S5ucfxUrT9NDMfq4^Zje@+D+hyI z%{8BK{&4Q?Wtp|K+Cm9)J-1B?;owNa*`l zFU6bO7<9TK60Rw}R9V7lLdF?bU)PL36-H^oyY_z}SvfiX<))aV{^zEs79s!lT*tns zD7&;Zm4OGu#K`jjbg1zE8<2Hzyp8oj$U1weE_!J&vP%+sF_WS_nr6BCBay!O*S{!D zd7?n&LLK=V=q2TR-9mz%rdapLa19A)5y@@Uc4V2yX;@KK>Vi zt9qqD{??xEaa!<}bc=Q!`_+ESc7lF14Fyqz!z|B>g!f-(cj}#e-Bph&v*dT2H~TMu zEPAL{yRom2w9%Vlz`e#Jg7nGcgAsz~?47`umF@JsZn&0+Dq9B6ctZd3Ur=2WyspVC z^KvBCy#;u+Iwa$itHN_xdH7x_GmNvGKm*$UlmR~Fu+I;6f0Ztl(zh7?_VvSqj}w8A z%%1`y9hWb3nZY&Ffld9i2|2=j^lT70L{@H}azAtMkpmqF3gU73QxR}-d#A1^F86z! zTApp?B6Ja+r1cxY(3={olP+;u23^UUZSGNle$(LGBc=aTfdF-5lG7__9xG=D`lLq# zvw-;M!aIvTez!>y%vjdn|i2Z zxL~Ox7d?GUQ!oMePY2?f5cY09K$4^Q-XSGs=;-Ob*b~WtHZg9#U}|l%h;Q?aC)ADV zysz$)S}3+e30=P3!63Q?8-xY@e5>vtKzQLM*^(%Uv|eR$sb{Sw7(8Zk9m8n7yl$TS z(#S{eB>zSVS%zvBWlGk0m1wnlzxhJ_dFN&h8It|3!9w1iF;yo?+Ryu99#bZ)dp__H zD1lpqIRF$u<(%IL!RdJhjs(r+;E5yQ934=A@r)eZyx<{DHCBHVf66agqde0nzMs$@ z1uWart9b+hmgH>?a@K^bZnWXtyOoIsP71E~?e7}CmrcT@S{`-it*9}O!MI(+&n&Y* zCpcV;Xu2Jhwz(ZGwuRb6f4d4EU+hkecJBjKx6^ZHdghmW+O1{=D0r1!M>)I0tz&V8 z<}Y=P@w1c%RY-~GL>dIZ-Fh^?)DY!LC9irc7TI+{uYS`qEqk25?`IC)5>nk+@B>N@ zGykLq6}TC{3z1%+^l%Kx?YzfL+X{j%N>mRI`4PB=Na|~G{Wd=J;RQr0!3ngA8D*Z| zoj4yGGXJ{v03zB#M%S0XiFjJyfTyv8r^t(<{v}6jK+m+gC)1Xvm>l%P45PUx=XmHt ze)sC_f{7Knx5*M}a|ho;IB?`n{hWB=x_fMO zQLJ_SaT-i!5j2>>4&h?RDWb+P1X-_&nAiGHrhe#=9`jd56>OF_Y5t^Y-`Hae+(@UL z{mi)PGaiC7bL93=qWCy9UWII7a(2F9qNup|sH&~4|1nBxgr+y{a?uTK&+C*^_O$!< zu(n{|l97Srm%|eomZ$q2nG`rpRS`%{@J=r%P5aP*{kj{Po!6<28b^3^bNrbagyn49 zMu~@uR&;)G9Z(t(b3dBkUPKhzZ>olSZb|Ccy?EVBd-fXcav+IqoNB(A}-L~7G%OJb9_UK{V-19 zIu%{OXK=4vfaHFvm7(W{x&r15qSapADzCL7jb*N;&GpIGBNl?&1r^N){T+}r@dov? zapr9%*a+J~ACj->8JI^b5%8-jR;zF8-%xu))3(YIS3~y3wo%iZnAX4L*tf2=z9YGa4U$fJG2WL>g>U>I` zAqw#ane81FK<~q)-FvVjjPiXH@BV1Q*cW!my>t>PI!nCObBUPZS6X_^_5=P6lC^twPYVgZflEL#m@0 zeq67`Si2o><4)paP5g0RuTniYO`f@s@tS( z$}#3-k)1 zC>(Hdf|kNB+%x;4U<8}?pu*&m0-my+0bOVJBu`h5o2<~_ehiJNW%;}z3c<20A*htj z71!H0(^|K=&L^W1FkAWN*EXyBn_jtf*V~qDF&+(TKn4XpSAbeg{)$M+z)0j0`_tim zTFORr^S2U%_#9}fkcGLRj79|Igyp&F22zpfY4{e%qC3-!y3W0!*(R^WFfA(Mdl8nY z5gMu;)IW~#pd#q2@j^^3WU6hJ#9l+-^Rk&m3rmW`wo0LeZ8}$VB_4=_yge=OEjOK; zx;lH5UZe01_qcdx|K&Y*GFJ`tNf{%p6S4Xdsf0)DN*eJ-kzqY$EA25N+BK8a`9^~( zwIP58;M{x4VYw+WEFZ^G)o;vM71~~XO%_5y>G|@O`Dzsx>q%{SdXTpqlUfq4an-J2 zLIqm7;f|iw#7m7qY;c=Zj~sKe)5n)2{whL>@8_+HPwW3Xh7aWi^CyJADWRR=4zek5 zLz3&h$+CjD!Xz9PuIB-qlC$<=AJO#9L0)^_yl%4(oABgMh8W+fv`6l|37q zIJ44rC2M32Fy#)V4e6u$?=8$V+tT}({UR+SKvW10x-ghs;w%`D8PfiY4p|yXCEq$= zE}VRM(1?uWDA37ss!g7prrlfh`(rz9DuK)7QpKo4_7Ki$fyjhRG>u7 zpHbr^$zobUM~1DJ7OqK}oyg!&#)p@q2#8hp^OpVw*uNC_Y(AC4d;Yuk<+*3G#liuP zWVvI#=*{4NoB2^te?f0PM^OeZZi^#zc|+4Nq_>{y^t178^E;XjiDQIjjji0zl0zap zm9+?90dW->FCed7qRFvO_K=$V31gp7WVxIXN2ab}Ap9vD3 zZ|_XR_G4pznGMuiJ6Pl!G~@=(Fcn0{$q^1WBXoY8IDIN?ik&9cY>b_@B`Gd2UHEmD zD?hVb)(T^$$9)Bac5zU!FnF=yK{u}Z>pU~Nu2MqTeHes+W)H{@l&ki>A!@r4Zy%F( z`WI3@OnII~gIjrdp4=W>l`UDA42IXzXG+We_cpIbgXI3{_oBKTW?v1@@4KgbUN)8y zYS7QR(ra?zO6DQ|q=(!s;VZhUvYa{BQm=WE9sEbsO=ppW_qh&JsV zSZ-X4EsY#ao0`i8b5P%iWut26tx@HX@ufq^x{ZsgGNI+n!GYzk@RnV+u-)TO?@-5luD&G}*}ZV^VsCTTkS))&jYD3V+F#iZ zEU6NE9E!JN$7%2!@4%NU?xX|i+i9PKcIm2JZW8Qz>f_88liaV^T-c<2oe$mxZ_#dz zYDv=9L}(Pa|2%ZGqUMS7TYlf^Oizb0RswTxN1XtXw9NDU(LNG)Mup$LSK1R^Ay-}LzEwLI=Ks1g>s#|p;yP_e2i8PP-QQ7zJ@2C0fUv5I`J)y zSrLYopzA+y8(&_)2qctKp=x1OM9vN)?^P(%-NCjqics(QnU@#oFd5sjdvzf_+d;Ys zfU0R&nzhixd$E!zJzGh*Av*PG$&OasSO{kqbJk~?5>Zc{z1Z!n%Wbk^eS z;8cYrh{DNCyedsM0El4@ix%f-!D~9{Kwzun8=MqOIE3SsuV=grU87k+r_}q(O`FWC zHz8!KS4LP_+IiVl5F^iP8!;t{`+UQ%N`I}{w~8v{M0laIUx0FDdIK|H^Mh`djB!4qQicxHjSZ2`kGad&- zG)pGQH_y1Oj>$uwG32hst*upLeB!EO%V2=3pWC|rsf+C8_Z}UAThzxzXj_W&Ck${N z814|cyIDAg5v*a0K6)*StrgZ(`EnJ^1BaX8j`i<_`r?DRMgg$?RC$^!_MsX{Ylfap zs&t3d8V}y}4{y$Xji;|UHvBx~Jn3CdW;twI;QMr{qr8VFS-j21j3|WFqk~5B)gg(@ zb*}5nzThXp!qP9gG=ya}(LM%I&~GuZ!N_wM%yNq$;<5z94=)H=>Ab4viO(yTs6*E- zr}HbIC4?%%Pk zFU)a#zOh~QKp=pAqhbQ`NUg^=(dLux!t~d5o1C}=el>EB;x9xA^3HnvY(=|`*zL66F$qMRmsM~)1_lFSruz|c()~wCJXaiA>B*aKxHi~YYyv~ zRy*wlO(PJd&xNHKb%iKoT&_0*O2eGw_ooXbsuoAR7BDJK7fce%)T2=8^#gGSp`pcS zqNDgLYRb-oC$=|7MW7n%kPB`$#)kKccgN&avns!hLoFwk44+h>dNikUMGXB$)!6m% zXf}fcY%Yj&m`BIPJKQAs%By~tC<+b$h<#Ag=(txJz?7AA1P7F^v7!@oa25&;755wU za7bFY#8z}igN3QtAr>o2lUkAIwg1lCl}+o-LT;(Hh=Uc#Cfr}>8XBT#%iA0~#@h*0 zDPQY{2He}ML+#6an9y?L6}nn+N%61J8ki{(v#IgE%#fj3I(8X=LO!6*Ot0-3J!%C~ zI|AT(SI-tM(~Sb8$>r=yEq>30pHy4Q5X#xW%>HQ|uR z3uMhk`l?$c&y2$i>72_it(qNYQ7W?TbXe?WYa_s zmPnaZC_Dks3vFf_&-fzq+xAtX-XJSn0L=WeT}iIuP>NSVp*KHhC$K;5sQs9w8Tv7F zvX6Q(V=9UxucyOKDH#;7yG7%FXiTLVpXL*=yQh%|i~e?jN)lC$Dj{o`zEnGwnoJq# z`g9o@Y|CAzNjLTL&C!Dn%i=qSO!4@Fb(JhwiK)~{1P99f4q6R2;+(prlSY(H*^O(% zC~c1Ik{>g)HoayfW?ESz3`4;b_QmR1(sGNuP)-G(_P9~DN_VuLrizg7D+!C=K8IGH zYPDq`c9Gg6;tDDdE*?y~x+vt-iv?k}ctExkZn6f-Qq=Q3EXd+kq22gv<&}Jjv7SDv8+rX=cOCQI1vx8h*id>j+w&t-vI_uAg$1T&STE zmS%)qH^a`}=g@rOT8#T%az0@?(Z;5zHnOZm1;@NINW(MzOWdjk?AbQ_Xn7tsHbWkX zW5R~_0LWo^Hn~0K%=%Io=BzClfrji$^vccA_ri$xuJ%IWe=!V)vLSX~9Ig{rwrr^T zH6DdSj=sGd@cV9PZq%!g?QRJQ90;ZO{OJCZbze08V#Wt}tZKMC8IczuSxR%(?7zKw z!(f(GrzW5ANlOC1=KGJc?lu0>{z8&j1#Cfytz9<6IdA_YuJl|XIty~wC3L+S*2wLr zv$g)T1ni#3ub@EP>59{;!Ty+&Gs5t$BS;s75Q~N7mpWev)SnVz{P%IdMhdddwNlL6*7qd?r5i#S!Xh3I!yKZ1jxk` zg5-vMUh1kon>p+X#<<=j!nvFJZqqi6a9PE+-Agyr>^X-q^q}NpJ^fvN(yD=Lg5(wl z>yIOWCwK$9@dt-ZhD|$EaUV~SPP3SIZfq<=tQO03k zJS>WT!eCt-*R=Drtwn`zaM?T7B5JL0z914Jaqw<_dC{5q?%rEc=dC;Tdr;P00X_ z$#I%6BF%7*fmt#xfB|yr0vC`Ned&6DBfe&S zi7H`J+J=rHWfOFC(3~&7X1tVr(Uk=E;a2C-Ct}tg-!+682CQWfDIUzCc*snIjOK#bfai{N?Kh9xXRzh;6Mnh&}Yf@UYtPStEVtlOG3WwZQ zDGB>xhH~_MKA1F@;k*o44WlP#@mKJ57Y-(ELsov`V|Hr!lC4GUt!Z$^dTQG@hWHZZ zLwjZxux%!|p-O(|eDc~9*H6lK(FCs+e=18n(JIX}nyo>qHy`-Ii5T@}$rSmfPneHw^SM6asS z5UGq$r*i*dJq3mEvQp6e$2aF&$Zw_u->~(8;JtzPljJkjrs6ZtkH-VZ$rRfnj>+(} zj%vj`_7DU)$OB-hY;7*R@iw%XKk}uS;JqeFAza-l#vZZG>Mx%`Bkyv7pb_hHAHLV5 z;`YKjq#wkSvEuy$Jyo9WDv zW7gd9WF$~O%daw-xbs%QOEo#>G?VIV1bfZjq zn6Y5MM4h+0Qx4Bh4lGaTMi-%H{D-Irgn8D`(1AWJcovkmubFCZ94b6HIo@C6*aq?m z0>%+x^6vS5^#YBcc0tP}`v!kSD?LzyRxJY}k{DOOA}X z%+2n%{rGp&MV~{-#X=G28Sh9z#Jv$R?76uNFBst-5MB6z=onPd)WHAfXnW^6`2Iwh z#Qa~v-|mqcnT^NAnv*7LvKXYPattatqNW2H0TUOE7O z*|U7$1u)P1pI`PH>onp<16S}P=H)0=afFLhBtk$-# zl+=jZa_b8htcaz>YW0Tjk$H$IzP1C*I`N5xR8(6D7ODm6d%lIqrH1(4I~6P3)37@( zlp_4}5O1Uom4zT5V+!)Sc^{Z8<_Lj-CUOXb18M4wI&EsyaXTb`3NDXlS@Xkj>*>d@q=Fg?B*>nw|*CVs!oC;2N-eCJ+k<$4w8L} zAu~N|zkPl-?9W<;rc`chZS1JGvWy!8IEzi#Vcr*gv}L6UiT6t45|qQy<=|Jh3{{?i zDnweBNWVMsi@IQMknUR!?&BY~2RPC$+C*!zQ-53OMmy|zpt;WcZC_v8%U)E7M8@S^ z$x?g%wxmUHpJt+EsJp=VA`rT?;2b$nf&?1(@#vPK&R!ST%;z=_kk(xiJh#BXu7_XZ za62L|{>|gKKjSW4f+S$pEKUfZx7Z% zOLRsE#|ZweQkd#a`X;HIu*0{jPHtvqJX!@UE@84wL9!Gd1PX-yE=}$HX$_qE+1oEs zNSZ(IzT}7-3(CK&2@*6hr5;i8Z?m^Z^FhnQxTSYdj!EILn8xEUO%c3BRE;{%aNUo_ zat4d=#$n2*L`gvrA5CO3ac3C0C)6xIn*3SGI3}}!--F&8DTmb!Leo&djd24$-}}DH z<$5Pv^g-maAaE5Up`D?+m>9JfYuZpGQd6&Q=T*N4ejCRrYIPz3WW;1ERG7|i82Pk`aTiXz7&3cfj=vL zWL`^PXb)Y*Hk36OE5)N*u8@`&@dbH|#KsCIq+pc#lNxNB)S^I6XS^WYuc@JHUzN7Q zA$Db&K#xXKf%xRKzTT$d9T3DRsap+Y(65(^xKtAiMz=2BU0a0Mw=POS6Hu+_sTL(w zKo!73jHFo_jvN?oHQj)6A zumN-sBtILs)oc$I1VXv~ac_iXo9qGqPfLVtLVWJ1IJ;@;IS&?f81I{?yYqX5Oujg! zN>o;7N~ejs>zhT@rN_ME4t6geF0~_deMMBEr2aE|N$0%)t;tL3c)!)2Cnu6q|Ib%z1h)aD`qv+!B`NbW= zY0vmtCN&5pR~uT!!(3$n6{5ai%}FGG!V8!FDVe`??kqKmBMxL#{Fx`8^tZ)>l^dq46>N0pThe4EOy5EJ(u+nfxnE{7D5TX2~Z74YcHM`ujJ*2Adm zVuXJbN<=DIALTzsLaFUVTk%S~izBISmB@kA5`>mk|FL|14pqeB9R@Yd(DUen`_TY-I!Q9FSz%LgA~No?%jTjB7JNZq zd&Gp(n2MAU$+bcIw*54Nm$4D!)WwC@ zo<4Hka$vBVcR=LD@Hlrc+ABC2meC2X+e($nVFeuR$dV^S=2kGQS9?$L7cJL>XM zY9$O3?IyY)(GYogZXrclo>|-&7AYb!r;zLV*;O3H` zAHD~LIyXo3eWa~-&I>!gjO$;S*KkngEQ) zUH9oSx@$Ak@kTp3%n(hw@6P!tRmbV_U6)N$|BgVJK&uf^g~%J@PZfQ8d*ZY^J@bnq z^rhdYRx_l7!z_O20+gtR_6iUW>ce)gn!6nvRK60;do6Lw^eQQg4w}GljXt^*#6-(c zrGUPQbl1d5VS_y8MyG9-Ps?s5m?1@>*ZDb3eyEYSQ1^W3o6WGIzU~0`*SOcjvHSJ2 z)IGBm@mxiHq734C51cOu(-!h^$!a!g!oI4ujR(^6^-b|LN(z*!=x3Dcl5O|Sg(F@9b#gyF$s0`~8Psde5|lOO zB;MV{`bVOu;0)dL$E4G7sxSfpFu`X>9J-hYz|zfhu2PmSmA87a4eqzmZ?t4lhk?3O zwa20(Ua00F$i&mKu_}~l^y3c}$0e9|ALY(D|si z)_AjW*rAP>3inPK9sCG)*+YWzmq-RGb^BF=&@WW0X`gA%WIwT!WqKCl1Z($#4l4a{ z9vZNrNZAw7rfuTp9+8Tk*w|aW#x?a{2`ovw@V$ZwNns+*ZPJ_Fpq!J@E??W^NHdKb^DM z{KLiX?3Pzq4R#jpZ!_|F;^A5;;j+{-jdsfHrmYSg(xvfcp%1!g*~XQi$HE9r_iTei z(l?KtQ#}<^74pfp_7N<3>9>P#AbEA-j(6TQVQ7cl2itBgU!JnEJD0;KXOKv2sq7CG z>J0;Z`~3&)vgPCI*I;wwUr#OOURw7^61PhDcrVzIvuE1-X$)*pvx4ta06uCfZ3(kzOIBAEK*Jm08E2lmGLN>T6f|`?2MB+WYmdq#- z#(ZhL^YRGp>GA2$%|3ejy#C07s2|Az`3HyfTEAChc4?EfG>*63k5@V`YOIg;)gN%p zNcqW@jmwts?u90}J=x4I0VQv@Tv$JV@614;Zqss{~RMk*#tdoGFA z-vBtm4Dr{0rH$|Jb~%{1F49tpBcywr;#W1VGI3Sj_u&Fir3OLbKlCE7^J|f;fluQF zUFWPkCP|Y!UrJFMKN~i2@R*?Fp|c=MDiDri{rO88H-<1EhExGMa8*cN&I z%w6F#f6l)--bIE+rL<%$5qRkM~~&$G}J0f zFscAl)y}pYXBTZV@EsF6u{Zu9M{QwXzI*`YJHmPBSfZ$*RnU6Ah{2Epbogt-e}dOd zCoPleC2+lVb1)qeu!`_180J}ifW9C|9os19Ylroi1t$P@<@d(3KbeY%1Wu2LoKBaQ zaN^=XJmIPt(qEX_$QS(5N2M(6Jiy}fUW5=0>JM4cgWFGN3c4sE7MJY4W3mQ;yP|HQ zPB747qo>F>d{r;?D_N4aM{97a3TxN8m4jRgp>|OWqazNAm7vK#7ObsFc4gnIg<*?~ zi8o+Qw;-oIf1PVU|GG(OY%KEz<`x7T$V&BhG_w3lC^emhS3>Y@YkB3H+J~=SHHLNl z503QA?NMoXze>tAjkD5kcNF6G6dU7*5QKa(WWZnYY0Wc>lukFVc2!h<;bQ8T>6W!M zFHGf8X`99^>6dBr$f`h$2g*6+=Ea|y>&B8ByD&HJ0hnjjC&45>Mo0Q!lyS3$z3NQX zA5oXA2!9UyNWwp!4>rw2@c;JaEiXdNiYlt zr0`wZD0a9f7~y`AQN(awpmeRePPkInnCp(NuQ>||uwPKw(5;#ky@7tJT0T9Kf_ROV zBkzf~kDlayaJ6v0wg9?(ku&}f#w+6ycIWZbV`Z*6jYb6*Yr`6h9ED7E9QzHDA&F`o zNj5nT0cvfvub3TKquVc%yQmtdyX-zi8EP&gsn}V&)RZydvz@7ALfCE{IcSOwU@S*C z&*JImL}+o?;T}zBZn}cou()c>klOV$Nh8VCDkBG4i#}OH60T_r7!U#Yu5_2uQeEdl zmykGrQEN104rMXjJ?Ae!iB`^E1yPBC_;?%+jfq5^Nso;DE`Lt!ZW3$fbx(zxU z*e!Lp^bWX&XUMc}o@WxJVUePMJyZqgmQ+Fql6)l}FL%V)vlX2U@L^$BFxaM#?c*&+D3WU>`GYIx*Fws(| z*A*=Vr@h8?`Jw9kqpvE{%W^+~yc|8kYAE&JfQROU|zz^$@k>ipFjqb<>_~ z_hw4{f27VdJ}!7LV7-Y&5Wkl6_29R)5KW!FYQMjKoT}ja3h^K-zE?p=;F!P{&v^KGNaDx zDe8#kaSv>Ky($z#6zAGRL8;^Ak!jJ=Bs_tg32jEyi zm{;&*1$!NH%XF$&80}5vCGU*ko$uV>^V0Q~o4Xd7rpS|d4>&Cu3bf0}QD-=^*z4gc!1c0D$ghpWQMeZF*IMjOtWclvvKuFX2S zyQjsnXrgO;svm8}pTXcVwSZK7qdtad@i$5AH4ugA zeLF2baoCV-Cz9ADKnkLi3W3&(nFaFY71alrEdL<1+Y|*K{x?TTWs;A0cobr4=2&tx z^Y;C^ufX5GmV1TzYGdI8QCf>7-1sSfwv@?=w$I7xyXWnR%4+3nfBr*>HLxz+RJDH) zhy=;puHD$ph~eXfAj!=}i2=l$EXW#I!5EY*h@jtJF}#OEbe#TF#BHQiH1Cr$$uG48 z+*~dS0PC9E)(tkJO6CZv4D+w` zAE>fmzJL_#K{W0=GatH48JlWrrwcekgR4_VpoIQ{7x0rKK!pMq;IPcz9ylP(SfnK} zT2Prh*Oe*Etwtujk+A(vkCAqXm|btCXO5%GjjZtv{TSTqweAQ{cAzrers0#C$*0V4 zT?>l<_b}GvAi^LbW|Ky6;K_god5_?T6KqfkFf<4_WnDk>7$~G9MpG;O9cbSm6WAm#VyF&Jr1AOy3 z$c-V-yfWqprnJ547y&>Ol$Gc@E!n#hK2WuQy6R)@l>(N#Dv1gQVIE)4D5IkLdH;2r z_$i^=G{wpSLg2xf?g+wydw#lMpsZ7`xDQUKXH!pGWi9?z_WMaR^dPh=pY$W%Cu_pM z72x02MQt$e)m+_en^7>S7d<6jiZ~GGf7pI3NeYo*O>K%7VS?Yh){O4PP&`I`$Q{>d zL5*G0iKtwHupVZF|p_voD?b~?x9AM50qhXdZ3qMF7l4$zk+ zqj`8IQ}cY@Tj#{})y#$mkE+h?504eK6zL-p@4HZH;K7&at_A!oNNOIhjDercXd0do z)4KVdGn9%AZ+oa{6E4#@bg%b)sc*B+{f(pMjTBsrR_fg;NWeHm^nGtMLwUEKc*#l7 z2QXJhOhEUwN^W+hf^`pPEbg~#nnyI=#Nl?z*J=!J&!0O`sx0`vcHT^iO&umk?+$$B zf^rVYKZ}1}xXk;Q0l(G7W4h)P|FwNA`}9&_WgdTG93eMh!Vsw(lQ@9O5)@~LzK8a%nwdJ-eA-A!_DQa@z3S9<8 z1IU2Wrt#U}@iuZ`SU=eJTGhj;pFvFu^N!Cv#=m>VH)`}gCLS+_qwMWJRiT!y5(HgD zCoXwww|A?rVO?oMb-A2=w9`%-1|F%1u=uZlWSzTcQEvTMUV`v2;*wP{Gc-uf)9Fv; z2$%`-C-PL~LryfVR=qCQ6(e2?G+y3Votf=}*0_|0UTo8Zlus7x0|`fNNlT2rY8#rO zX}_v$6dx4-TN4tw12v(}&2vqt-1brvI>;nF3jVK}Z~#Fh7uF-qmbUZpIEM}UGS^A# ztLL30=i}Ffx1xM1&vhY;fob}ECh|F5M#@N%cttx9;a9q=^$F$VDyO@;9p_t<;ZJ9m z?&(Es5a)-F=*Y8G~Hu`BBFuMMV?D>Jy8(0!Ns(m>rGWU+G)9f+zWBA!xba=*HhC3uV`>gvg>Cyz7#D)gdS6M0 z&8vR|l$W;cPpvAOD7<;#XB}SjzK;U4k+F#f$#8I+xeV=Oo1*;$*}v+CuF&(})3Mgj zJ+;c|jg&xl2R&`HUj;8Zp-&<9H_-;9P4GcCKMmCu$xmy8u;mMOZ$rDkKg#?!H0EgX1TU#m(#I@*b&C8ha1 z?x9UlkdHU;rK-RtoqzCk4MKtCs-Twjab%+}+1JM!ueCv#$jSp@&DFfF%G=Lsa^lnQ z4A7CK+v!+vd(Q{|1(`)hM2hq9>b8sfmG>3ZLn|K!7`hV0*S070t*7~0mJ;0BO|){p zdYy2QfOSFS$B9gxv9O;p1s4x=d_dgu9zq%alj6iJWe9J+uTAScE7l~F_kT*onBiV2 z)4k9d1^U;clRgI*v-K-~XR{8W!mZMHfCb3uCm${$M67Rh}X^%K@Cd`eJ z>tDzT90_<#w(cH@$;B9;sFRDNfH@C``w`)(QO)BF(%_`aU^H$HDVI*>&|^I z@(hmr*0BW%APRPbL(y?Het2T|V{tP3MtGG5j>UVYQ$^m-d(FNfGi(**w0!q>Yf;V~ z8JBCN3;Q<)>u8B6nd%dXOC|?z_3Nc)#A=DLqv6zsBC3t^om8B4x$tSo_nns7)(>2L zeNQ$QM=O?XLwd{W7+rF(%~3S4?M(y(eODIc7-rs7GaLh=dUfhBXr;U|)`dVN^iL?c z#O^rU5=$pb6y@+tbFIZTy}J0-Yg5wMzqC@^oO!dYGEj!|&Igu1haRjrlpA@>-zVzo zUKO4V_JV_B)2f&hwZgaA%yNE~^_95bE!!qkhII!jAl6@)LA9M-VKo$nK)Q{mS&FMb}BwIt(w^YJ847cSvT#HAx$5@Kr7 z@U?qPWC8lzL*7#yT*ay^$KzSfRbIzKbm&tZ4mV7<{q&cu;*?9w}vfB?^p}8EK^`>bc&I5k9R~ z{b~>n_F`SEKwK!_i`H$vVbzxP?8#G*6Ru~1~3=a48l>J!lMI7B{ogn^N{t&(MBeT0Wdens{HdaOf^ zvQ*Lj7qx6VPPoXM9lq-apjbE>MYx}n@~M~v2{lNKR^G}$XfLBoA?e0*iMLA)f=fHDP+Yt|W}-r-$<`$RYVb~K|kO}cBr}p>7-YC^!Wi5+_OoN|}9E0M0}q zhNSY8n#ISu!ZD;+n10HA zIa`{F3p3pP3vR038SBJk5ccP)yu7RyFi3xhik~77x-POh9P4Ft0HN^U;lhnI{z<;SZv)jAREyVwW~rYSC<)}PHEaDIMDuefhhv)UTq zFvX#^NeVj{!KV5SK96X?N^5|4Q%UWNNH%@;4c2;<0=|n~oCe%FzlkxtK}KmJ!dX?Q zDk)}0qyJlVAGlvcq$o_ecdgbM5yrEXBM~c^Ps1AJb`}d=#Qtt~ayBr(Q9B%0;C7O4@mqgY*b(VL*!`26a=gnD?IQ1Y40gYE zVkmPs)*{xmFvz8~Cy71HTT#myCW#$ab`aPEG&;h+7A(!hu&fQ3!R#xWh_Z@s@CWAW zL#E<2UTMY(mOjm}Uz;DRpFbYaRm*%5pF=7)fbD*+;v4C;ik%u9KIPXm$bq(G|CIc9 zp?>povBsWL;-~JmoV#Zc#Sy~JcJR0aQnlHN{?J(KSCz3i5{}&FX07-IJg=kQ8}&>2 z8_t(1Ub9ZdUXuZBo;DX2#|3gDaKsr=`!X0nS0(N9$y6X$-wR(3+4ZJ7poi(Y%i^bK z!MSsBWwK-RT3;+Sp)<_?JKyav0@mtjsDIY#y^%5wblK{A(G0us3&LE1U3N<=N|>PuyK;mdtNBrr ztIA(H?zL_9#4y(=^MVgnHm3R#Drz>K3;8IM>NVClZLpW+y1S!_E$hDMj$4D*;Ln4h zg7fsjmumdalolCWbE(?Rgj1KS^|7Fb-CQ*Z93^KiHL3z?ZAT+rqRGgGt-C^K@@2(7 zru$~-b5?tWfjjl~%ZlBJ7eLo)F&v<|cTpHeOf->g!SegCg|e7oqGktf^f2a^t*VHr zSDZ%>H8Cke1EB&elc9}*9PNffm^_V{WXCPKI6=NCAt3tXW+8MA`56sP2n>l|2oXt$ zo0tf%0TZb)ik>Lk%|PU<*0)c<9Tairr(x_hr*F=xI7tYyiJrEL34=Rdo$81jAkh{( z^n&}HqNY+qv?RpP6nI#QUjZMW4ztocYAguA(t^8&>;djg=F&i zG$b&UaHsyxWth(_)dQE6FSGbOqz;+~nUMlEs&>FJ6FaE5;0_NT7ILe2Tv~dbd%w zfG*`&3rbdAfRon!o#PH{=&gqO%$LUV6h#qF!)+=`hg5Xu(frZInyd28fsDP+l23+C zPMfgg0CWp~=qcbPgSs>Y9I$DaMMD6w)I?`x_IWn%%6_%50?2uWOqPfnGEJW3$BOuo z^a`lhM)g^Vlf|7KdhO6 zMqbBWabd)^ev-@dOQiM!?c4cAhY`%)(D@C6=CdGXf?0?XE3kvMM6?RDuL3TmECZh< zvfeq=uIum#q@RhFSPS4QVq*PyjoMvU!#d;&RdOyWHb!19h|Q=^Sj#!+Brx+lr5()> z!rwa(wpci-QbVIee@&QFRfhmNUNE^=2Z}9ZjTap2s*FhTbBbod1nS`5*SCDCSx%i# zk$rSsG76qIg%)s{@7UQGtfEF;or9E{6>K1bLz-~O@?6v0O;J@vI230l@)xiLwag;B z7(c2HR_9Bi;VKQoCQ+FdrLKG}>ZBJOU`fr(fnTrGCC7jCX>Uvjc2LRe@|s?dsBmQo zHVy=I7}7;Dca&WnB5hE`yWoqoVJPT|Uh+s&I#MK!s6>&0F-lN7m3!=H3{<> zL(aLh=-PPI#K+xyYsG@}E>sE!4TWUIEtDfJ>N6x> zGX)K=yFYgrk;0ia7l39?q^m)u4)->l3Wo)|P9X#^h1^3L=!T*%w4u6p)SporS%$6S{l;V|`8I|Fq1Lwv_4sTi`hwI2JPjyN4 z*+q`ZW@$1xPBPu_ffY9GN#1&bOiXmovVu0>@59mTAH-MA%K@2EL~NKX++x;C^`12^(IM=pj)7vtJK*~xh90~53P8p1^9X?CCK=5?$_>a{j(M`I=AuEmjEl7Z ziS464P>Y<8aBIlO{vQbl#h`!--Xc6nF)gPVr+*lV+MY4%Ju}HfZO@KX>esf+H#HF_ znFwK|M(}`mVgcs2MB}$ogR@oh$$jB3?8+{D^6XE(RuV#;oi^d}wSUjJr1*3)i zV}baPafYiP;=q2Kbvq;W29SKTDE*;`0XbSebK^ipQwl#Ibuoqq?Rt;@vd0GG`uF0! z_P7CEO9Ur{F>uIgN^o!>FZ=wTg0P4c6qtivq8h_CPsgD3P!EQvkdt{Vjr)_9Ec><9 zLD_Tb(UuXd{3>$9!X&r~*@Q$dc-Nd(7Pymite|3t(7{L}lbPx4t~xkEwl6X86EK$L zoqssK7qxK8c|#eOvyIJpyhp#QjUm# zxB({P?;NvdjYwYBdBb6~M{4jAk^FO-88Y!s_6vS1E2Cx)n|c_HljdVI;SVt=%&5kK zzkJs-^G6Q<57CrB)Efu*U+vKQt$Eb=1P&GosNcqcE37|pX8!&o6}VsU9$N%?iBzr2oeR864U*IyD+jTZho6s>NppYZ zUsH5X*OKXsYX!tL!i>dzR@}`t6$vS{uCmPA6`iIb#7p>)YIV7J)zwzvI5}LJY$D-PX7u8s`F zJCMk!T`!hqS~GMW<^2q%e={IISGBxQ$l)4_HfdNM$x`u+gIq)Y=&+b&)AIGrH`AEw$W49G=x26YeIqYbS zL|xqWHa6H>WoY3F*#sQ~`3y>(JxS30eFn7mw8!4`Jao&jsTSJEZq5iOTMWk~9zC7- zZA@8$C9Z+LEo%|d*iR#UeHSrz;BnIQcscl2;H_qB0P-=YMrgF-ZD(Fgn#~Czq7Myz0qLSOb_)lqv(UBc}vvArG0n9vSAgLY6BF7 z62tVRKEcmo$qv#={vVt66z;0v{5iO*12=V_rY5GUeU?;&5=?{>z~ndFMs+>>MDRaU_M3&kj(9u=gr(#mWA^6)g z?1iI!TJ%g6TaCi5_sXPzKmQ5p(FZxYMv`_RQKuuF7+SIvJenEPpr)^w6sq#` zEnoZHzf`!cxA0^8!QO{9hx;M1JvJGcDo!?V z>d&87f$e_zr~kSIMDm~A0!GNsZh=&(oM*QHOR}sobEcyb$LG<~4QeSI&Xhn`EzK6v zOi1Hy2^?ONfom(1;4a$F3kUpk(vxBOW3cBSt?%i^Bm>SJnriYjIr|&E<5A}64paja z+TK%2E5d-AQh-0tkx(f%O6S$;#G2?~P0ez5HC&F4Id@t=$fOpaR1EgGUrv;^s4uD0 z;TAGcB{~qmr_Q$kGy&(l;?A9cxMgcSznb{YP4z9M z_J7u)Nm76|3RCmv^>S??duF8P1@k1muj=WYX&yinKyXQei`9$u6|igq=|tn>uW*ka zwzr117Ab3lRZ$R@c2~6DG|a-@hG_D$$+}Y-Z^e?UPFCkGpI>c9bO}21cP0HAk>iEC zAK5pJ7%d?mjutz4p@F|CF}nF%ucVSE*pa($#+bW4u3>zJCr{as0aL#Pgy7bVSWtmT zB4m{|P__zKR*c`4I2~~smr!Af2G)-=HY+UANpoqmsD1t@=h0scX~Rg#Rd+nkjR9kd zv({!85Gt_!l%cDasBO@d@U!$odI?L?c<{_slA#BK3Z3O}BH5v*DvKuPeVq$K!9=L^ z8{wdOPCB*1Ih20ZFLF!DDMb6U(e`@?k0 zF|5owNlh(WZ>;XWF5JJZ#ZDozG=12>}EaoKCHdGChvu=R@v zpW!FZ6s;Ld&A>yo+{|Bg=Ar$O*n{i^?7en7lbOt8gQ;Y1!k_J#5&Dy+4CuYKP_&|O zv?F@r>R?GsnH&ApySbQ%S|gMV=ZIRs%P~!yn#$XbjdM%dg2<2zMAZ?BaxZ=@4g)Qu zA)<1Ea%Mfu2#-Wl0W*%wvD3%d1O3vqYUNPYz(j)-Dw>4;AX4ic>uEGxm-!KlsYt7_ z2$rx$`MOfQ{-yKUuCeMy11?+L)63@ecDJ*`t(l{GocQS}l^z)~T+Thl&zAeaMgtZ1+wRcT{XLKv=3q>ngx2KmMEH$zH8kGltR|*TcjhTv3V=!4VO|Q3zpmeym8Xbc0&TGH zq5&{TxlxyBigj4tU(Zr(;w!)KmCbON7kyz4a;L(S0)De)@-izo%45w*1(|f(XbPYt znO-hM+UYDh(H$g?bpMXrk|VruL9$a>&Q8##vcX&%NZdbt;yFfJ9xha-;K7~n;T?PU z2a>eHjlFY!OsF(u!TY|c7CjGwd4Hd6gR|@nPn8Z1h4QU80!w(IPFGfJ zgC9${H5E)Q^E>bHqcv?xYbE>J2(Ffjc@Imsf*qh$%~2yZe_<*)B`1*e^l6amONvNAIj3f~z$NyhO664pZXVOt=sh#~yPn*kG zPQ;?wXtL9;cwJSyY|y#Xcc82x^m+wwCAZc<&pQCr5wig*B18%SG7)f8@Qtb;>@4N& z8)|=K@Ue#*F~S~+h|nea-f~lTPOaJnXV20t-Cw***rTH)iJ0slz_?X`q3IkH~t z_stf43^C-l%aDcyp?L-S4W!bJRgHZLnv{|~Wq?TnuNO=V%VaLm#|dks%||$)>DpJBIcT zSC^jtlU2M8zcfx+GL0Rr?No7XT(!-u=NolkWjjS64oZG4hw_(1?LPb>sNVgu(7|6i z9f@jaCF=OxhlbuLkPIq&|1C$~l!TRi=VKDu4TnfLM053n;x^x47xF@f+4kpF;pn%%Ks zBpMFN49aVqW>1%no4%^iuVZ*T(@+1Hmo38Ck7Xp?CH@aO+;mn~#ZVDRAqY#HVD#Nz zlK=>d;VYi>ybFW9jG8VGD0M+;u;^c0w4VR8&|t5!-!JL)+w*IuOse1JUw3Ytr z#yImGdi8T0jx~cW(jUNr%CeVmPk*H8rcD!(&##_h!)T}wAP^@e0pj0C^mMIi} z832{Sxv&L*OUH(s_ZI2?;PW zfo6VsCGd|^W(%M#$h`*ddrpBz?HVxsGrtzBo+8W*sw&$qEX`HNaN~Bs`@8ny;Xv+9`YF^7#I{1l)t7OBumpXMe zt5gw~XobwWIIp_lm~Z4qCxQf^%?%O)M)5rK_qdR}ZMkXdTqciTGbbjueUkv*%vv+Q zYizsk_VW1jbfCg7YK4F7jcXtRcQttwz(q?uQuK_z{GV;#_B9OO;p7>g*Q1m|hr;ZS zd_C#;)h%EmcNf=}<6A;OzfH)17Ot64EvB$??b|t=tN)Q}o1S$urr5^2lzg zYD%eE%gUCqzinW>Oll&`g?luDWW|#Zx695OQlzv~?*`gyy z0-I#+peP`G36UpA-h?u_iX?4Q>{U>Hgd&^r=NtHRpcqcsAd3(l4;?+hoM&d~hx!6g zKxMA6Itu48em#?g0{I+!t|I=Tj|F71(iBno5r&<#W@|0nQ$@E;eJbWSN-aXV2>)om zQ{}5?#M6|{AZS?d4NMw%MOCIE!;Lk}>(c95u}@?h z;j+e#^ofhMF}CSAp=*8b+>q{;eOveHEJws`v|q|t^zx*fTcOG6jv`q)HUV_7jg-%D z=iQkkxpTV_RmQ4U_|UF-0bn^dx*EkOs@3Zbz$FhLNnXz!OD+EZVExA|@r*%bX*!0# zusmyLKb{t};DEQhw*7{E4AFuOdNlPRwtHyRe(~*7U?o!;`g0yS>W1I~r;{*7H}WAz zE`{mAErqHF<4nIZ=VKiRZYZuXWE>JH!Ze9bS^h5*Ym8PNT$%i5@htSScsBpP#ui&h z- znCN7dS3T+x2aN2)oFfCnwW$X0-zI9=s!foM8Z$8N*WvQq9P~jfs?{W88xIbQT8$n2 z^gtqi`d`X3b;(@|YD4m-7}o4sBvUfxbM&P*{q2kIk<6Of2CF~WfS{Qpv$|&M(-y4K z#@avBlJsXVES;#cgy0t7sw!`-S3s^Cxh&7i-1G$wpuBBnOUj&fV?+#Mc2$$r5cLb2 ztQR9x(j=7^gG>@SATVl?yq5fUHt#tRnQ&2(@q^Z0iCfe<^o#Z_f_K?Wwnf;--AE!O ze&pj^4~KFJMf=d#2FvF}&6(%Eu`9~=l$qp&zE!ed8s}vvRyyEIof^KHw5c$3T!oeg z#p)$$J=PP`ZK0)QUu%K3<45AGBvWDW&mqbN-cz|2blb<<#DNQ|*eH8W43afIT;3F# zhc_y2yDF8HAf>OUzrn~Z!Xz*azFC7jgwn44#*EvV!lw!OmLGx0ZI|dc80(~67D;On z^{2M#E#1~b^&BiUn5xc1?P5;)*St9P_KlgDhn@RV`<1el5+1*qj+r-_re``rg^flT zVYSjRf-nVWk^JVjGvCO^hq zF144JFENL5r}~d}cufA&D>)et*T=hlStQ#pwP~7}$jmuQFg~xk1(FN=+e$T_ zyeg8E&43gctP#_0vRq*rwDtmIa>qS|OI9%Bbd%$3V5Y#?I)fhBKKDKCm}9Wl>6lCG zHpxxlSew14!tnLDA{7^*o3tzzl0_Sm!Z(#yg#2P#lPVwJ zugH%;`*D840BqUk_v+^biQm_oVt0u|d}Cq8^q%i2j?Hi4EueMN14;g6eue+3m?@NM zL&oOvq)FtV#2;g+tvS?EJ5b*FtI?E-K92Wi9oqI!R~ba<-CtrU_?{^h$N!U3;kDdv zC1osk2a8K(ONU1MK#2Q5ui-xQb}x)Uq$0XT2*aGzH1%ZTYQ;u5Pga~u#^&eTt=EfV zauBO?KD21o1ylQ1B^QOSeK{!1{If9LlfBoxjbJ5kGRXe_qNq7w+2eY5Deu$iyI+6L z9mh|fGC|B3mGMVVgQwTNC!BkS?)^tngKYo5K^0{EAOBBK1^Z7xQ6q+fZ<;MVH@@K3 zI!{swjPM)O?QfYANzz`#@!TAIRtR(zBIP&^k*>fiy;|aN-ykx?i>8KS(xXP7PolTG z8)9B};-qk+HejdsH~c|AgnzpKiBdh^?qtZRP0Hgzx&(SjH|=6NT_Ei%N%Ow~cXh{y zPQO^%xzwq1Jb_&a=68p4P7PmreoTF9fiAwIO04(a9b{|HJQOLZzMUaGU%=kLL1P@b z%};QI=SrZeSBlenqn=#3!~zv@s?xanm2blmQ38Ot)8Sb_ce(~fcDOF{YEMac%vH&# z5__x2Xh~0hXZ$%j9ab`F9N}-1)EyE=SzP?d(WY8hI`ESrV-vc@f9VcIJ~+;e+o#dE zycgV7ijUMnXJwhxE~t>5=y5dDd$0qpK~&%9dr4X1MAj^rHdTC|5Ej zaU3p}%l@>pABwaKV)Fh_@O0H101SNc6{R{DKTIA}bk^ggQV$V@7S`h4)816c4An3) z&#-mtUVWrz!V1+Lx}rsicYj!QoGAFO&f&*cH;tTEU7x)?Yi5Pn$WWdxZO?r81lwv0 z?^JRU2B(mlN>pZs{k7YvCNuA7rnKbSG#FPl*2az9-@y1X?6b~9)uv*W)y*Fo)68wg zLA_&EZQf+jy|rg;hl_NVemG0Lahe$9l!%qJa&Yl(T!HPU?`uEa`MJ`9E!=v-GRWuE z-thA?m;J8J+k*G@$+X`p_rOZ|aEx?kRj{;GopMZFC;JOc!XUitmQZM7AGbe}KQdJS{=l z3@{nVYQwb06Do@4DHX0HcYd|Dkn2@dt8H82mX%aiOP@8Kn};!q)7pB6IxIoUwa!1| z>iQiIIE<5x86RNYUBC8gT27eKU4N+>B{4;*Aapi}lecwdE-u(_uC zb5NY%Je<+OI{MeMF)8Ufp_4Zxpx;<9*4ndzgZ!WvsRx%kJBsPWbGtF(3pg8BRX+vg!$*Xdsj$*sZEVv3*l&F}9s z3E^$8aeKaq8bnJ8X%N#R2GyUaax~I8_ zj$Yc?eO?WeXhzSlkkm+^sFTDF!VVen?b|Vy=AzMaU8n5Z3GdsvJ)6+csR-=2bItKS zuOsB7W>9fv&z|d}kTT14X|R(nqgy9rEl#m%R=7M1Y(=fnxvW_UiRpE4O`_?gB2&Zc z>^kY(SpE)bxq@ift0cLg2nedqE&|=_WUoq@14^! z0d!nMX(;3Cp_jALYIbXEV(84jjBGj6p}x@#nTz2VeN6bIRR7(Fc=n5_glyYu zW25-4=h_^CV{g~v#xq$`kssHWf{Q6LN<;FbRjsR3+2WyZPVs3eXRGNL*^GzJ` z3~4Eh8Z&VwUV)~r=xeb8JXcHm!z}p};*w)*Nr`Kn-;an7y)w64s%?3-&~LcOOGCS^ z?10CF1$nitF{EN!O-wuOnsYfHn6uYhynZ=Tc5{p>wv~BI_HKz^mN99(F<&~+t4sCa z=fa9)|}+Lc;Z02!R>rs_gB-Wvl1&ES%kTmo5Y%R5)-&6mcVIe6EIyAXb^5Z!Ejf=nbyAQ|B9()jZm)mwk9Vj{-8A8C+YL6C%kfbu#8K`LU5 zsu;*!sAj_m95ILDz_yU*^JOL7nD(%^6-#*zV4kHy5N=Gb3WxY_#d$6?o3M6XfD@ zXv;A$IeW7mNS$i49SjZD(WNN)$C1Vo<$lH>T1zBoYT%NkEcfl`VLJD$um3)(06ovq0lX&eCSJ7W7u>ry~XXe5;d@1O%+TvD+;9n#M6$7v`O#c6zkt( z%baLZMwavhX5POqps1;`jkj<4nk4h?<=6V|vsXi+_pgH!ByxLu!ZFUH(A1e0FV%Na z&So2Gh&1~HtZ{VQ9@-8exu54#mAAAOt!#eWJ3LCRB#oC~MZLvz<9=SdVDY)TrYv*W zKqvU-#y!=sau#Te^HcxM;g`f(M9$h>$_`P7zRs_)bS_6mM7<_18SJ`6-8-gQMk_o0 z=@?Shy3yR^Rawf3=IT%2DVg^-4uyRy{5%Vxo#B*A+CQLAbEL03-i%7W4rB(!Zn~&_ zZcyHb*WTj^hKx+#GRBOvB#p0;X$>+6yAXTFBd24|;b|}?=OC5x zCGl5wOcON=cAt_#6DV>v#nrV-GU13y#lE5`hNBd_`A2@bpWID5iz8!LEB;3OAHkS z_zqzVQ3ER?lpe0Bb$Rmi4glPQEr%xVWe2YY4GjSa0q}tk4E_Qg-A*8sNBTZ`m?10E z>xm5iUGEypuAA1;Ng{v3juyPoyp$k_7zly}LP7)lGLB(*2nPAaUT2t|1F|x)rcnxe ze7pn&vWO;8_TjGV8yK=|`P1{qh2`8UgB07z1Ny7fVxr;}-4W3s;e7)Hg^9BZAHfR} zeIn*;z^q??Nz$$9i%4(AYa+Zn%^R%{?aug?d%th-^Q?kZa<8`Oa@8a5ZFol|W*V%9 zpd|&Dc^DO`4|*5;2DB|CSNbNTmVHMqKy6AZR8S0&7z6?Wp`jrm0lwponB{sm-3$*L zHIc-lex6`o?xif|*F| zccqwa3?Tejsr^lY)FZ%qA3{NtEVxPgs=#VDW!YBBI? zoQh|G?eCfW=?DFj$oo@SvDJ$nT4sPK#6I%+n0_RZkIYp#8c1}oSWsWnk2>o0ctTSa zI|M}IlxUg1OVLe$w@Cl%ockWawW-d~$f#MfVvsR$O#juvXWZIe%ZQK|nxa0&JE?Ei z;|%2v?g{Dz@S650tkDh((8y9FjUxVTfc&RyK7xW-mmi2Zv2t9wQg2KTn$$ooqHGGZ zLcqX}0AUCcACMrB*kQoZ;JOB7%SUU7KgH*NN*i=MlXeRiEm%%YOld>>-@B3i%CcB$ za8=&p*)9?AJ&S`hniM=)Ne+ny2=x&a%&~VuU>_7#2fneOKvWF%GyPK^ARROo5AW^d zqcahH(XLzIewJDfN}&Wc@*Q~PK`-z(c4i^3pXiQXnUn*v^36$PaeD&X55(^pJ8(58 zzHw{W3_spy(+`+a%2W=9&NLUr2HP(r&z>V>%ar%A!|Om*02cm?v1Q5fAF_Mh>Df(5 zV^UDn+l;J*NM1FAEqW(?DUlUo-%fdA9r(ZUu8)Z?P3=FrJ!=7NEhwm(1t2JV&;;SL zpcNpg(q(;=Sxa5vg_E@;-^(ovz0V?4Kq-Qog*tS_;$1z2AqilwM++zuyI22HJ!lXl z@crtuGCM*D?bMv`>@R2w{*P2bT?+U@63Rhn#D5nV8pLxM@p9eb2ZEoKf;7a77W}uM zJnQV$qr0>6LJJ{C78Ee>un3SazJ7v2S;PvHxDUQ~Jw$y_^=RIC11vaaaCcBofENhw z@frB5%%#xbJX3p)LUTJ|5$v=gO=X#9M{&-;L^EFCbif_yh@wQKI&& z$h=ahEjfhyy`$4tT9Y^XC!~`}AjUKqEoIzF$Rj_!z_ebGOp%9I)M1GwI{q zC9siM`xT~z5pI5jRd8WM@bH$)ENfGM?6vUcdiYahSeGE>xS*e%Gb9` z&T98EZ$nZj%`8DJBd0DcYUnw5tkJ zG3U#q`5F`MxV3<%toT<0zRbMs#m8gocsJT06Rt1L0tgE&V>!=MBw;wY_4q6)%B1kR zzc!pX1)9RzsXETZ&J&XpVTa1jX1HY0JKpF#4>&n zgkKC~p9RinzYG(((iEd!*X)HpN&XDIkfxhZeCb*r*M3Q}+u|j|b3?4w=eQg=T0zQ9 zgVRImIqwzA?DOAo_q;Q7GS;3pBR$*haAyn)s%CYmws{Wuf;t&B5YWoVWRj!smC9I2 zv;(O;_PGN&1S)u+%PLhf`SfRY9d;>?n7Fl)mgeMZty85L?HaU{bCT?gNor!$9d^EY zzn98hICngR{j_OH;5t5XQXmjody|_cVNu3rY!ZKIvUI6X9M7TE;#@DezJMfcj`-Os zcdYy>E1kfbW~`og-aK>$UhnQuKlR7woocBcv`4mIGQ@Y$z#kV~n5H4mhHhwI)4k*-#iStl0#T zB7+QgsBL5SJjW5sv4DCQojc>8axbx#`*rn|1IdH5tVdTK9BY3MYboMP0C-rM!QQ8E zIqm4M&@@>gUEoHapje{*R5l5y^0O->d^3qx;2~5zRY1DaiWTdZltT47W~snWMHJ_) z6<1lbmF4m02FkDv{*F!fFxM>MC;Gr;bGWNjU<>X*X5lIyM&7(c6lbSDjZl2nFnX>O z1AGyh3VaE)svpfn5Y4U3cY76n0w0v_;Ei7NZIL19JCFyEADYMyMH^eY>XCt6ZEF2H z`BdZse&OW?AzWHCp3K%kXDo{)8jSlcvqhQ`DgaRmCO-o&pQco>I7>x=h6*$80g0;q zu%wB6g(FI~)*Rva)UPt`)n(%2m_pIM6oX)PmV&~*pYVqT*^sxve!@c8S(E8hv%e4a zI#Hx0C6nvMwIs`Bjeb<6J(JN6LCJaIW9qpHXeLE(B)=581N^9FBezDR?@!wuzcGxyEmd5N zj;I4)0j=%_zQaV+rZ1cwlpqtSCepGeu>nE>4z@PH)G4r!6 z^1}Qn)9=D<^MC}PK!6a4z8Of-g~$y-Xky6UH%0S&+^WbwU&~Qvy|ZIWn@@T!_5v@F zrVph6D1w+phf)z^hrskf5QNEsRET~)AXJDzt2;lIM^>QPqWfJHZ^}aj|o zd)OmlktbMbm$#0huhw^hZ_1hJ&{E*)6Nc?Fb_bC()SK0K5k)Nw0=JtF=}A#>=%yhJ z3EHMAWUA>&>_N@ywRp<5J*w#`6&s?(Q(`Km8$VOT!(^v$<;5O;7?Hi#84+|N_5>WT z&mc*l`zD=A#<^dasV#?aC6Js&Lo$Hi}Ryq8qU!#;tgyqt+ z#G|+ENAi#!f*w*rs%%1b|LyApzxBH3SYpgrO%#Rysw$L&x~bv(MNN|bEgTq#johaa zmz$CLe5ERL`{6xj<=5DQ6n?WpCr*BQ8$C3?+bB;1M17_9@x&{G5oEKW zcKD;88f|}iDvqE8hg)%6w!bY~-cYb*n?~2FxS#L6E#Et2%U2qd5|~ki$%bNb=L|V^ zUGbnmpplruAfR={T#Vx>gBQZ*v~8qenRlMr=##-A9LbI`3AGQnf^dU)?~@Vs>HHG~ zm6F@@Ai@ICx1_M+nNk7vxl|DJtT5!3!@82_zpBXZ$6mlHziie7#{P`h)#f8sGvEQj z(}!P>C<`S`fZq0nj^)>t9&)Z5GtgI{ypK2=^$rTGMgC~$EY>Rs_CA5v2%Idni%3J* zKLYu0G2#eC?;I%SUhAO42qeKMiYLxP1^@v85PzxR{U-vUF;oz#pO&Ox0^>9njN-n*g6C=f;=(iUXl@P?b;Aj1Iz5Jo=CU5ockx!-&Q z1xVS7>A?S+(Tx#a}g5zR2|W5J6V!F_EL zYdcO$_j^2tno+=|dAiPxv#ln6vkY2jUGxTvEp8K%4lIK^PogRX-jb@{vW>UOSVajL z2-R>0u*%^NZrS3hPFT^eC72U)D9I~f%xZ10D%rcKlV~S67^X$ z#&{Au{jcnAILUlOf&@2vjA`;_2ac-}SLlWTTA`xDq+-B-Wxm<|8y;9h5*~0LWDKqG zTirt<{%(f$5@+{U2Vv0X5CuXIEhwHezBUnep=`jNL4k#SS`67IFtm)+-*2Usg2wy8 zVn4h=`S_E2xabpq3m&)Mk<9cx-H8V$k%@Tj=@ASCG-^F+90n%ZA6*WJgOGyAuhnF> z9C&|)(g$B3$@}D?=mpyas2l5Nhf*0*hiw&+0$=PA&_OJuLW{nJtU zj4xuwEv3Oy0SyGp^N2+hZZR>S|5n~+`*0Sp-Y=mpS!!F6@qf$V-@-es5Pe_Zh=K?j zqCVP#%>?h~%)1Lsr!_}<>1hWYt4J!jryq`&o9jsP{0>C=dusV381@siV`?4O z3nO!^5hb`eh~5|!=USZK!w+TWfiej%%Z?uDa@Gr8mMrHsuN!oCBdJtMSa|kX^>^n(n4yf$Li?hwxq9iaQ`u0_(NW}+!59^ zpKz!5X8npG;hp#8$cA&fAdH-nd35o6Pu$(Tg+XNF^L-+GsX zcc4vTzQ`s`r+pf7X3NE|8v-aTtzJ>u&AY{E=0?N^B}LSHx#d%_$d5=Ee~DicOfIMX zoPANSvL=IqH*C=SQH43D__5GLi$?SAMqk^p>jqLN)&|5=% zZSLl6f>z#*d00KDO5cU9qr%F=+OQ1sV7d7Nl=W|9aJE%5?F7elheisNxmuTp+~(Lu zHLTzXF@Ulm)~f?le{x?T87?HfcBrvjjjypF3o&jKk_0TdJ4=kJ2`;ThBK+eo`PKV{ z6p`#qREH%gjAx}fXYk{diQS^(U68&LoIi4_#w+k>!x@B{&7rLGhq_o1%- zz9eSW+P}1U-`a%=9*~!K0+7xH%8iLX{~s;Y_KP`&m)D0YdD_jv9su;eUAMi?qXqfi zL}kd6IoY#u{QAGf57YzqEAm;py0yxjlrRw5f&!lT&KKtkZM_{28IZPB>k!PX4Vk+D#HYuFm8 zaZx;wocn?T@}CRSz7_V^p$QQ*Qhkgk#+MKN|JV_GDv3i3rnPp-fY8p-G?qKbuL(n8 z?uT%fua^~)ayd29stmO= zLp#{w@SLrcX)Ol2-40w@cJjhENH%SmxIIU4?B-I1+V6jtbEc_jUr~#x|HUx;+`SYc z$8+d$7CdD7oS-|8`H0{GHs2k}N?S@&s<6kF$XHrWO&Y`K7+tx!i7Gl$ZTT42=IPS8 zv$fG@rh2f-y;2-=nAEo!$Wm~`Nkuh>%T>Sp?rlnXz`YGmGyPh)^1SO`W6cRX)-X8J zN`tXoG;jVMY~gWhf=f~KpR*%A*EPoz)}heCch5tzDoDljM;mEov&z-Xe0N~gqIia5CW>L@2sYwT znyX0{x4Yk9$1X+|+}HZ9YjxSc{m??TTb0&X>aZ&XsfW<=K`2C_UqBq6m?mPb9?v#) zTBz$kQZ96ltp0L$Sr)k4RL$jeASrT(FIjA~B8A5ELl6qg%J`ObLR3rH$nW&56g0Of zB9Y7%#Ug)Tu?iyxliYCgIj4bT^{L4=Zi>U3kTvFtEz{Fg!A?9G9Ybs zB^_#FW@oe|lol(Dnu7XXGzG-)3l|n6$=&0X_n_M}-mxXIq*jivm76ELzr;@<&t&lB z8F2@|2S5u$lK4)jL6(kFvd@&&KoFXn-i_>WCHDVqi5y>u8>Ys6a3;*XchaQOQYR&ZRAU^CGt0Z`wSXLfpZgJ(>#!Om9&i{c`93}(eLRs^!d`No7rrpLUJ=$bcaW#N_d>)(cb$(ih{G#1 z6E&`YA6&E?yPn0!9XZZgktnYFnJ^bmc*S0TGvOK59bvwSVU(EM!zC*%{vhIpElfi) znxd#Z`B;$a44Tj_j4KNZua6lUk=j~W9UW}mZb@~RzUR7GU4&ckKkB}w9JqeG>^|M_ z-y4Thk~k9zmj0X+V*y2M#n(m--5Y_W_Fh`}jyX&`3u+Ruzp=6pffzTD{w6Q}m=25T z6bgu;?Fi2Z`_5hCe)Ea^L6)Z@kV_v2MjO619c%Szv>qZ+8-c>> z8-cCpBXq^RLKkR#01!UFfxiQiu1Ub1pGl`%9YP-v2a<9T>+loV6XRFO0GVOIRAx~9 z1oHc@SB<}}Bn$EeLZbV?cR_#j+iUkyV23KGk|An+T1VCJ#rh&U(Y`MoTh`^OPOC>h zwR`8}RLuje{$(%OCi#+Z-#unL*YD@*U2h*s(2%Xuc8 z@sktrO)WU>1|kycGn`)=ftGTi zpL{#h8=tth`!dIMur>F0Ymzzj_DpehrXLJJ-_&E?4E*gD_Hq7?TZm?GtS#^b3H|?e z3)RYOptjiVxb6n>@j-F6n#x;hu4#ScA7r(|P2_`wsgHmHXJXiiM#|r8gKofAKf$JL zQ}btI*cq-0gbCDm;wNH?y4$bmXUp?bZCN$sI9J8)Y z%yipo%W3Kfr-j$^+F3aqP_eE8)mPY)*BJGWQ&O-d%39)7p=KQo)`E(HSw?tC4pVO* z1y0nYC?X2My|jcGTQWzVBHT_yp47JJG#vnstUh0g*F}oKY&>GJBAE+S4cPnB*Zzxa zfyvO=No_*0RRaZr<_Lo1^vNZ7!jQRavJFn=s2`zTTwsvdGU+n8dc(t(pUaz>c%?{b z+zlOkOqAA%zGn$Oc*V8#a>7n%e^Si;%UHYMn33;_cR;qbEQ_wRJh3#cpw%iR;b_OGqBwYS|}%(q&{T{tFEDc4)g*E@5sO5Ep1VZQ5i9Cm}? zr;#T2B1p3z-5E`z`cbbQAzgRCOB|XvsH=Y?N&uT-_j>*0Guh!EvN)FMw1@T{b-BVm zl&yL*JSYQ55EIg+J3lPwLRT;j3D*)QBp{bP)&O{hrz*CeBbdA*ni3iPUG_rOf4@ZeNwl->x&{ng_h z$I)_d=D1Hb=Upi%RxZeYlWHLo+h(S+m;Brv3<-5SV&}ik4drU^e1%`QO<&lyLwm)A z>qIhppFFY2v;KS$DX{kPQ1g5J$#Ho*mw2yrS9{)!Cb6S)hSTZs)UT3mZ*Nr^&`v&n z_Y{@bJCSoMOPv$g_qcj|F$U-KZ-#!X_F_O;aX2(QJ<03SbcB&G3}Rq+lQ4i1p+ZNB z#TIC^+Y#u0Q$i+h?6?b>K1mXT{}h|qd^UWUpfCMdz?5!6QiU&M81=&k^a2tZP&_MI zJW61b`~I-~Y&`S`o%kH4DYpYm%a@B5Vdu&C1FpBSM!=C;tc1EMdx5rxiw;Qxk^)-e z4+ff{YFg~q1u7~Hfwoe`5tW7%>Dfr1$c<$lwLk)-DpeAk@0_Ff@8D_Hdnj$iKhrt zsq1<=Bsi>+aC%!jt`{O0aF;?uQzPcg4&%~66|a$ARPYN|594($MpG!aiEWR0XZ=)n zo7SyYr9Ih`D2!V~zg@$Q!|RLJ+X_$Tp&{D-Ro*2uSgD0vK}k(7U$|dWdQ{73_&gHk ziD9yv*+;$27Eim`Ru^*Tss6STdwhv73Jmq2uSH_QY`O93BHj<@k#ZA6D5tJfw-z|p zJ@*c~U7wU}uzataZKZ!SeZYmX1~mF;chPSo+}KJ-oX}7&#_$#uHOKWR8kj(6nB$k> zh(OT#V0IyVgsJ*6U!}yYpR2I@Mjg1*nrGdXG&W#@Me(vFCfXoz4V_UeU}W@wdpFJE zp_o@uGSY>;fp`XU2kF6$>aiK0=o(jTI>b0Vsl1s;c4ssIbTfZDsetH>hRb`-TOh;XQ8GBXvr~1aZe#7M71qzrL}lS@_64 z6%#F-vb=M;dt2VD^kg8J{)DfYv5~gej4_K9`6hRzLOMS{t-$5x=;`X~`n>4m);ZgE zX*^?;;>F%Q9i$YKu#eVBDt*?}qFYFF%l^UJ_k}M%y_y&(@e}NgFe&FPx-n?^<<#mo zXNaHTkSc?lN%r?H6&1FLHqxx2F z*E^}%Pn^esWhW5hi6xd0tR~g%DJ#7F$ip}8G3vDXJ+VP+Xq7ZEq3xJ*V<*SPm8L2> zRS3r5r>>r?j6zsau!Ys^w1p%~{(DR5_LsYk#~+d24r_VVCH3%>8i_k&Rq7GNoUe)z z4fFJS99ujeUn}Hv=Cp>7g>=j84!^LUKC*p3?&8>)i%avPgC0bKB-L|P*_kJ2|6>z$ez0Kc^Hh5Mj z5j=`Q!=$=}`UU5g)RBn^ck+XOC_v_(G){}g0`h~*&v(fr0&<#4!mSC2O6qd7imRcw zM@DjOBdJG&Q9RCEdvhc(_WlE?LvMmA`kFI3FOH5jt)@K2=goHtYLC91Flv7r$6i|~ zb82iYAG4o{CW}J2B_^L4W>I!SA*Ao*!X&qMRR`85>&h4kEaRM%9i7*hLd~%D1ib@s zoIO0Jel10|R?DOoPcFj!k(TPXsiSiABBr%#bDY1e$>^SWLUg{*(lT5+yqj>FSN*`e z`|PU9i!jeMB4S=5WTzO=KyseVWkt<+tz8EzRVK6i(C^K2nj;HyrWl1L!MRGpC4+gUY6`gkOAeR@X0rqDp}^KXkB0~ zoCy`;D9bQsJYx7O&-YLdFt7&Nr6hd23cg|pP=N`4fpS}SxO%hId=wX>8eOec+Oxy<_6c7SmnPW80)TsEtj+G%%9|{t_BB`UHKU zOGtqF6tvKRelWGXy3+oc6Lk4g>OEO{`#1}kxRWk6Ysj~K1+@MSp=W#xgpb?rak9qS1Q6`ycmJ}fw zBbrg96!YkZ4_6>JT1{w$idNAx!jK2^;f#}MY+v_;|uquTIn zFI2Qs)}Z@JgwXcd{dldL+cwcU>UY}>22po>Y%Rzz%{HEcT#2YvowuL6J=l-N~yLuRJ$@qk-OQ+}r_ZsezEiNEX7okxPno!QC}Ygq4!^8H@&NqPJ~8NB`L=P9y% zhZ+GG-G$p@1jE4yrqt+vscy<~b@0KYFjHw=yc)}l2AY2C4w5zguCgo_*|$=* z+ye8_1>u$>wO$Wdzs=i;)!LhDM z{E5ov6Y|9Y{;{#$>7YCTs3 zJAhw3iYrQB#Xs2J0E>>@m&&7h@NcD*2J%^{rm4z}MMwr>(0{#@{=hICZFaKPNmtc! zekhUb4d2p3pLidkO5DGiN35l&ik|1;)d)-72~cth#8^m#CWd)KA}B>6F$DLeUq;>< zPm>0lVu=E)e&^}8DaY=QCLOnxDs3PaTbJiHmi|*xIF4@d(AXvRhebhBHs(m2*ZEJ=V|Sn1aO^xAH@uKVRe z%I+{zRazl%~8z+-RT1>O+CE4I_drb%!2Dp9Y^?m1rFCjiY%d~ zJ$vi;-I%k0rM~*0PM@53XH2femayrGTv;D#=}Mw8%9rIK!k2j(mhpx5H;lX7TPFC) zml9OMWnOW}r^~+ziC*`wp3bWpjoZyn=a^_}Wn=Hw?H8WkbkW#XNsVZHU?J_I`G{GC zpaD}hO{kXq?HMvpW;^e-_;}4}09kDA?PuG^CfdU_i*RSb5;Ea1I0fduJt6wVVwF&c#uyn>T!J&f1fC>Zj`xuU= z7^-{-+YC$QEkvqs6&&ri;$UE+WD7W0~Z6C!jceMCH9TSf;kgkbi;5ge@r&gHuY z9;)dkmzeY zxZdQL&Ud|B>#GYfayjqR0(Wg2>X2303PU+XLNrYcfG`R)3RD0Uc-JuSBQ@17=xF;G03W85C2OXUI#>MkwFVgFR>>h% zyBIgH&k*lmo??*2&4NyZW%IbHeTuR5KpoROE}M9cfe?&7*jjE{Zq&3iBz- zk}cB`E+h0k+FEc-N?nhTK7cNWj}S}}Hjh_V4Ju3Sdl9OSHW(IFFPrLgc=gEIRI1;H zQLF$B5ZXTU6Oh{bdW%Yq{h?X~JGv!YCeDKiK@u>uqUB_m-PPT=d5}tgVjmUITFfcY zv~zrl?lzlVakHLaH-f?uME@%5-!B_Np{ko3(E#;|0qUz_%>fdfY{e6C<>w>YeqsXx zTbL$D9Y6)~mQ%HhNOkIqF)2Olsy#NI0-aP(gs+EH?$c(#f?Q zE0POiP(gAYJ+vbIXEGeIXiV%sZ@kaPs0ME#COPyI4t_*?7IW>i*m|WKQevRlKda{Uj3Sg~HxR9Hab+MnF(6Za-bUA6L5I zl^|I@mZQFIRiZM~)DowLr4`Bo@3;l-TK(d)O!yc&NAiVf^L%)Xef!)FpzUZr=c3DT z!KM4i2~uXEPr}z!8lyJr99r)P{($P1gsMOn&8~YRR|H6dkb|HE!_Y&ny`kk=%}dj* zp9KesVwYi67~6^Y@*S^wq8G8QAl(4%K6+7{)(2XOw}=9m7X$2dP(|5%bV${-U&Oi>cccie_6S@1=fJ`c%(Z zh2#&eH2S`I8l&dvWu>Fz_<~fEiYxPq?IVXTtwB6;e8VU2jN$^dSjoy0M6G70TKBTY zbu4r9*>(GNk5Sp~~=rXIYl8mM1`$rMZ>lv(P3 zv#ttN_})o(-T$(#f-hG_ZxKml578K){;xBHTBW;hI|arX_l9ZB@)5ZzEk-WT}b;@ zk3g%4O(^;WwP3(dG<++N&dZD^Uyp>QL&4`=6?;r(ET5oec;n1QEbX=1Se-ISGLqF;0iVGE{&xw*my=SS@ss>Z8tV&aMrWK>z zT;rrEHtqh!S!`nsUchwd(=h z`LL{?BO-BsTJgaYv{y02F?nF*(pgaOS7QL-t((*+^pZV#As6-fS7UG~Ig=*OdQZWE z80B0`K`UdFcA6A#We1;uwZ}PfC8c0-CH18?LMC&JKOCcPHsC6!N{QLyb>=ZBTJJ{~ zEoO3hQ=0W8i*rW0I&Bgwi5xD;^!ptMba-}@I0V)=jJ@FehFDq!O!+;3 zl8<*u&@X*6Y}3hDdt%{AU_8uR7%hy|n^%nSFpRA|8bQ{V2oib;lwWwWw@P&w@h{^R zs(f3+1QXWl00`2h{P?^{{Mgfw58KY4oNZ!>ytL|YQM{A`AWFN1#(qnfe%7Zy5PMwy z8Paho{~^cC~Nj79TL@k4KGNwra2=sp>}4y_WzwqnVh1Z+UZwsOdxK>QVHXhCgS zdvBPj623@@=`VgOKO%c0HS*l|$atVGjsGVv1fpgR@ZOb3dku=7Kx^?huIRh{hIHD#D!rFuo@*)0{ z4|0%u$qYJxBatZ2Bl=7Y&H_O_0G@wGgUpT~5q_)FRZ%7TP_8VFm?%;#JHfxn5NI?W z3IT;@+?l=H(&*e~xr9@mKSURp1hL#956sF2$8!?TaQ;Mde&ZkqNDCt=_L$TGNcCvG z7-s*)A|T&dOogA+e-fj;h;>{w*mJCPJBMQy`P@e&n+FMwK>UNt3=w9PK>cD*lH3v~~fAYe50fG){*72i%+F7L(=l;Rj+{kUijt(fwUN2r!ap zcJw4ksfeCBz((q;6)Gfb`EN1;;6FYAH4A#h>4O00b?PuSi2lp#l;iJLtcckpd^-Y1 zN+9b|1LzbrP@w)n5hrnZ{8Gq>MWO3se44roT>eE7-=_PFPvY0tp{6sn6H?0c=g4*N zsGEXb9Yp%xy7GjRFcil#6;L0#Lj1)c;(R>zSWy%gB>p;?heaCoPBbS2?%z~Z#y7z- zix@EqS#=uKR_&6tVNwKx&`Fk26)4AFYe-nl|DPZhkPf_{efXNE4wGX0nSWCjM-PfU zc&%};tMC_v$W0PR2!HGH9JNawvv0sxN@UM+Q(Kwvc@2NUKfj4Iz(v~UK6%!I?AM@>Of{vb>c#tiPn5+PerFE!2AzXX6Fo|L zO7dUO$m554J9NPJOf|G9m4D$}NI?2gLZ#aj9I9ZsC=prJkGKEAXl8p)&6S>0(v*s; zh#zf0uQOt>N-D&s;3c{K&i9NDKF?4+c~Eiryl`N@TA_IXPZ2Cix+lOh^_zI$dCu=L zZPFW*l6#8Xd24qfg|7cvmqF(qG2e_%Yg<(h%W)Dmzpp-1=^SxL14u+sjq034#O$TW zvrFGTo$SJ?S7Y~cu2H?PTuu`wV|w8gns33Ak{0e(`1*S(@q;Qn#aVOfTbseqq^;h7 zW`iwRdN`g%zyZDYP9&f2>_6V6=siWk9+mfo%^tn?IM;bPDsp?^B4euSwxe~>?;Vz5 zH>F56CHXWu7J?Z~#T))d?eO|zgS|^CYyh&kOw%Kz@;ik35aD+pevV99^gnPAzahxU zt)kD@&4y-m6KG%udzWqTg}#kntB;2is7xNCk=myEcNXKIDzZH}hmSja5Ks6(&Zd*Q zEtj(2(!u-G;1qy2{iMBYLrPFn9r2_KTmNDfq9#DL`gBTra%Ft|y=KBeKpw95GjMo} z$B)H{)T)_on@I<=O8lIq#UVV&+W6f`ip(ioqNRlvU+tliS_JPxpew#B;V|8)Xok(& z>1z{jtr`DktzXESE*I!ZH5S2@&;r%iOUWigEArKFlRY4x9u6uH{J zRn823J~t(Z`Y)!_a)f8}9pSly&Yh5^ep=Jz8)~Yt_t;uo!{h+R@`@D7GWE6+8MG=* zY8%zzLn4jGW967^}ts&VMl-S@xkNx3u|@WIpNo(F{$ zEM6LFZ@r4FT}M<*QT#|c%N}RMl^Wup=vqn zhT!h*PH=a3C%9X1cXxMp|2Ij_x%b`rs$R{adNr`SsuzpyvF03O4p{*3y82ZYhsTBS z<+$nV@~`q?!`NKpqDOU<`k%)wN61mR2MzPMQ7Pzg^C<87Y31^QkLqXnud`fqd6S}q zhUz0jg^PsS{wdGzNC+r^MU{%aHN@;60kyE3DZHa0PLj1t$GvdQ5ou?+dfdR+3Wi?_ z1_$rFQ$WZ(UcwiPXmAc{;T7SjkD8o?JZmHD|l{44)nDjKkg`Z~@a~cfe;%7ecGgn1~HSY8a3aJ=4G% z_|NkNkSTogFux2IQJLkhVtb+U8ghS0eooYr95Je?p10|_oa4!%Fdop1rv=lUZYsjt zQ)*V9{Qktbw*#CYSxERxGm)*+iu3z}MS=q~`@+-UG(Af+byT#CK(2*@O+lKIep@GH z49BhuBSUX-6R9IEsiS%7GE^2rBS(9t-8j=erX6gP1t)o$B8-^helmEtn9W_F1w;&} z8EUSpIcn|4|~1e<%jQY+`Vt%nK9xRZK0jzEVjR3f4viV zVWj?`oOcy8P6w2ojcQj)7G5`5ZL~+O;H1QF@$)<2Nv-&}-{xQeNCFne`Ee7W7se6m zu@?9JRzAOTVfSO7d8eGMGImE)3%rl;-=qeIMUamV$bQRBcmE?d?F7h8*`W9Y%(sap zVJG9f-lfU^;2%so6oTJOSmNT7|C0&(MW6!#Aa?%qZj`c1ItKJLNWh4E@|!wQC4KU- z0%)G273bCA|J6KS0W{BOE&$21@IFH*`fs)K9}&i=14|N7VDjCRC!f(fBc6Qv3Fu#h zgCYDCfNN_a z1Az7!PdqzG{7~a7LnP)-*AxhQBw~lXxzzT^C2FJdnX&*0xgu`&G*(b;W<=Z*p#pls3l%^zQkf{fxT6C})!)PnlI)EC6$4i*1V zp&u^`oUOfMpR#iSM6_wK`zTCRQs95kkF8kvAJ#TnwW@LW@%_*+g>S}j%nEr<_PazM z^1medVQm#?vA?0uB+UOnpMYh7pid?wH|Sw5HUE)c;Qp0gEJE_1%9qCcM^Q5jnr}*i zA0U#YgoGfJ`!DwVAN|Fsj2!6yM}Gl8Bk;pK)ae@?zM!?F*Et6djTM z;jiKu0DLm8Y@Vk>II$6V$^>!Ez5ghlf79^Sf-(#y1#AVMYodKhyHTC~gY?M30H5Q7YYZHHrz5D5&s`#IcLpDo^# zqCX`QQ0P8w1VS?435ll02s$*$Pi*QhK9!m~Ms2~53foP}?)maaFo#rqX4kB&phO#% z;Y)2QE-5aupGf7(P6PCeDY3Z}aDl&{?R#AhRIU|UcyorO;P8s25XIO3&Al!?k*n(? zj#N$svl-aWx#|E={;_OySw)h@o0t;RMyiR>T<+|Jh>)( z(Wn^xMdu2c7WZU;>Nm=7m{mQ#V0%6^+4oZQ6`=tb>=X#30HGWjz}x0qr;l1@jG9hP z;}06cQ$>vwUa93?u7!|MCwebhF~O<$O_R@D6-t>}q}r0f0{$ z`S6{lLy=9&NoDM8&=ccq=@_covu4S!nV3w9 zn#3Z-9OsSIPTpY(Mg^rQS$_+=22j8?)(_5M;jMcrbj^F2XmVG3Vq1(5!1dox=6 zAW$mP+TA%61!!VaK|hbeD$503-rd=Wv4I=1SaRk4bUz~VmE)xVWS$4B&%xT&dMTJMGcD+R)5g@_S8fZ8E8L2CM~*$)}u=Ix7`?HYT$VtjMI zLSQ$A4E!_Qs%E=v6cDCf{(SFCsB>C@sGb(=lMhs6A zMQOQppx z^MB3CS#qd?EKeDq*qwsDK`eHK#HmHn(*FH7hQ?WmuGBoCDab{yha2y2#b5oS2Z^L5QhQP zWi2-~w_Km`)?Q-8*ZVvx9a${t=sdz(9VNx^88ovbnV_(9u|nZ#&^llgpEnAPyb|JN zOtwl?L=B-pF`+P~+EBYAAW^6%-7&B*{pD0f8&F3Dt0Uz{lN2exxl@Mc)Ylym|FEu3 zSbdzEaA@4=i(1MyN6$@1WrU1{sl5?KLrZY5KVCbiR+_$h;%j}RehijDQI}>wegFrTpw+5uOVZJoVQ9tZy;JPR-6x@L<-`4~cY#O&8VYe@O~||PyDE*wLGFH`&%H0<8|zTCe`q4t zZc_KvxaJ}{uxg;>?g~;3<`-9nEtUGXfWf+9-W-p@uFzblT95_pwgt0ttJA$S&+Ej& z!<<0{1^q9jg|eO(1WEDSqda&geN%5;WZzYUA(!Vp!JCU4=7 zz{qD=XtIm$je6`*^PR{aPU){O(-9eJQZdMvGSok>Jh# zxL6F+S61a@$XQ(J9_(yqPJnN*Z!PJ@&gbJ+x^#k$123{tYDf}I?SB3877%;7!A8Ly zjL3>uiT56<`3V26`534QCfE%6*(ej~<%F-!9og@yVbS2lV>&s3>hI>) z_%qi{>?*m8OJT&IZ}bljRMnkA?^z2#XrpC2b4lU8ahFN?Zu1TPlV-K`oOt3S?B)wd<$ePVG>F6~WwZ%D~H zc(d2DbbUlG`kW5PXPvzY9eCP%jF1Ya^=O5kaV#jM-;c50>$4s;J_sa~j5@YIZ$;F% zw;dCAl{8$*V{7FB9Cnt&af+l|TZWozu6DmiYxQvnt@N)eG)6!kEU$=0G)fm8{L2@2 z2Jpq7)e@`!^rSqcuRhD9{;GgVROVmBt16|f>VOdco8nDA^jSF`eb7cwzcLn*{A29S zb)1lztg6N;-KzAgN+h5oC0)ik5=V9m{V0lm3$GR&5#7@nV~*7uKqr~fwrvz=22C|mx&uy1Fxch))`qAFzKxI_u-tlv5uSCo~?J)}aAP9v{BvX{LkwlNrfGmF{V-k6 z%!s}7HsxtS51&2V^|+Uu-?mg2)Eysn!RyBwh z;abkIwoQ@rM-tNGL_s&?yuwq**VlB7uR4S zkx`OKp7^$5Mirzo^9&=;56z?_^u1<(Ea)3<|*RM>8>wa zC(FIaSx<#0mU5guR}g&gh4;xDKmY9GiCNuA4E0LVr4V_o!ZcWLBDoUdb|2J7{bJMD zNWYmFD0PJh=$D(y!ttRL{^Kb%mtM;Nxe8$f8nfbP!I@9?$v0GFd(2~!d=S!6s3cFPIw7I#k#g16ZozpdJ)y79z2L@3}U=o@m;x#soo3P_N z(r@j2A;Q%ZR(2LKwQ!JP*Scn4esrF(LY0su^~%Tmf*z<5FMJ243O()^3V zmWxieG{N&d$@B$ipl=~7<~yLLTy%h~fyQuAbK|_gJ3zhx{{(vDJ9z~)l-QPkfnfR! z{2eZx>yr^M1V|!~1Q4myE}UO+)hLE?9Lu-+t&0t8u$wBN&5!9^AJI!Xe}7s9h+2li z69(;;m0G4kw*$Xwy|K%S&JChVUaL+lN@@0t{6dDk>FLxO5IGBa0DLV)XME zV%V!oot?_FM7h^$5zaRWB!%w-v&*va6^ zd`bgRQDU9!x?t6JbtK{s*qvh3uY(~5Bm!jb>d5J8o83{P?-c4!liGB1(rg*!@L9F; z(8aKGdO~5d+TsT!TCCBjl0$fgtb^;1q{0ffahY_XAm#PZe=$ zR@v9y0Ld*1!Dl&2nnrylMS`pKaJO6eP^E6#xpXWc$Ra;_EV&#rc9*{MWqYxKbp7wK z5w?N$EC;z)*2jSiHaS2?-ZzFZSUp{<`G#WI-QU8YHoE6CX!Ermhh6+DF$M3To+@o&7SO>6Xgt4~6zi6aZ{Ap60 z^umq%g<_Q7!C476M{S~H-Jz>tTMDLM_FA%-Ho=d)Dxr;ra@*_^tET39G-$xlYSE9V zR7%k!*g2=undV@3y-0U}y_y>ifL(gD!CJ|Kef>vU-qz~<_O_GUdoCxG1YnpF!@lIA z4S$tI+6#_OJFP*<~*Ie$KE** zq*GP&p_UgYq4J0G1?!=1s+c|woT7?)quX*NH8NIbpl(ml z5TzsbE@-H(oUM#56&9kOlU(&1Ms^$)q zwb~*2m68Fyd+*aTpFV~M&IR4b(ej~;@PVy+ zV{5}_Wf!eK;P)!aCq+UmhCl_?M%j{85slv?<9jYm^CXa=+HsAAwH+FC295=dPfpKb z{r)7UU@6K63jUzl_mFN7kFnGax^rTHb59ElvVIyBia-zi9d}<2W5gPYo7p4KMJFI! zf<%f*2r2%=BX51pFlCoi4ZNLOoJTS9csf5?p_yAI(=6fmpU75qs5e*`6j*M~K-`2w z*u?G|=7F?+52LshMmBG%C~0-c60;j`2G$eqOHv?Y*d&oYL>A)jxab`3XZjog7Z%5o;$So6_x3arvcyi5gG@uE*x1kd z%-E>rE~8}OaCf8BUSH$Llh)f9y%(RJ{Bz~#j#QibISFpJdQtl80X-D=MET{n9fmVl zqcez!MVw}pD^_*CX}0f?QA#%X7}~Aw2^?!LiD1??STNCJG5F?pWQ`dC#*6UC@|7p_ z?42i4?f1g%P!x4=v$wmn6E3k@^6NO-?B?i>%M^}{_i=aEQ5QR25DORG8{}}))si76 z`b*^8>lI5h+@ra8;be9p!@8TBUo4-~m$W!Pri?XBSmnivG=&_wy!|?Eu;Dm@oPmph z(?sja=`JLPa!0oLe z-W?dLVWziY#%T-=^4YyPTx%~(NzQF|6|8PEZvxMI_1pDoT+(g>#~@=}SLbfGy!-KJ z0T|$8b4SiISy)TN+~eJkylk`}b8uZ9Q?qPwva5YAj$>GNhSalMV?rW|V7(w~a6*~v zevjh;vK?D>+c+ozKOD$TA5QJYLndXVr1&DU;@WI)^yA);%?Y&J!)gsYGsJ_*{A+z? z3#{ww!yYEl=(W8bzP++BWH=u+t|Jq$Qbbc}VO`my#;f=yj-_rYz-MDd87Mh#m^idu zDj~*-v1?QD=N1n>tPpWzTxYSS!tZrG+@)5$4>Am!U&JoNc=n)&ow+umV4sS4pRqRs z@5f4YGF){-t3s&=P!?}kytO~m#C__uC2J^4c}iDRihl~Wrel$!dvZGUWM{n7AHsw^ z^?h1@2SBg8+qhlI>P#L1p2VIR(i%crPSZkUQ3{DU}33N(l(?0R+jRh$0t3J zqgT=fyUOs7?0uvL(jQErM;V4$u*M$`AqnifgH++8oB>OVXdx4U9A#riRCXK*GD zM<=A@TN$7kUA$)o-D<&M_T6g3^V9bW?t&mGMJ9_&yvPuER%v@%x_Q)6GZgdfC7hxz zhwohQt>dKOn+_aONJn4fyMr9M?X!_U6u$~qCPdAt4UAXy`)7rPf9{T`&yAXl#oA1` zGwJN{0OQ!ZQ~I{ZUDsQi!`kr5YIDNxfP1LtoBI@9gCXd8aVmL~aJH)5B2ffa=j@l1 zm=@4l2rw_(!LHM?v9O&7K0CXFqjJn&#zpvaBOrlQ#`Z}`#y(bDHKv<5W|Yz#lZb(~ zA8y%t3yg1gdS#hX^EOQ*&L@#!&@`_0K#{nTTqSN^y23Ywourqbl8lOh4+)U*G!}u; zy~k$|IhG*q#YrP4i;Ekz66a7*PD!+3Tw`%vM4IYVp|nWbTx}v^4W%6$e6;AZo!5Ij z>~Rn50g&x77O{J0%simIFUG-}gQv8z$`qKTwQ!h2fqer7Fvz zpS-NJ-&mzX?WlU_%@plbveWs!K3c9^$y-?@F&EJD2wl3&Tn*T_YnSY44moQ%kj|#8 zyR=MP`KJayw%SXt5W#UR_hLg>wB^+lw1Zpu@=E=*55rxB(ws2l@S8L(<_OP`wPdB> zVA~t1uDbA7Za+QA+FeEVS(uc!)au>1FHVzluikgSoLqo=G**#WNS+jWmXUFjX>CL^ zZxO5@Q?@g;SjjniRM5dJV<*MAX=?4H2IG2Sd#Ro~3rtX;)_8t#9DO_Mkye%5|E|^e z*w+)X@iXH&zQ*%dl9p*^F1PXiDPpbt?V-Su_OUf$pr?fRG4XY4b0=XV==4y0A)3bH z;?g8`l{g__YKspyI|02}<#a%Q7IkQ)r}^inaF>uUi;6-T_}u~x67#MT=B3xIg3ppj zehIn(Xk;Y6KK>fg`6cczzGGb>M#uKV%ra;5&~uKUHcC+=fe3JVSA)^*#jnAyNp&+q z5oYTW^}A z!R2y8%B$?W*y`5CL=u%T>Gjr=bo@oUVFM}dF~K^9kIJzcnxzX(Dk|VE;xixLQ?e;cAxRt5<5S5n8 zd4G0y1A2hA0lWlX<^7VIW@=xI8FVyLl-{gOBn&a=052opP(qW|Wx9kURlSpOd4OX# zbr!WEOXd$EQ|OHxEs<>xjSS+?OCSS@%&wAxuv8)$6laG_wSs1QNu@3;(y1Eba=f9cv$F`AdPp3qD^_)Z>JP0M9u5A0Jt1 zfk_|1*_b+44w)}F(sGofeF+V;H@_EqS$JljqA5w*l?}3OL3y}qmvR&NeOiRfIe_o(uZgYIP+Qt_Frg4ZQK7gI3 z9qK=3n!xVik{O@PJRjF|umSgUp%{U?&v!>yJ#VM66OA|5&ux<1Q^S9YNc|zC^ZQS9 zYKJx)>jUy~-ON{}%P7nNd|y(Ee{5*?v0b-JF2}y=5iw2jNV(oayn1`C;{gtASZ~v7 zh_{HMqLRpwI!N+N{Jei{KKE7;mCT6%El2?dt(|QD*t3Fxq|tcqs|FQJ=((|p2F~z9 zF7Sr=MSk%@zz2f_e)l-Ft6SiWTP%o>$P`}uY6}DD`#yK?Q<%<6G=8P^Y)>+0BI-At zDIDFeA~6H`&$OrM*p9n@RHVWOxVp;mO6AD@yM)+PauC)^WP=j6V~iz8Zs^TQ_)fkg80!_WF!4<6SOY9gDpefCmRVqS;~w}P);7=@k91seG8LaH7{ zedL)Lgb?Ken5OoAbMA-uln8Tn~iw`+99`=QH~g#X_Eg}7ynNLYOs%;{6ELp z)C&)Lw&aPy0MmGl2l?+by3}|HiUM2b>xqlKjw4TmiO%dw9HFx8RM(>E_X)+W!aO0b zY=)>7Xv*?EU~#cuk8VW;)Z_^hjxgw%gBtTb$9xVA_;*9LEI1`%brGz=9vLk<+$ak z0G&q=orDQRvQart^{-*h|svl#k_wh_Ehr*eU)p=jNWIhoPCxZC_5%5C3+bL&#K87gK zb?8&xS~IwBl)XI+jC#2^%vkeOX7Q*(X&ziRyw|r8A}hNuA6Gr6?T~)owGrMhAIlCO z-MGfk;k`;gT=hAziv^0F|8R(dpaK`S~V5{@}ZPMJ%%PB6?b&lY9%>qaZPnDrMC?MdyKF!9O|t&D=6xIR$$3h}e|dF8NpC zmQ>?VPesdEzIZ$KIX*`^D|U}Jk%OaziiDRO)>@XKuz(KU^Ge?AvVWy zh+XqbPKC;r7*6fBg*Pk5y1mlH8W$G9t^>7xDKZ_;l|*0XgXTvQhowJw)yLVaDeOtY$zb0+fh z+EkX%W8=NHH4oG)9MVbRX`A7cj7r7^acH!62kp!mO>sn2ocaq~^$y5aQhRh)K}N{# zl~vzw)Z0{7dK>Nx9ehZ7aLG!)Efw_5FFnL)5be!8MYKrmQGq~i?WFP~uYzG=vDq_J zXM0$#sNU@hNY^v;f#9GR#-oK<2!^O&Bw@Fs?2p4T*#+`YVSRII{pe&Z+vKb};g^_J zvZBs*iliBAkx!6zl$j9#uK1He^A|k0Kg3MF>qPIzYZsfF+LFTiMYp*ElWC(khJ(Vn z6IcVp{e`iEj8+exmR$ag&9ipfS5G>R!Nad;SCn%+v|2EMFWdFGFS?dCqVOi-$svG_ zd@oNKo{ziPYfp(9En?Xb2Y}!5NUBBC8jLr)2uV=R0ZitXR9v`Cgx2o)9vf*|@Yccq zLeFi#(esRX*T_41#)=|^@)=_A4Y`Bs1n=D0_7#8F_RfGF@&Jn?LsrNK_8CO<4X&2J zFT^jzCM`@oG)u?YBYOGJxs&QUM3dYVj;YbY9|ri~wJCMJUD%E}EfGXqJQ;@aIFiF~ z!)7B>5LFOW!5Y%;30#yurv$_nSk{hcV7zqW?a$Slk(yZvO`)tFB6+l=rvB-)5P`bT zb20osXDc-FbH9JEmr*3%nILNF91l;WX#S%~LQcU%E}ND`O0A&rGW1p4s)$2&Zi%|F zQ7_vfeyZ6RxZ&&Pw<}Y6ykUqd>Cguyr{AMaH~Mzt;k9`wkHRm6d?Xo5#^qx>M0QK! z++pf~s)VRza6u#cyaIg2r+%a=KWb@-`1BlL48Vv$y#LZouhCHJsqzOaI3k}Q!bNV7 zi0q^&0-_+;`)Q>$+Xs|zsmlDr0iy_TS>k4pY_I(yJ_RG#Ai#(m9~yAb4y;zq!##b& zm0lVG*)n0oKt&B_SdkVa6eF%6&Sa#%#fE z9_@N<=cKFU=+2nI2l?KLO)JdoRq0^1_9rZ**!oWB4vRC;A3m~kktbH5(LzLfEW$q8 z#oV=r#oX4YpP$~a;&JXN#Pd2NIIf|!K+oWahXz>w<@@^a zC*&#m9##u5WY8X71{oOSDeRuqLxsXr(GAoO-zQJMB{seG{LW zCu{^)??C+tZU(GA+H{du%2_jR0|ifJDq_Trsq6u+oZO3|kI?{9?nSi@-C#4TAxqNu zJ*{yITE1XXSy0wfu2L)VV3M^JogfQsAKb-TD--P+k*h7DKSe)1bV28!r$q$pF}C;)cjo{=IUrRmZCkRX_MS8OY2(;rxt7a0Lu5O9d4w)I!7 zMF^fFn?kYk8%FgWj?cI5{Tw2wVf7&u*sue`%3yW#*9wl|b&++xS_gh(p0yVu^Z*SI z3=n7sKu&Gp>}KuMK*4C*}?qsd={f^DK?^d+i)c zmN{j5!aLj(7$nszk=^vP5~nL#oFPDqCRu*{Z>J+>S66Fw%O(k~Jm!EN)Przx=oB_* zQj<_z;n&S-&@}r)XFR)9;NU36rVzNW1$gW^&3*B;sG7auY-D*vRupv(tP9EC@tP(A zJMj$Jitd8Yv8^qdjHgH`82gmQmk zL-eCsL_PYLr)zBze;KF2Dl7|5+Qs_Y1ZVnOONUU9x5N5v|M92KNqegkjZ7LvC(!fl zYQAk-0g9$yViMb+UVY!zdG61Q^%@3R8JG1A^wsjTnNJui@EF|Xcfx)`yAOm-1z#po zVySs6Wuh4Ev^+)YKRgg7Bw1(;E*e@DYfU4DtT>lahFBCV-69c8<~XLZM}wNiYSVq2-3wO;b;$gJQ}-tyz) zj4Aiu7REPg%1T%YQ8S*AT9O~OSI#zXPR8bxEz3RMWD2B>I7SCgxCg$%=rp1Pka%A+ zQ*|$;bztQ9^arH<_C^oEJwG~UUM9zu0&cpwC4pakx!fFSKGSYro8Z7P*FP2{o6I*i z?@lttdh~W&3~rPvB;Ry!3)Cm*^P`+p!a7|HXiQA+6Y2eW5iUcMpd` zV(XrQmGG0f&63-KVMxnxRCQy%)!G;yo`@V>kga)}g{5`i`PzB|O0Z_77C0=UzJ&va zu5UwCfTNZ{-ji2}yb@ll$gD&2f*Y*meuzyr4BGw4ip1DP$iB%*_pGt(L+*kv2I~&d zoKkwjLSyS=17B_y{Wf1v4R_Qij=`*PZ-|kwRjP);T+FL9V?#KPR-LQw!p8#sS|OE_ zvW9!UvX`Hj95#6j1-2)H#x!_-b(Tr?gHDTJagsRkNE-UV+Y7jAT#5R(=`Ul+e35| zeGXxN$8tN*{ScNn7xA4tacHibnl))*&y?IQ7W*2mHYt2xGFs4qIHPY%TeOlvU0-NQ zL6$9Ni4L&xmetG+S4-;;R`ie3nF9voZkB|T3-Ib!E*>!3bfc(NN>HNQ?)~@nM61t(0ft~|#0>O`lL5OI& zTyoMcX9yimYVv2-m8A7tLC9OtjQV{_$M#|dGSMe4DKPq)~1wHCtxnN{4 z%F6tP9nRhM6ieKdZ~&{AO%^ou9($h(CLrFXw`#u65^}&VI0yL!`R#pa$!*%`ShaQ7 z-Vu5$_}a(v1Mqg_Xrg!;*tWEOq)bvsuDJW~av{A6EysA>r_Ea7zwRLK`P^HN_Hr@k zk^;Nw9{qB076ZKU>7u7Z&#Mj$655A7qYlijpT`-`C?d+kNSv2gkhoi<9W$R7Wf@@e z{SrQ5a87jzl->fB8ch!@0raT@OuE^VFAnBNiQayDMu}HoMvkIJa53*|Tk=EziG#zEW;NO5%fKZ(lQOP-8GU}uh&Ahj2;rcbgJD2Vz zGNlmphGx)JEx2kYYF_jO9*9Gf6-tN-595ilkJ(OE4Gp=?B8qQWO;c%fbEl%QMoPk> zX6?yY<%r|?3wcRoQ$U=Mz;#kC;J|AD8yDBm8Y2A{m(XciYq@iB8FT1}VoB{Idv$Qa zjoF|&=$OciY&5@zxvs6B50qCk#Fgiruden4WgKq zG;pHqZ}Agwhz~V&ywxMk*tLHe%p!8GayoJv@{5)*(~;Ak7J$od(j^chgdQvx)4!~q z9OIPaZjvPUCEYMTfhOmC&W?Gdz;Rzj4qlrSZ5M$+v+UCHY+)chiZ?1krGp!UZzNUb z-TUPnt6Uk!QXyQoG zkb~EUCZdf!N%0?{p^|8nx>;)ZIJGE%V{L%)=DAX4vXIHa#k}RDL@8!&N^B{~cFF}_ zc*b8eITt-6@^9;Pt}7=|?cXpju7NJ5UAyIf$5e0Mlt6?-30*7+q<#dvz6RtEnSei0 zywO{nl^YnNoNB1(-YuALwndcxJ)Gcg-8$WJ=S;>no}4a^j>}MV2l0GP!;!EVH-w!i zvlk&J2bN)S48zjd7#7X2Qf7cU!!G{npb^c7qE28{@WQO{&X8;8mtnzRrAFVI+vJqw z8SO4-Ew$^IrBoBTOd&PksY($wlBU)G4@~!JBPGY6RbJ}VM6+Zsk3n`5gAN+-><|jv zh5qxf&r2~`v(KMF*y<=zesIa{Qb}>aUP6Rmq|WEHa>0H@mYpUD3Cm___Y9eA{>Bwq z8G5ZL;aM0(#*iX2xEB89X5^8yVC%-v$UG*P>MSYNz&+;erbC&NNK~q~CvXZ&&!SzD z+s@?$;?CQ_+c|H(t67Gz{`_1uLPOLbZ7BD0hO zKFS>w@Aawe@v;Y()B!!NWi)^zZ%Gkxo&9pA0R!)cJ#YrxN$#F3aovIht~4XpnLA^q zD`A^c9L#tv5CNZv;Z*H8E(MVEDukFz4N7JiP!vKGf;o8JB6MkNZ9U5Lr2RQ=(g*2u zP$dp4AZ#Fr4)4#K9a#xK*r&m^Mt@vhh2Z5tY;aXUrL#k^>KYLMLGgk_0udLcgXNKa zWWTK8Ig3(0-&Vx;_k+#^DFmYIi1cIh))YUIvJm0Fp@Do0!S*Gy1P{dU)d5!lR^t80 z4@(1?syc!@Q6eK=&Ub%h`5ASY-1Vlb{}ui9%D*HAJQ^ejc}M9A*CR=zjN6>*<8@QT z(ADb4ofkXIz3e6P`J=!St#+1&%Z)KR`XvWO99h0kZrPdu-G=G}*7z!XcI}f}CG!{E z>r_^8slRlDga3n$P<8yk%Yd>3m-A`)^g1LXJSFn`6(F;9TEi|@L17g^m&P2*aT?pK z@jU4I*ne-+;d|_~X@v}NxR9?nU1g4pcRqK5if1?p-}k9WXqUjoI+?{|%$zP=Xu@#C zsG+LLdQwwk?g`D{Yf)vm%nAL$xIF`>SZHwccp!sy-Uv}Ty(k_+Z%>q>HE~U_0FEx9^Ln7}Ua_Y4(k2okhh<4un*S_uzbxx=Zz#Nk*Y$Y=Eu_nq@9?SqQfWh}c%bMg6) zwWAW9DXmiOZjv<;EWu)v{`F5Z((S0qSL)0(w1Y)wYarvdU zJ8E&`uScFH>ScghKztCI1Jx1MI!Bdse*$}EI#%kc*#>)d}mU{dtDg4>ov3t$v>F&!PW&xZO zAN`%n=so2d#Ug*pBc|!dD|Z62G_)yfne>*0Wy)n9jZB-@W!7`GT-$Z9dQVcU6veKf z`EUkJd>&@ETb4hw>X*3WLAxV`kx^xSF?}J5J#lu!WLiU^QM}fGs|`2Sx9(KwW*7js zz=|8dEMOUV!1^Q!$Gq!zO(|v=+VXh%(sPN}bV8ERTh`OcTK+{>FP1kxl0?s0t;)`9 z%$gT4gi_^?kKCacv>8L*)%|1*P3RMZzxe}ER_x>Zh%g9}kePPiTSStb>VU)7Eoz?2 z$a`H;l!KpM?I>dQQ8F_vN7WIeJQ0u| z{MnKF&))Pj6lqq_NIiluk^53e_L1boF0Y`~sc4hx!X(j^%OWtti(lwNu*h2J)78zL znW3{!y;W12pRIlp!46}R{l3MF#H+MUFqq%tt_SqQI7`R)Nle>A(CS|KKY1JRcrB-G z#^1LIrTYEbY}5~QulE~q`YvdPD*EB~EdfZ>jxUSHg{hzRl1|w9>ZkxYnsih_luyDy z|0Ha@_HhLLZKX~b1v+N*7^x{m`f(KO0$+ATZsb`~MQi_(Q-UTuSEtDoUsClyZhsE| z5o-7yfMx4@sRx#CLOI;>uK#}Erm9^ zX`@l(<-ojx6$b@)bt+s3&&rMU+fz?e5}g{c-tTPJ8G|+fF!(Ufl!3d8@nye~tNgk% z6o5Wsxa(~A#n|J)QZrL|Roxgi`DDmt)doN<*x|HHV^9hS=HwX&Gn;<1eKH*xxec~< z!c7m{OGvMmU7;7T0p`|!;p{9zKEk|T6l>+{Ib&}bBYMKQ|BZCDcbL!UF)$DqPu8SN+OlU9mhuTRf>-MLiwp6Q(Zqt1^Uj-m188x?l8!>&CM`i zu^Pfl(_1l#{c@^%j<1LbwLB=*&h-tc*QwxHg~VM!qPeN<(PQD*728jZ3X;pm#=atX z0S#KZGpz@a;`S(Aq61VeI&Xv*O7Mhl`;6ZLGY~W!Vak`G_7F5C@P4ej91BATMsg8} zXi||wZB_fx_i)bnG%h9s`-84r^L;t>z{zPms^~fNq%LY3792kIr#Q1 z#<(mdq$GY9CMHDJ##(}w+ZDgT$k;s1F;N3MCL{xOT*|}78o)9|DJv3vs~rSdr^Esq-Qo ziJQ9?cKreHtx7E!#ay&&e;@B_|J-^?TNlwuTR`CfB}!{=GVAM$XMXMNx21S}64#$w zcKjam2t$mrDA67Y4v0u3%6)oM;Xiv6*W<0*ng~U1nYG)>L>kq~J$b2lIyfD#$==#D zTFy9EKE19Ay_&ML2)C_7v73?2UX9Buvj5AuDkfS&ockfxFNK5Hqb00mN+K{sh!()i zF16Nfq*_u&Id_*)VBA^j;YYt$|39279RTM_Amiz<8UypcIaf`!jYq1(Qe9e?RMUN&9 zrsWSJ=BJXNb7-3oI0$S2#8QfiG$kwAU1z8DrLRcsFRk1GjeEiAWo9!6Hb4AWI&YkG zhfK0y0p%DRh&w{|nSxLrAO8J*eJXWQ!3z+7e9Vk*U-J7L`IWC1;H)p%TVVSp3RzNP zM`)Uzm6%)3ePPHqNvhjJsku`3%^7j?eXXnd60?W=oqB~FCnKfo#-+P_P|qkd+u^}U zzNVIH&bY4Ky4VOg?#zC?(&YI;nxp8Mm!nnBk_et*$W!2X`}lGmE#?O(!i+w=wcb;h zhPNfwTfJ><_E^nJdx$Uc+>$1!$$1;ozP@hVoq4_DpXS{@~7kYjAqdXU)cX zl&jMV(QawM%wrkI+ql*fvDhc+rHyyBNvaHM4sp~W!@fbqT3J7@C|Ikx>7wWaWLp$IgksxCr+u#OROfG|y| zPU$CfOvS5la*40COXG#)2V{VMVL``AU3(e%zu3)|yN2?P>SZRw)mN&?JTg`W+&7o? zgQ!mAG#hO6CO<|`E!r|=zPqMwZsN>vaj%5yIAMkfJ68?Svh$+#fcwZ+K4*35u>vH3 z1LtU13iru%ALKHdE1TBU^w zr84`Ku?pPb!Wej2qgtz>m%d5J+cah~9XR0zIl^eNirp<~={NIX5{@)MoP`WLIz%u5 zg{Bg4gGWJ~puUN%5D*{xpzsY};$i*7m&>j1W!Cx!g4WM{6I@as6BzF{dthO~a<)7t z@M)3DQoaT1STFiKhjaIO_mS9Bo0*b-7d377|7e;t`5v6Na+F-9dGbnato*sz-ahaN zASlhF%-c~hyP<>BBl=bP8Gz&B9D#AE^!&o4!$mNRjREuA;pR?rf(klA2$*KcTh2L~0u4OUyaERe7W9Go@9UyxJAcjlDZ?W>B1$raHrx6hjh*;}IH7eL^%0J_Ma?cbE%uB+WnncMF-65mfU;j2>W-^;mVq zTbduWHuy@2%GeTblzcHspd`5M@{=cZ`5#AVVw;p@>MG({Fvx#$M6q1F$A#$gWidd+ z4XDRXyM!?pYtCSfp2++|=UTSG`Q~P7R zml7Ymz0#Iqp=j}*&vwr-dAyB`^+t~}&l*>H&yXY3Ab~hwa+7=hi_^>fVlYxN#R85H|DfNbL1tJV5*fb*yDU zAQlHKzf^Lkg9{ag7ZCzDCDVOKP1~X*^3u#hhKkN@8~FS_dUhBuhvu_QMBdQmx{8jr zd7VqIwHYQBXOOwYCijA8;!#%7CtK^$bmPo4M2XQ~{P*gTB$%1s4!jAX!(A#KOy42| zu|_#CsdZ4G1g>P&oDWHS8MQB{Co?#<8abY@tFao1tX3C@IEWU2eLB`EV=paeqE@fK zd#-^%hTq9&kAf*H)a?~bap82@cIydzy1s22NJ8-`3;=510^*V5)-VofQPiYXSA4I$ zQ7f>B&(HhuSOH9$bkr^qXCF4p3I=p(&RO6#wm5#Y667B~l3!0T%ig^~OOfIhqiS5< z!@=R<#B6g9sB3E~vxuHdIcCbB?BboQ{J-iS1cO8W0eh6G3$#sa%X%$W{_r)lx%Dy8 z2C6r6iAlOT=pO4Q6IoZ5ld15^@BnlXqtWwn$uA6t3#`sRQ^`!i1UfjFs1m|eY$%9l z#?OG97(ptY>8W(qirjL&TY3z~Ss6E9GydGNeHQRZgdn0Z_N1D%F?s}%J*=xQW{hEh z_vin3F@{|1?B_F(-4%HTH~Id=NAXv3^i2%CR1l&L%GvL_Cs zv$6e^E}e&at;L&DpisxoIo4h+IWi)QFqW>ANGH^g#Bo{ANw8f(N}XV7mpEx9`nkNc z>1I{nr9k1MHM%2=&qX{M@?5&;upC|end|YDops(Ss;B$>PkB8t(@`(VCArlT0Uiw_3h1qt>PI&kV;3HIAJjgDh9 z!}5hl=zHZ~Nz2`=)GmfF<_*=ZbpKb!aQJTf{>_hK7yfj zA00OrC9nl&eUE?W|1@=vaz-np7IQiMqcjLc6Li8dfzlM34X>hOhgH6lQDhIt#7jY? z`RHy%T8A7k@J{J7CTWnwyGf78;)pT~4c79j_Q#W-NJZ5JxXJK^{w3GRrI6y?G@$cQ zp9&1<8|DHHG=~B20m1R=VwM!YQx~UsHX;p?QWxX7DS|dIsXo(dIcZ)m6{hp1=}$UM zEfoSrYmF*%n`Ae2oGzlPmYCRiR~KUGAkBmNFWp3Z^9~PMrI`8X6o2l0<#KQkcTwr# z=A7T~6z*Z^Tt=u^B4p-Uxrjx;-b+{?x_!<6vVU_Jx6*GJVSN7XnWUQ={2$OOSec=Kz44{DypPj zMWHefM43Bon|+}BS$yF-Jn}2`N(+{uA(5%3H)uXUaXqXw@WDg}75mq|D8e^sX1vHQ zrYF8bz4#n^V}#1^IJkb@3rjV`#*nQzG|DGmYUu2l!P&(P%9(fXZHMsIPKWXN^K@vtQ_v@F6|oJ$DQ2>UJV!O^8?Fp+GRW;{{3>Q8JF6Z z{Bj?|TM|F@ks_;UF%^#*Mz{#i)|-93%$!ffaiHc(Xqg7EP3bAJQ6M?+1j1k=fe`hC za$s+mQx5KoUgHU`7rW^A#L6mt!pkv7 zMSm~z{d*64_^|#}v$o{uu_{S#=#f+j)`AZf(5ZfA*?6FBCNYFQ#g^N4emSeOe_+Nk z2Nv5ZHwdxjFa3&2KOMpG4m4tJNv@1zq6UPgZ&|AI{-zb;Fe9TdiTn>Nyr2~%W%TQm zm2yUcWQ(3XRxpzQ^fC$r{8)*2QmlxJ;RgZYaDIxm{{rGP+%KC)PEfVS@K6TS4mevU8xm_Uti-h7@Hb zMXkawMrc|Bf;;qx^_5X3!QJ)jPya$l`__3?6kL%EYU|r`tm`YA4v6BOekRjJWb;vW zz=;g9QFbA2efhJ;Za5zE^BSYxnW+DOup$o#>?I{MK*fcG_7gG~$EydM*(Tls1F_~( z-vv%k?jfE)8|X(M7;sh_)APHn-UX^;iwR3;!@M%%&*=Eh9I8r|Zw%VB1SqT+@*gl> zNU$FV^y|bJ20w>Wx8YsUg!SUotTg3hKqP({2iAW8nl^D z5jrD+zhf^6g+!OZ|KF49&gQ2w-&9ed%FxZH{kWdMsSw(RU;J?o;;fKDbkD5xiKuU# zya`wTa+jMJz*H>>S-2?`8k}DuhAu0Coa<*ng8vyBv_(^DX-;UEQX7Dk>ty< zPYOvHzLn&HMfML^BjMWh6rUKO!YF3*xW|W+jwFvU1pnVtJZg8ZLv$rns6=*X%pO~3 z_=?6GWS!eQHl+!#0h!t(UOHLap)q*V66lH%kfDO4F|g#|p@O;R*2p};K`}(r9}y&j zf4$Ry#r6*}c&D+8XwL5bU~8Kzb$X5l6pHML78F5!#j;UOoRpA+HZ46g6?9}NgPe@0 zUcqdB3?ft7RAhc+345G80FNZ&BR`SJaoi1P`{^EHlY6#Ufj;1W9^%+ge+C{lMF8Z;i2DHy{>QcAJL>#Hz2M@; z>DEdt>)$K?pRu2Q{8VzpWCfSIci>)v#N#j^uf}NQ>5lDT_|UV8d2?kB2Ejfq7}hDs zjEV>e0oum#*q^4uvV3-eeRUrmtyPG<@14Yi)PFnvc^0P=l638K0PI$TlPUQkhf0Yy zBoEAU_lK3Op%8(o&U=>3s7XWg*X~^BxTDAxbJg~`3d1ohw(WFkn*}C5LqIAhhq~etyj+|L3cLFm^YJzxW4W}K7 zmbN$4SH>t~@c(~c=Lm4ou}2%tD;>VQ2MlzR|e zja=2VQGsd>#bkDoyMH*yxO&9DGVr06QY2j3j)~eltJ8*CHaFgX)#;&uy)z%6_q%he zhss&cvGB5tJB8X?r^@fcU+Wy*=BqB$eU6ZL z_BbNo>!K7p0`fA+b=_KsS?4yaUb%6<%8*?fXg-xUZE-@c z+_>6qIe6VGH-7TWjq9cb0J&RVxN##^zMWBJMG6KdF%OE?7jFFhC5Ri}gBv|WoB(Lm za%L#TW(Y9isbXTr8TEEP^LKNz8s_Y}WwKxzbijYPaRGS~Ho72_K8xFZ$eJdUr@EWr z3PO!_ydm4Bx`5<{2Je&*u}wT(@@=(_?X(%22oE2#9d+8iHcVR)hRumJ6sJ5Q0q>{% z{nSpoAgDiYynTHh1%G1C$+*FQ{?^Umyg@A&iLo^BF=?Jdq+`TlP>}}{Z^>3-&s@fg|>TptJdopr0XbQJE_mwT+pSQ(I6+^S= zTa?01bS$uR2VFU{>PtwvF!g)#m};@8W1U0%rMLU?Se`lVXL{RVc$I7AEXR_;ZQwLp zC7-%ws!uL=jB_+i4Y_hNNs_h^?1WFQ z;N}tVqy(|J8pC^#I9OA2q_ z4BAG|uEblogx2i>HILl)t)UHRN(r3X@+c{1w;bw@E_rp;rK|EaI8a3$iPF|C)Vr0j z_KlC^;(H^qcJBqebQEgWyS^>Oxnp>*oE-r^+?g7et9UyD_h;PEHOqVWsYNMx<8tkZ z!S(L9by#d$6Mn5R&Qw4=ouhng zNx+rCLKk1@uO#Pa&_G2 zYyQa!LhMT>dJ2XFx6IMc!`O_a)`m2N74Mf)2f3Dr3a0$2zjfxGyM~D_9V_b4c<#Sd zt798|Ki0bt;%KA`nf`((1s<1YD%B1=xv$Y>jyMG)fKbgJ3zK$nC>eTBon9nQ9)^(~ zZa7l2P{{hS>lbs@M->fGK=@mj$^v?8Tut2xv!c9Q+CBmOys*>hGF-LAsVXDESB0L4 z^T~N0Y6+5bs@ZC1>Q7PC-8s}ON zBk(3MmWU`e1#U&7wU%t7unWh#Fy{OXR|FBp!E3=7(!XFM^RZv%%ucaNg-s6aRpc4O zBCk%f@ULh6&~`s#M(yKZwzEvS$oq66t_T7s;z6$dLW<42YKIoeu&Afk7%+GwP- zpNhr)!+eUJ+e)pUaS-XY5(Hly1W2!;Hv)`w78YTuVgM&wUfGx-D2&yY--0I0AW%8l z+lGla7I+Jn;>f#P9o~bXe1|w$TXOTI52PA{=pNQY^k}wTpR#42@O(6YAAP_J*-hFz zLGWhQ=Fc;Y7X^1P;z3}%{2dxynVJPX14eRy7Fze7CfUO9Ry5h2uyuk`X63oV{a zDxKBtm8;a!SC4(V-YxJsGeSkqdwMCMe;*dwHbXv3Ps-%B;Q7P#BN(5F{A7A$-m!Q?Gxdz-|5k=v&PpIox16)K2ks*P~<0WdE_(A@^W?}hjS%I%Dw zSth#|i~;)jVUwAP&u;vw0XO2qI4aV?YaKB_5a?tO8S)A``NEfGiN>%zxM8V;gOlTY z0AjjD7J_GkQG>z9=qS)uD!+RtMTJ9XrJ372iS!h-P}v5w!aayr^ISGNGIkFd{FHID_n#HYV7 zp~OEhVQc$en9!Q0JZ58E_owG-xz6k*f$L^P%gwJg*SqQiIi*aw_68|@8Z}VS({zku z32&^gO`v9qoXF2VGgekM6DF$(kv*bFz58U?m<0n zncwY#)JzHw*uirX|Jhe``1vJI2#oQCk!WsA%E&F6k2Va&CU2dtdSFOO8+}W4~5tvqavFmueIHYn@^OGv|mqIrXv7B#0GJ_$6s~+X>kDXu|WPGSE$54uF$VH zH=7X?-JA65qFR!QNvAVZhE3Z556ys^YR9@|eXKHUEX`;0eF2{B2D2h2!gLuO4*h~JLRB&j|s*9N&=vd^YIcrnss zmbce5nrmhCErTLR@1K0)V2S|y8<-pUNb`6Tg*B}8d%(~t$&@`Y9Z4S3`bL1)=OXI~ zwhq&&ja)*7If!$P+_$9~E1|_qs|P-f+6jZdGif7%eYIFyX_QYxyym*}o@chI-NWabXP~XeK#@aPA{I?B+6&D_MJc^a z|8jaJ-8ib3SkF&?ek2U|2LfZ8eZj$CL3mrFG)u89DbnVLGB?slVQd{@nbrfee>Ah%w?9xJmlXtx2mdcAU5EXxrW$qh9RL zW_|HT*O&4ClXD7=260ZQMDwdkcn)8X8CR5S0Ie*HdmsY63Tts$*s~IMFz9`lTcM8U z7>+qg&w^Kni*)q3EZWFROO%6!7%Xpyu*x8Hy>K@cbL$lpXB-0ufk60m9w?3br?$Jd*C%1^nP!$OEEb$tZMj0-F0-Z3qAhsJ}b$AgW zS4)w^(FFd&!qL+wSpU!V|d#{fGe+uG#-Q0 z)>nN+2HMQA+BY(6U>J8WbBzA`Z~V*FVJn|kaTI^=Z;Sa_(;*irtx6-JP{ZS!^Lg0f zJ84Osf~?YtPH*8DKEaqe?Byib>er?1UmnjZI={<^%FnBjcH+==P{o95hJtF=b^=@T zy5u>fE$#q*;$e2XuzZ4^=ZG^BJ)F-A6!|U3vR+%v<-99lh^dyHV^n) zD$XmSW;7Hu?56I6TG;T{g`$R7x7H%so5z;2pks2s!({iUYi<%>O;JvbgExn>q1!aC zTV?@w>CF@AL@~y|#~xm=C;-Z9i@g^<=o~a&AuypE6qh{pKTT)ph80x9wWKglJ>5vy zY$1*#k+TgDIs>Br+Z6OOqOB)-Z3?dLhHoFuCBD(2)EZN7AlCQR9e8v+rDJv0MRtoJ zk|&JX5VX;0;$IXyedDuid+I>>VE-XU+vF_B)l`qjzWUy9n z$dcb${L&Zi7)kcYJD5QsyW1>V9nMz!6`qKN{d^z4zkx8+l5^Lcml`+VPxe9mB`zs| zx1GA>j}s)Q@AXA5b<4Y=D(k#eUk0gldG4_GGdwbD& zjmuGSJv<}vzkmF{=be#iZ5M}`2QhHkDXf%1&E29Mq_1lES>FA`pNra9yWRXzhcFK; zj*Eo;cqLaHjWMjK7LmOlaqfEZ_@s+SEwc3W!x3IlhUEHRK3)&MaVFz#~^4W%$B^>2a zve^pc2!|P_xr}4dr60By9OU`Ex`5I#4PmTffz$GwJ{v{)(FedeC7Go2dntzosgkY% zuzDkT>wV!kTv@cb5#s`km2Y7|ESplOrOq2}gqGU{F=~p%IA6Au%v8VC@7g=F9RL}( zy!Rc0I8R;n2d2L2aUzvZzJge-&mh)^7ZA&S9 zX#Yy~YTljCiH(rB`}jM~36IkTSN$eWitEnCheOAVf}N%Y($Zzh)u`A;PH%4@_ucAR z@bBz_U2fHZ2M+NwXR+$s0qmoUXbd4rzF-Vm&CJ8^-x(SY3R`<;DD^7^Mor(i6~6~k zfw|=IMLU%}{xK}9PM|2#7?+V`-+ylwq1`b=OY>6Pk&xt{B4dHQ^N{hl17$SfsNC%9 z7Um_(O>Up->Ff<72{`*D7rqm7N9X}#5ky3V=t*ZcQjzS|sQTm2EVHW%tK1n|>Kd3+ zEP$t8mLxweJ#~@Go@($9M>VR=lnX$J(ElyU>p<&XQu5~44i1UT6s$2GEJT+tGYKN> z6iL@X$8Htl{bLB_&8+D|9-{Ui@zk?$gC$7{x`0v}b5Nypd%3@r)u z8qdBXoPf82F?}CW-hD#zxO|Eq@o|u0*zPV^Y@_G6N zaRLL8PL4J;l8Ricu1)oomHgSMf&TOfeQ=^Q5vIWkB$%*J!a#Ic8qcaiOg)a?AkB^o zBxUdG`uN}d^iTeu68dOFJxt1;eeWRqd-_eSgK3Rw`m8H!WpVR@qSZLuq#}M1hBfA^ z_Z<%4ua`M5K@3b%BF*Pcpi#x%cOIrxEh&-TWv^Dl-@zOEQU?wKz(5>Wz-;3Def^c~ zTD1Vy@bnhWRxR5IQ|w_=F8Mup$9JX^g!@U%j(A;T2?w%7UzVcx^-YxDNtU0@`Z^HI z|G1^)-_fWaCd6yIIFs58FT;l`r7g!fTBn9Ru{-MHi(`c@;V3|%hSwg=VxH8lWJ#+jEa%q(*`QmMXZ@*N=XVu@42&NAJc-uNG8 z?F4aByP9B1s_9_$8&!?3)1}jON01%}y&GYhwfzUa6S5u3bJC7C%w#$w+dgVy5VrsT z!{e9wzKPmzHTg0aAp8WcCmA!H-8G8Pt8boeNIhq1^sim&a}dRrOJ0<%0k?2AUIxU= zm87Sp_}$$JvBQPjgpeOxPgy`;pWYgOS^nNIZ)&dwZ>&x!eS6zd^T5#sS8|@U8xd>5 zuOn}f=lmQCK(|*nGpgO~c)T*qA@F3gR~yrGJ$1!i^2sHp3opsTHCC?6dv?Q$Ee~N( z9bZu$9+I|s7Wo6doB%+~b?i9TdY;a@RZ$9Wf%w-s46g*gJU<{0IZRGvWYZ%$xDONNY~*d_wS-Q#+OwU4hjzEYu>kbQ^utX9}k0= z)pfTkxQbnF5{6&=LeanrmNZ3wWYsVv^-ihnz%v3dTETS%E==Sgk@ZN$KOpeR=>G<< zzFsc4jdAsQ79=|x{Rg~?dj+o|V);;Gzc?VCd$VFC_IH;w){k1zf+M(Q7dO&;5Fr?w z_*DaV`e4eC-=}fZHuCESTG+r+(Gx9AV3%^@vi+vRM0;JwaDX8+Q=iun_%bbkc z7`PnV=Kb^N-&CdH-aTp}%1){U)wkuC9c^z8A4s(51b*#AvzjG4&BDXKeQs}AIXJ2h zd&>B8H6gt}f&Nc(E7vG$;-$G&Fp3mZweoB|Q^FJ5llk+X%d=NvsQur|a{v<5FC&6p zn0x1z-u{#en#4(l_x&?}LvYV=61wQ%3jR%0VppFqB|7dNMDu+hd zvCO{@oWH%sW zmr&w2N$n4r5kJ^uSW9-Y&$jTcHVPPjJMv@{F6Cjy{^LRoo-0EI`=9%UtNSR*t6z<2 zv8~h8m1kFUkGkr5O_}GmaRFDH>7_@*T~jlAVE5(@=UQfes&R3#&&hJmi?JsZ)^oyS zUK`0E1I>nq*ElUR=}&5MyXHo$+&pw9|JGfdMe0ksuH2t}KVaG!iYona{(X|&mB3QP zxVf`PR$OBnYmaSNtx4Aml$Yrqf_nSWMULITm?kgvln#O6eo(uj@T4Xklvin-MiG{i zDz||Di(RZXy()0+AM=#G_f&cZi~hF4z68P^(IQQX>kaJkRjmBx?0eb5$)4m1+~@F{ zA&j_!dhnOiQ~ydEM}tkib>3sUPY~@ng{G;37yqA%%gzat^f=@GtBCW_N?pcuYQ;j> zRG4{3)yF$;L8*EPe@qE95}}m=mD%c#=V0Jo`n%rE1TVi4sEN*TPiDeBcze7*0ZQ1+ zk=}J21MDHbc4R03K(1y_dn}0dXrdUA_^;2-v`jQbCmT@a&OgyR4m*6IA}WIZp#~f6 zEQ)X_l%Nx7GAt#BZQ;}{Lb!vPz=iJt!520{uU}Q5T7ZzlS*4JsGCI zaM}3pc1u;GKw_;RwH#FoEUmU8)vAcHw#8bGh$z=+MRZ(d_z3X4Rp#G>-965rR*Wu6 z9x|vEgW_Z8Ws6i3CY@J4wPaxU(6t#~qk=$JaXmOipdK;TR>{9J%2S83|2x|FrTujs zev_$9&kyzsl7d;W!{v_^w~g+R8yfalI?GIz@O^A* zjo|8?s-Q2S)H@thJ#1X+zN;ePKfIp<()s|OTIC{XC(zrsn%@MRs)Fd#(g|V2p5@V8 z=p!h$i~zNRV4`Y@$g|eZMB8Um%^XnXxezpg@GAJ?etA#OhCOa+U5r?xRasds+2#7f z@`p;Gd@=|uML_9iz1e*UDAMg|rH`~SB6?2Vv*}cUm1tghs}&O)`jZ)B%x?j=d5$AI z8SASFHqgL|k?f6a?N0TnDk=fBea_&bGPB~VJq?&;diq91+$r@x?b)Z<9_@0i7YOd$ z&Dj`E+pg!zNnZt$krqFVb01$&#=*9GeDT@?w5-#x!&9w3_1-*j-|(s54_x%Eg~XXZ zcyoFsiFG)O6+!AY@5;A79qu$RdHXm{9(qd1XBM4?9E8Nxq&@l~FVNJ%Gk80?u>7c; zRPNr}$Q~~wW^r-6mXm{eh;NDGG~^`&*k%DPW&4&xZoH15jRyuefRFtl2n3`$E;x*8 zXu7D3ut|r3L-o=y^{V58DYXUrnqL@U;u#yA=S`a}-eFBb?NwhlFbaoFHZWH0+^X8I zIz|k1>62)>B+<)B2j5|n4?R+aCt5=eea*TIritAyj@$08v5%$C(2qRWInR@6zQzxWU|P+iLN5f>}ukV9H2sn%4xH{A(CT8_av7M84SoX3h6lt;T! zZ>&~NHlV|6>ooBTZBdeRq9mXEddWtOsJfZ0=Rn+2;!*ZFkrt!K2#b8jsyGZm>wut;$E=g0udwmU@Uo4)=1eZ9j!uXsURK-Owlqua!VX~yktUW90kg*OYQ)~ioT+r z^VGWKla!3N8!rjKWsa+saVJc5k}Iv!ZYCExf0=uX_-pP#APzn1@G)`IXz^Vg9B&Hd zgbd1B+s?8G7oSFItam2)#$+tKsO^(lY?GeDU^8tRFNWG|)~B*{{jx`sQ_+UU3DqBom1z&ov&WO>*+bpC^KB&Nnd_uTcTg}5X)TuSGYq<3+HQ2| z8S~BNr$3`YP(FlW#kNz`|3cqyQ07nc!9&M5BY6&KU9J0Gwp=2t&;=~Zh>@~VoD;+9 zax#rjsIyg3v?o_5E||}tjbB@$8!1Pdgf&w;Ryj2ZPcu1bO&T4Ct7tQbt-9<2&Uf`y zNk8!z6S{UyJ)KssjBwNAh{66E{51NmHFi*g0pt?g?50|pXFna41N!mu0&D|jv)L_> zv;>+#5;H@Ls=yAoO~=Gl?8cF;Qfit{uj_hp45Hg7`$O;6lyV-m1;-tcW66 zkeQmXSqZ*l{ek#CV3>q;+E+~-VgbdDGD#u|%jVrp6sEBt6WwBfMtt{dSO$Ggz?f$25eHU_!B@3t^u9O<_ev1u%;k)VYA= z+!uYhn!tXIqJ552MIPtBytoJXHNM<_`*t+KybE({IfyS>SkU&<6ZYW3l8QUB zzgy8o)wxIkMO7%$RIQf)w0`TEJ1R1 z%7Qk4MYna8UVF+Fg=#o)L@_(MfSLge@*2!D<3hY|{feqR6Kg!lDL0n@luH(lS&2(n#+-jLMBf(g7!+kLGu2dL z3sYCxk_XmK|0l7Qd0BuL6&3nBJ`Ks{H%`2N*+*aS!K}iCluKe3_*sctt{_F`7vKxT zeeKwbcT$3vwnFTZ6^5}Z3I!YLt5JiZa-M@-cMW)bOLtIceenl~4He!%{>^hGJbEwW z{7L=^ja@L3Ee0DN`rnvXWJi(%AKHX55OWt9k5XS4;z{xfx*Wbrh6K^Na!l6&t~ zy!l_=>bmOVbi?^Q*o*+^yeoKVIeQT_ykeLAub4QgHQ(yRcso@U}v5qkg;(u|Hef7BHK@wLEmPt6@9s2!3O03 z@c%=aYVY5#6F5JDW=3qZZkOwKz*sah1GeeNq7)vcBoMemZPpF{At7`6T_F;-Bdmco zzkkD*4hR}!La*ZS2f7g}#os=e_&a~lQ&Qf3RL@?2NLapVpbF+l;c zJD=LWBs~Ynnvb2eaQZyHLyEoN*)7Nt7s7THck=mduF0t&LxH&m@Xd2+_+!-wAIjDi z;iovfn1cIh>f9}Ny91@MPLqpd zCLsbHBtNO5BUHpH^snGgT%nQifzl=`6BY)L)IA)3Jy>o2eqcVj&_V{3N1Psh6c;+) zs6Gx$*mp~-eBV*xIJ6FuXC2Vg^cOg0(kW04}knf&KsY`(;f!>NpPkPNL?{d3*}{>rjO2ZRi$xPDNMB(hQ*_WVYYOaR0Y47Rx^yI_Zp@#f zI@X<7lGRV0v`5ag?mu|c-Sq3WAlNz{vw3jzJe&%fnCE?MvFKf?z07#9^j?rdPnl=| z0E~wz)P=Qd3Q~Y;t0<)Bv~7dXoac7ItsfZOIS++Wi3J!_R7M-;lkV;$Cw5+&`^Q$A z2TZk`LE;vBELz_2M?^(S1#)l&ZLYD_zi{K6q8~kOazJx3f^Clm~a?KOuYI*wQ*f^_#M z=&kv25uvNDygo6w&Z}BvfFmoZFe0?(m$jc2Qc7r)_%m z>;#@@gUBG9u4{jLLuvVW!AL(?1ZY@^$cs1UdiW-j_2u;H($UuvYOhlzE#UO5a6D;| z-ffQa#;-4=qfphtU2%Oe-y9{;5jlZB8*-!?(JMdTs@pbN+{pR;Ife3tB?15J0sS$D z`{e}k-u!F?5BRO-nAG>76|C2u&}$ovU1=u(@aLQMbSn8o@V>{)n96kLGYQwuqADE` z9Z&+I;9hJrVtsqN)89rv9U?y*YW^8|C@_0EfBbFig`6Odmzb)HKzl}`&QR1ehb=wA zVOcW280X4z+pIa8CGZx`vOW8e7o^TgpW0LDH-DlF1FZ+FyQKC5_1eBmS1m0>;{b-9 z)!Fu4#{R`)?Uj<~Q-F}$`DWwtsCHeDysLU2<8E6Vc#>NGR0TnXx@a8CQRcg>IQl@H zTSOeopG;iM%btD0h|w!gI9nJS;dxr$BQo_a3j3uVE?MI_!Ry=d-68C5>t{Duiv zCHdwJJ!=(GXisUKUMf1^E2weBgtWZrUeua9j($1XRilGTmO{&lAn!(z@Qqbv@fUsT z>SNEcF2wOspb5UK>rV;D=Me?gySEd|OSzvo8x$Fs-i}L{I(KWQ^_j^?pPymO+b)L3 zdAqST>A>Unx=yLSBSxuq@+}V~QI>mS0){6D9Ru1ly_{i`8fxRP)Zb3SWy^ypV7xKG z1cL;7BM62H+H5MwERO5z+Zb>v>vzvwF?Bi6g=X`1(f>xDyL&Q?UlE@FNugr@4I?TU zIUT(UfWrZ4rB}(MD~PlU9tP4$Vhmd+Ak9>wCR_|{l^aNIj{F=e|C%m;RZLubn{d|G zhQc?wG(bWSJsEf0-*%rgfHK1aCn^#Ni2Y7V@vp_>T~yM{oazNQg$M}$7gk66Yb*gY z2AIt(z(9#a)<$z6{!hzYIVB$$vHiwjC(&0=u^nZeM~KH@pOj1lzJAa?f8O#m8dh6P z1T18W<%Xamy^a)ko-Bau!htuCvvG6blMPaF;7T(8Iww%a->8Yt2@X?CuP1PF=z5 z$*@y(Y8jA1XM>OXSD}lfv#N)9DMWy#LTD8J^=*KrLKw98v@;T%)W)UvZLU+dl%{_4 z$)zm*LZ18d??4HXiFId~!!F@sWRO{jy7Oxr{%cl0Dm}n{S>##!rWR}6XEPRm`Lo^! zO4I)vs{hs*5|k{VE8@U{k5w6v;r&+eec-a}?E67gwj;0IFKcqp^KS8(o&rbP9kSja z?*{dYcjLqt{ohP|W->F78g3KIP#~KT@q@h-_+{fa;Errb9oI4+fPko9};Rg%8&7#Er;n4ecpaRGRWzg(n z)jMX#v?6=rRB+H+1#!2i|Dc|=--9y8V64i0kJzW)sdT?ZQD{w%B{ zdQq(>PK!#@Aof~^Qaa)%s$ce>RlEad`BR^B%Klq*UnwS*%e=f>zR<;gn8nLLH`Sg@_k3C$v(vwS z+{$0PiOKvRzlk!BLS@d0A&~x@^Bz|dF65Gsi7$r}v=!{#^K)RCmmBLs`ABXh@X&s| z$!l`PmClv;*L4$b0tMCl)=dK{EsL;eNX|x3Ei6{x;7UjsEfH;XmZEFregkMRaAS+ER~XrVIP=@Y2+1F-W4{qm*U-adNz%;&7}c&X`^el8lUr{COG zq8Jcs1JrI+4=uXu#nU>;jsaT_z?GH8bc`;4-JVx}u`s4w;^Vo^3zCfo_`=Qz7uXK=CKW!MVH73GTE4e`)7Ry#A$13^`wO6Nz z)`qH?VWVg0r*(yih2}xmcpopU+NsJ^U3a?5HuiX?K55C?qIZv!_*5Jn^B4JY2gP*A zBw}brTAh6hZJ3r_Z87e(xBmWm?0E9$_8F?c%r@Z6?PgH}mHE8EjX!HH1!ag~ULA1s zQ89`xTz02a6owDiT1fPPrnevVmJ+3Jcn`fl^)nqyE5Lui=0j8hkAb5(RR zfG4kZV##vc*nHiQ(*N*~Jytnc_Q{_0N$-d8W-jN{+x)4|MoLn@8dFL-Je4jS+}iEp zYEl{RyEqkUp*7auXt{q*B+kDJ3B_|Cn$)zV$C0w&zW&*fMBJD%rt0?njMa9XRi?$x zw(yP6Dxzt$(x)ra%whfk8$p7+2<(M@ic9I}M9?gSQJ>i-bG5P_l_3PZt4IE3&F1?& z>u<{z{;-uuG}bkjxK!8RWr-%WEt;{XwqBwe6rApxmsk^u-!e>50&3--jz4sh!1wM>Ab}Q zMMZqj&Q$NV<-li@{g9WQVqMmfv479mH@I)IZq2hxrFp#N{Bw^{ zzgjWQWxCLsW0ZaTJnB7za($Y0eU8s}`?U50srG^XYsW^MAF~W5WrKH5Un+j6ne5y0 zV#kmWQ2xN~ySf~Ve&C4^P-#}F3`aB7{`}qsHy2Scm|7&Boo|q%m|~p58ZLjLOQm(( z^D>lsDWC^4QeI{V3mqdgwCAJITSKEny=B3(kewXl{)uIZBv34LwXN$_tcOl6|GsM` zzgODvg2&b6{1Z#-4}MjGnmcB18Uo^)QHvgWBW#xNWWE)Cwe~aPW6ITggssKR^O5(# zw}e{+XGk}}i$7G$@M!cMI`*TK*u=tY--$Mfg^`MW$(2yd-wi7n*QuJqSu7g5_l!Xn za0##MCtqMQ(U${-q^4Gj;763sv5c* zYWA9AJmYy0L4$pTyEfS!+{|dPv=^rEw0xo!t|8Y}0a`EPdEPAg(PT;U#)r1+?aFu@)}+qbbx zG#zpDi?|NxMrm4uiUXYe>@m4-Kh;SzN~#fwtj6r^7QyZ8k`Gd#5v49U+%H>nlEfUP zjs{Agd_6kw>ld_o?B^A+S*f570};CKn2O<36Dqk`twWp`+il1UW-)xdn=Zo7{aPot)BT?$KpfxLz>!3Bk>HKa�B~uv~p*W?S#Qs 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�c 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

+PNR9Bkyr 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³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

Jsc<0xGJo}}Y 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�`i zc&qnpG8cXAAEKeI&A=(KssNvvBSY1k`Vr2}r21 z$@c{6JtsWYET37@7qoXrsAX!njfrDk1YhgGk(W^&wGhx)&e=9PCo)9`LWn#?xBHuQ*Cq?c{vqHWSCCuNwm3;Acn?o6L{-YJciz&n|^(0#7gE zGPH_fvg86aFB;V4aC=4qq#Iq+i@=h=l3>A-g1Ia93!KQ>@+4&9q_b<4LJ+jc9>;*w zu-N{Hg*=C@z0STX(m5mJTNIyvwq5|c<(*+#;6Z2wUz00wiHUTajZ4j!%3Eh5tzZ!| z?jb2Ozd&WFEN*C+sX(fi&~>-FF^jEE+I=WF-CgZ_5)7m9qTqhOKX~&wj_KZgSw1x> zyi;Z+bo3aa7=3l zLBTC*(RI*1zR~%SF91IW%rlLU*gNFMb8E&2VzO@UmW)|7I;9^Ovv<#M>E^r@o=r0) zOCP=V{g{A>OYN7Z3{7dfSXw*Tkedfk|E{qw5d~@NGkbRD_G^P~lV8uP#2D!;+}1EL zfx(-Hu>O~XpivpJoRMYPp<^{#jw5y!Q0|SqUNo1N15$pF!tF`$ z$KwKt#RNOY=ix@`Z?X?0D!o$)6a9sAD-~KtMI`(P9JK zu)d@R<{w@vPUf+^x|Rk$xPs>3c^c3h5ZvDGwe`{~lp=J4JL4%G@4@JMT@I=s3i_v7 z)?nyH*he0)bCrVc&IGbZ_Wzz#d7heWH`uocH1tyc))8Fpxh{&8oGub^Y*<-?!{E9R zw?f@KkES|yg7txlnSTyVl>+*+1eSC}LV8e9?@t~hnWz)l%BEBgs)$~xu%OGtq99X0 zsoU+>8rkk5xRw}_7;IvK^@^TU96Z!L5fan_kI(5YfzHC{;_qSClwxE8hHXxn;AMls zDUiV_G*i{K#8ZB0$dZ%Cl8~k(eY~tH5{b=X!}^$Z4sTahxl2)D2(iWowWg=8(i4`R z4)WPxkoZ8etrp^NL?=ZfRLUtubEbyKEJb7E;D<|wVc7Ycf6#s#5@JLQpdpT!Xv&F4 zfrf`CBZEzdub?XJW~LdEWLiLtgb2bH7Wral&W6FKfYu*Yp7{Vp33%w(Qk_x@cd4KE zU5ZD@2V76_+J^*u>y5RhF(h_)%tY9IM zMicWa%nCxe=eq_BAzknWjBnXsD+p0Jppah)R^G$W<%i#Zk#B!twFzYleN>cR$%Jev ztP396H&M+5Yx@N{6xJ4cN(1bF4*@!}Vd6jEUust#yI~^U@_aV-W>@3jv!c{KT=9Qh z%T$)`$0k?md%B}3`qA8+(L&g zG=oDt8X~b`B>7W&LB}Vq5bVOfZrSm3P;+8uuymVdY_M14tuB(8*T|T6+2Hd(I4f+Z78ObB6ojX-6cQVG~*lBvmMjh zOA~fG^5h9&?(u37uDj3o=ioRO*vZ*vV&_T?*3RFu^DoGg10~hCkD29R+-G4Qt?f5D zctOHIzt@9xQSYCSVdskzoAVTxMVk(@PX-2ZYqGDOGvo>()U*(*)Awaohkhm;D67Tu zokdBfEy(G+qi!7wUF;P3>I%wMSkIeNo5fbaW>b5%85R@jIAv@Ot@Bj_3y~EVz0j2< zC#@OVD-}3h8I2e3KU(rvcU*>6etXPnZ42 zX?4{!0nz+j62TArf3$oJ)SuX;1v~DTO@M48Z?|Qo)w^VZSGKIDEgm{)PIJA7*EalN zH;Di9mal+#!5{MxN(Ob@#|q0CGTE;aV}3x8&yrY`L5oHly6dT}BJ9~+R6dr) z&gs*&{J;ab=G`*L{hct6767b&JWpvELV06Pc#=>9WwkCYW#;ydMVfQCRc&r4wn&x z&rJmQ6z{TG{ZVWOgkiT+X6*+WoeKd-qi+f`%wSor-4{VCAFh^(Mn^i7{jm_mDLP~> zUmQHvQtj0YKMG`(cz$$CAp)+O_G%p~|qXW-pn*Q*UqjOKX7 z`iwiHF3%{F{gyG=+v(PxuxRNsw+$Og_fItacJn%M{^vUH_6R?q1M9A{P{Rm;fF^P$ zNC3};nJAy6LA$AT{!jmrOpDF`^dA|qBN>&skIDM%LV>>jrhAs(vTCKiUcZT-hfZ^T zx;k|-V9V&|ZxgqH7lc%TNJwp7EOiVuVj~ z;abEqq0UQ@`KV*mn};W6Rwpe?DQt@|WR-`|&ra2iK7*H>r=fzk!S5vsESCj&wuOPx z35o~VZ~`>3L<~W|1F z*d;;!U{?U7tAadxurPvnNxEwZ0v|A~`ZO&_{%1!R0HK1(szRpYVamnPtH|TAjAsz; z_Z9^K*G|R_&c;%jNB)};@tJYXUzM9#R~44FqrUT{?UFBeXKCr`OBKto&HQ$*5Wk;Q zHUNQm0{)lhF3xh}?+@0<%?}Ii5%D$Bl;5#}BDX)J=Cfx?pr&b{jLKn+;HTuLpj`u3 zc1q6wWt34}m}ccOxx%`y9TD`^Rz%dK^_z+jDibQUZtBh1g*MtBr;dMxCYYf5`6tLf zud~7bxP=IS_h_SJL;nuz_IZI@XB;+g3y}ZX2i>!*f{Om<1U=9RN*|FvZ~rzGQ33g1 zU_mi}F@OaMZ$Z{@{r*P&f)>bDBoJhX2r?N#hwGUE9h~pql8+oz4+i+-MgnTi|C*X? z4iyEx(t-rtPTYT79{4`UR0PW0+~TA07(k}}%0k59Ve-u)+fJz-WwBJLKl4jco4=T` zG?bGhTYM|J0Tw?>M zT;~+(CK}&fTG_p7-4YMtKsgLi1=mVpUT6&ohcK2nU$T)!3(3teJnaLI|8iZVZI-MA_TBJ=0hf0X{%B)=(J3$~NNGHAJ#cd;y&sq}o5z>f% zDpqim|L#nMj!KE{c=lEld))0XI5g70?f$DuKC4S^=D@#mg~?XteFHoQk9QW%(O9gD zH+R~stwa~@f<6Yb8E@_LLa+Xfe99H;rz;z8fjB~W<+GGMWdQ=D(TK!4UP{Sug(Td& zxh&TmiX7vGXr%oQQIhKmp2-k#zj47Emua_fjn6h7>JOe&)l(E`2rU*Vj=mkBtN4BF z&FCZQ@f0<#xk_Hr4bXVzVj&|LG6@2N3*Mv$4#nZ8H*h5VV9|{Dh5#}Al7f`JI2CEp zk2m6ED}ccP?BsW7XPChRwpqd$W5*D|5WyGl!Dj2LmtITRi;MXZ9bKo($ieM>F>Qhq zZ!YT=C9lH+;SY~HNw<|Vp@&;vojbFf`wJrmLMsy-%P#G^HE=Ck7o3z!4#F~ItqGIN z_}Hama2v@8_zMMo^~9B9BB$BvgcE4wjeh%59fZ&Pky<3ZiHBr>9)tf*|Hm;(@6S>t zZw!$iYZul=>S14XohqA);{L^J-beO43no&4^4$BE_P6$p^`$ zIc48e2zDa$3NjHaClge>_0-n{V?Y{_Q8)=L=}0*J430yj&3nsP+Z+zae0dPY`7_!H zI=Ans&2r~C=n3}bNd*x@7B*k?N&V;ip4Q&R%|=PsrEv~5#JhAsSyC}($YoLO+JAkd=Cs1ZacnBxRP!p zPqgiEY{*}^1MA=d@Zd+L3YgPG-4oFD*HVJ?OBydMXbLGBRuG-8_^CV*{i;LmzL zMnbFC<{rpl?1MUi8lVQQKo;)jg| zPh{4-i;VNGk;P%YbMxx^qz7Bz80CEB)BZ26i#%qMFi)J-kp?Eoiv!`OI!PK?X#<{N zl)64cjP&sMGIog)TL8^iC4i;1L;mBkLuy7(?EP%Z?Acm}0#MN)=}uMg{r!I=j4fK} z&wN!bhY8TlFHq3}N)Ns@RvHH5z5d^J1ASY6yVP|G{c1sA)*Toc7($t)VoBAq=HAFg zxUTTyC*j&WsV)Am$bea0+LfR3Jr;g@)3s>TF4<1sYR5S(ORMBPj@^uQFMLVg06?}F zQLZ^`H>?j47A(<1X@+ZTOZr7^2uFnAiLaxwY{@@WGa!NA4q+`76;%bTCpcZOLY|HK5ty z;eTLBx1Tk!=gywFo3M{|j4~ZA$U)8S(=%YEMo!LX#u5I}(J1Lgx(2>F|w2TI_2Hg0>exZIA( zFsAw;O>X$EP-?n2>cCtcW_%o&hyyL5yRhGC(TCGR69xK@4XW#peQrZQ< zwR4Suv4&B-8R6PP%RKyVu5jJ@vyj)_)#cm9_Y2|!t1cJhw@&$W(a6(ul0P0^q91UA zFb2qy`Q}D~F1EXQc*%8WBgL$hyCJb}hD?gyxd^!{H*jjs@Vz4u7(2Jn zoSopwgC3yOc%@=KtA{AU?<9El!%-2+RI7u6gtA4^&%m{5lpJCbK>3e-zUO+_jb^!x zm)w!A4$Qo^EJ%A$Wss3OkbrW*ckEybzH(Gs$_Ch&b?uVp^Q}^zpXg2qZ=SpQ!`oX> zG_hg((IP0p14sjRH5IWF?3&t2AxEfUSRkw*j9(1*3a%WT$n7$;(1rH|z<`A#9mV1LQ+XJ5$4E9*tk$f%dddT8k z4lMa)<+54gy8&rkxl3$B{^4$D=B#50x8@*2*fq@Db(E}TvF(2|VakX8$iHxYaLr`I zJu$c{Qh)c%xyxcKg=Gv(CDKpsCJdT4w?LF0y{bUePu7qj)VF&kt;TKzai2 z;9ms}YcuY}I`-?QF*pE;!KVF>%Z*8HnjF^MoF?<1Eb4{JC)zi@tMgjkHf>KvXKt1; z(f8jt*tSF9Rha00UD{r8L!o|zz5X~xbKG_pU__it9ib|cmx6bdPr`>XWkh>a1A$+q zT>h@LhR^Wggiz;;c1Fkx*bO9zL2o&BnT}c{DA(5>IFe7G3md zeQAC}x&IU5kL zFp^NMQ_e&M9)IbBPcbFSZ80TD;rpkR@H)14Ec$A@8Q!ZEC4?6R>>L4UVktu6#-Is4 zIkLHn5tXANzZh_k{2vv~|CBQSL!`V1`wzAF-tXa2zjyvEX@>0jFGbChw6PK@Dz*Lp z)GojIy;@guJ^i!pIm#(Hj`&eBisw*v8POZ1S44?%8tR)Pi{` zltj`nCe8!Pd4cELPx}-Qq-okMMsl+P)%(qho9>@$kVQz{tu&r*n`fg`{rjT2wjO!k zM{B~HfAIA@yVjTWo=qno`AVp~%D*iB=4WE*2U_VOn8f z@@P3Zwk&JJF~jdB2u;lwRH*Kjl!up%H#~&;Q<@6ut6t?;q_gDnQ^ir!NMs!YH?#(n z23;BkcTDzuT%2A$RuqI`zq5h1=)M{`66ZTy+l9 zK*G%xYSTucC=a)zjB%%mJ0GDi?_>I&+9XkZmQm8YNQ8q~<=EvBJYG!Rg~O!_4Q`Ej zNQOX@K$FpZtuXa)Qo*f;?&%>biLIr1mdR`;SZVn@!!W`+#q|V5-$Z=BJJHFaaW_Bz z$-&I48e4%FJPRL9JlnZOoeho{x06aPKeLTE98&kG$yzT=f~k98LF4A+=8r6?#L3Nh z7{nh~f?bxE!@hgWf%}W5o-~nK8xH5kQN!^xCtp$MGvw{l_fjayP%Gl46paxN)2T*% ziFUc*+dW?!46k8rNf1rP}<(2ipl} zGCqp`hzE0~bZ**pOU$)w=51nKP7{#Cgc8cI%uu5$<;~>>bQuIB+H|NS%gNNKxnH>1 zL_ze>%&9`xoKQ!@b3LBKrS-hCJA>wzd6#XNUrHFFCYeyeZ_*OxT{Na2ywcg;0Ja$7|G4&fUiVb8;-nm zDPvpe*Av7Zaz|P#f$UDLU&B?!po?d8ImVj_?I_4Z&G%>2%7!Jk%@%iC1sIW&#GDlk zzc%7NC4@zs65o+5jR*;H+&w`=m|?o?kl^NYI!?&7o2 zu&fETw}Vw&=V{tQ66MBZt5)aFJ+qP|UH*U}KzVA8T`Odu& zH!5OfRqo2nirTez)XMeC|9UeKGb_~o4Mr?4>0(%y>8Pz*nz}1r@^HtDx1M#Rx^<|! zHswasaATw?JTc---SG{eUY;Q_(|~nu`X}j_e=KHkRDT$6Rh8l+pTRV`z%;Lgw`OLJ zntV<`TNcCftaMV4ho&qj+$~0P`D(6SRdPpC&Z9w<`q(OU*{q86^~u`4+UrzF#aM}c zzdn((?4vIGx0aBadS1+c-D9Rl0SqfiBF;*P(G?^+&SaaupaT~6uV6d9jTkW0b5Sqp z(rT&elNWz%B-a-oqnqTmZt+X^d2ZTFoXhv^kV`s2lM&DFW}J8Vd9FplI7s&@(;6nN z)Z+51Vl&RltcmuZtP~q^#a2rgQ_eXX%qDrkksZQaRt2fSdbvUc7;I*oJAsX(Q_G7M z#s*Tng{M171>c>SBK=YEINShS`kV^E+LrQ>+=Ma+cUD+FGuaO^bN5A&^-yP}d#PpgUMu&Wh7fIP+{>-UT8DnLE$96p`!R^Me19?*`@6O#MI*sDvF_xqW1NxFM?j@BVams%0MG`mF7`7VEM=#9Oy)jf^ zQ%&FBqWts@@TW#~5q(N#`P#l$^Kx~GjVs5d+OjT1y0yI2&|b2+!TPfLsX0bShZ_BVY%A!U!CSgq_6!w@oLX3mmC_DR{phuBlRsZ}_Q| zYMG=Sp&!6Pav2Sh3;Bnd6+-cdxp2pPQ}N`Xz4|fT`ciOzS2cI~_UsT1(2DWVMzUsDJQXD8niwSw)Qs#w%3b~el_h3viu4El5u{2A}Y z_YDt`i@=TV+K-e=FP+lPS97M^uq*CW(oz~^E4RRau)vbl57uKj{?71iICIPHY7!yv z4)h3e^2)9)apTS7WkSj^LACm>YvqG{58sr><`Dmfwbidam$gp3v9)xmCYrR@;k4_J zH3;%;OV-B*9@F;H)Fi6>aMN?mFgXv0@;(&`Gw&7fN|SeKA)D_|zomI4CCF%m?2(_Y zEU1-)l~I0c2y(k{zkOlwY`8VqPNCiw284A&;r>v5GW1CtJ zERoWQcVn4=s;aNd46kSPTo!RPFI`kf@3EJw%I}Y%sxo+}9o*Fn9m|G2<}k|+?wzs+ zM;hy-wAyK&<717*;IR3XqBVG&#yyL8JZ?eR?OxS$)y@&ibh!E4n*ENbMeIn5NebEw zn^Gp#c?dJ5T6tEg*4r|w^7Z$RFBK1DJ{dyDh8)-3{H zf|MNI6?*@dAgy~t%l_b?RtkO2cPx+Dy*SB_Os(6YR%LRPYV4VsHS0CXE}K+vtKtXx z59zJQX27bCzLkD8_G0rmM+1%j_`=P0kIxX0$0PmZPhXr@#oM(h^d0#jT{}wdH}TpqLBo zbDx#pQGyPb&1!bF3$4opPQ(XoY{>C^c=6i?2wMX@Nsb3eT63(pNe&NLBU|IWx*G4y zomN$kmiKipqr>5Jbg*N%0Dx=Cl@0bV9~Rq-HI(?X5^<9-oh*3DASgkQ5ekHo?a@J= z6x?Wk?*Et3@km?NqPm)UZ0dc^)f+e8IXrvtqGU2H)4+8dLX`$2DvKiU#K0ppqGLSD zmV=$IfC$b9M%h!e_&d<6Wyrxp9O%`siRvt#_*^o)i&&{IGL{vW1B@dxCc zR!U1OE~DiB@2Qe;4>iMLv+g%Urm2ngy4z8l^-9MDI-eQ$Dvvjr@SIlP?J@WXmz46D znm+fDMWT+-9_{psVW-FOVlAGq=NZBnLy$d$S0w@bgcW+f3+R_|<2y>lu>JCg>1!nC+-e|e0opZ6yxQw5Dq)swt3oqp4dbhCv!{dlmh~KAdrhx5e5{@(TzkE*l~(tgd0VF$ zMb<)Vt{w==xHU9?ANAPe%KLLACK9{7ENVyg*DlwZ zM8P;sjecnkqimRIh}!=e@1I`i*e;%upV+&%T#BvKX6ZWCDK07%Wiqy5Fl4o+Y~65a zgKq%C{!NDLU-`V4*5rD9Ou>O;a?0=NwlW>P;Suf1ud!5;|YE?2c#zR|4Wp2jQ zEIDMCT+%q_U^uXBXm&sJ=yUObegge>QuY6`)9 z^%WnN#|O$HCMg5QuEGcA2_8-T2Yh7pJb}>|-pZ(%f+kC;eUYLIBSv3SF5jWaPm~4u zSYtUkL3L&*b8b@_I6+{uyb82G`m-^!71oxjXQlM|xe?!#fq*n_{s*WZW1|R9OpUcF%bY&;< z5O#GbKRn}8F&8L(V?78ywE=qPyP#;TEv>Xmn)HwG{gW&y9@R}uqMr2zLkB1APb99M z5XQFZ3CF4kU7#nPn$W&n2S+2kQ3;~#s-(;L3?)S`OEZD*mB|*4O34&?8;#cDs~6E? zdXAR~r28Cqh1A%LQS$r9`|byrgKyo6@+61@sn7Ah#E`;?&QB4U(7)G%_btP8W>;bk z`eYFMzhAMwdAPzEg0Y)`s>bL`6$KiFNE>9!o`TEC%?!K7R|gi0Vpu4|*d>Gt`~*$W zP|)RtN^D{WPn!BHx+Vfg?G2#ba?aqVuuBjjv49~n`d${78wQid?E{3Ol-D0d93*%c zY|={?6JXI!TTXVDncs-*Y~s-ob9#5UG-k__Rg^Zn;u+XQ>@(px=Jj$?abvwVx9@(7 z@Y-t0*E)A;ECQ1=sl$zIxLVyr}_WwDWeV4&H5 zHe<8HF^y`&*~X;Ofv~+@QF?|&9_dCv95ohVw=i;PZC2!(y}4C#X4EV-P9ScEcJ6I%?H+gcP+HlEx~M_}tV#6_HZge!;P#>0fP-^vc`a?k#uS<(RsJT-y1UGw>>`rRPC z_PL4Eoo%|_>u|H<=Z48A#y`Gj7W@<7c{@al=0yP-PfLi=Whu-bF$w*4sob~J(&A>@(4jp6vrF!>tT`sCxHGUv&qWkZbHN^(ntMp($DifHe~ z2zJ6v-pSzUmyJmP7}NbETf1no?^;4dIMSZEBCd{(h<~fzql<+cz2E9}Sp#>YsI7O5 zuhd*&?E`36oRy4>X9LG`s6LNJ`mCKhKXNOKHIhxu+UTS>F(C$i%;Dpxt79*h&q!|_ zJ~SZ{gZm3Wh;9a9hg zJUAqbCsvMX!pn`oE!~CwCMw~c;>Ezk9N%{wYA)STi;Cx~c)`*u%%OfGJpDJD4z~r= zrIbNahCH(9)<_X6@;*Xev!#pw<6oM^f7k*co7dz9ong8qacgMDDp7tkoS}^L35BUM zuGa4?kQqYl0h3h%6;0f~T$I50qHNn|8!w=6~!fO!GGjP3H)#5-)?%xAo+gr7TC9FURu_BVI z0z6~~26-#C0WLuI2)OsGKsah&f(1hmPX(xN443BAVfB z@Z5y4x?kyZj)7_pDQY299`C?xd|Jem=%N#PG#L;J1YQQD+@n@)?6bX!Cp0qQ8p?mX z5YLV}bKs;_bACtC;c@ZGBlB9kZvAeJQ=Y;rj-91K-g#T=?kQyJ zeRf=aga8Z7lk(6^85~pbk}&4as@jxNA{b$KCtl0ZMsr~~XUZucou3Z;N)cuKxa!-DNLT^s(j^rvtilks#mXuc>uL~s? zC&&cvRsS!u0)aTWSdQ?|vE0}Gmv-ne7?i2M9ok>>*z61uR0oJ76hrv0x~~tYh2{R$ z032~rK!dF?76uv!x0%He0( z*7&c)N9QH5i!2v9CIfo(pDA~xc$lQt-7uMmNfgL1V{(RQ$W=`xh2AfJAZ9fPD#8ED zSOb|`cf11qb8HM`P7}8nAmdk$CT8jX*Tia?@@cdoUrh?nejoOW^M?*U?{ch#LFf;{zZ3a~UZ&cn(fl?V(v6w|EAj^f2wA|DL^5EL5gccew)@yNrbdDmP@ugv^Sq- z$>red>?VO@zG=B{Y1~8P;;H2r5N|a*-OciC!WxvW zP`U!?&R#4S&FpiTW_?;Tz?{r&U*f!r?R--8KxEi@rw*|xW$4Ud89&uHHLZK$#RYjr z=G|Vgf<*P1p)mf(GPrfssDf$ zY1z14?a<4o^ft&s+;gaGfi!1O+}`Lcsk6zDbhj5P1IQL*&QMeUC(&AgwE8z6oL=gfahp=ZmLr zu(9VDgS^Y0@YzI3fYwkSgl8bBgc@pNCUjAh<)tjPywSK#u4yYI27dO6Co(Y>+o`*| zDEE31Z3;)PP`+Q}wx6GOT=lpN!|$yW;D@82L)Sq5t2PzOO|Z^7*iH&Hx`*KK$*V61 zGW;3YwZFc-5pEYLPxfo30n?r}D$Yqd%uu$6yIrb(={0so4ES4osYr2AOxN-jglnt5 zo=a-EdE=A@iyBXka$TB(p?-zN2TnF6}HX4c~ruyX=7g5g65of!B(U6+`D7@qXVZ{b|0 z@g-oTx8b{SaTa8RKG}Z;L?4BFyk(0yFBDE1snA6|{3dv59Pg4G)#+ZZIjO6W@A zJR<8<`5kHgfSIL506io=38vt?HFoD|qsZy_o{uM3c>E5nKpVkT_st*=hGAyRSuXLpfV}X4^C)BEAJEZ?WpflkwrfG zWPczX&t_7`Y+4#|rpYxQme|FBA1veJLUrqdMC@+lxyEs4Rmch6-bhhmB`-A>`Ayzo zg6nVW(b> z$3(@&)&|;AQPDvyA|n*&BJlke1*@3 zlh7UUL15nVUcNfq9eRz#|ASPhL-z^u0r{N%QgGgLRGtpj>s(@xNC1&%L{Y~EZ`~AJ zzFM^9R{)d@#S>9&d$*YEERttnNGG~Ix_~Z}x9msF(k!dX17CT$6pbZ?oPQ=%=8M3+ z=l#r8>GR0JL4j@%XiW4N5r@+J6PSEwKb~M-Ojx(o9Zu+1#*W3As{yST!K;as&rSV% zNt~QaxfoECxR0yV;V)^*EkDokBk&p9ydW<*Wb#S+9Mt4do!Nf+8*MJdZ zfENNPSZ6%8o;kuhMHSk>0Fwml z0pwJntVTcpx|1DnKDw<3aC}HpT;T!W zeD$~+9EL9APIwwz>WVI34gC{}y{go8`txE?q~j@ZNGb$}<1nhoQ4ZIUjWYk7Fg~;;hDaO=b_SSboG=xuuK;)>m$8q$ zDw!66o5+dJzQ3r10k&|cD3;z4KE4+X57Iy{(9CK6)T8h0KIt4GQ- znK!+k?d&(60Sj#ivU^-Q&ulh(r-Ft)5e5F%1!I5x&Klo}d2qt6uGg8#$b9PZ@yM4)?dq zH!B_15B7k%E60-E=4$MtzDvE-ldJFCKao#5ZM<+oHq<@@dDn|`oNqg(qgtzak#G1! zFmjUC<5bDpn(~r1-93DBsuFe>83J*#zQp_x@O@r6afvrvS&{8*{aNYm)Br}8xgtZb%L$T_ zCJ`EgQkSSJCp7Uas8JXdbcTIlOjci&E$Eqbez)-wI?_6`xug+(^8SkDobSpKdjpJu zOw2DEH9Yggq35Kguzmdd0@AO8crlx{m4gbfZ=yQ11HZBb*kQ zHHXLUBdZoT16^1a;g1V7vi3i94ihi&>+U5hA_B|)|N5W45*u{_Q*?E_B`a`#G;P~< z{1@QIR_$YdR_(GY^5_vrJ?Rgx4Kp7gov+@{D~g}on%6}*oW%Eqe+Y=VR}t)98$r!_ z%6J)y>x=`f=zhGiuGn-%13IeQ*sdac@ZGJI{<3tw?p$)kpJ5|= zn^y+fywWC*aAET;y{5>(fHbR#PIn9Lhu@b?HV_8%3+=1%Nkz`u(KfFvT_sG;vZj~W zmLTbMM~i(G^K%ty#j*n0fUXA^iIA@q{?q`$Gim+H+-8I%vsg_=Zb#uOcz*oYZ#e{a zRBzg2J!Zs=99Wd_X)dl255-%6TuAnDU7z?#A`*{K+=I!9Px)P22lYvbH#$~?aGWxO z_6H#4b3RmAGd6|Mw*APovTz&`UMb7dXld5>42vct+S!o^x`3Dn;;=J)1E#o4@pBg@ z3BWOD%e_dzn?8o?1no4BntoV3Yj8RH@N?>bZa?3Vf)9RZoxBJo`Cwu4y5jh=z#vE! z!Xk!V1Aa5Ii<6&yK2NuV>wQnG{gT(g2txB2jp0cOzv?z@%p!Vs#6Lbt1?XQdMeSxA zA!ZZ5T@pEKq7CHFCjDU-Bo+vrUA+zvnx`>G^J2lNG|&gGq=yG6{fk+BAD+k_0)E?}{)*J1i*=I8ayWBWB zmq|}??5WM&o^HMEp?R_4L&At=b!=X$z*jqJ9FW2qXXwtq^r!^Z1%Vs;Wk3L5?!Xw_ zG=0pMbn9Rubw#sj1+rz1JPpXeIuNWd7kXZFkLQ8J7G68)|L_LvdBL-||HO4>e-_A5 zG5yiH4Ud9E82hk#G$L|0TPx9dtzBs|9_uWfC~TAb!28y=pq}`7a9YrfLz!i}hEDTR|zGjPu zbX^}fpmZmw0D=^W+`mwsPdmqhQ0QA|^8suG4*nvrL+y1t#VwZ*g5%iGw`s&i{)DnP zIfGnHLcCHj#a>X|<{(U1f%tqY$7`LI*(OL^_Gq1b&PeTVWEj zkEizNOJsE(eONWCg}1Kc1A3kUuYB`5eRqIN zoT-=jEm+snyg%|*9J@TY@1E@EW>$F9$-@l*M>7!b88>eK#M2wT$%@9#PU@<;ptnVI zrh9x}O)hXLt;SZ=)mlPzUUA+Fk6FuDF4Mm!PB*$@-4gh*d1CMT&Ql6t!_+N-|U>#Av_pjT^lpy?sVe1%BiaMd0&3s z>B1@>^3YD>kj7xQwJ4gr&PEESb5?-ec|I+tiX34_pr8&L6`cCUc1u~rsHXu2UK0H> zn)dykMLO72120Uc+8FI4MTHe!lNgaSX6qCi!|ZX~jV$QAY5t1nq>u)+QQ(d|tJKGm zEv(JEx5@xD~H!H~r0hSCO>hI4}XgVTL34aXp>bHCQUW?BSS3YVxLacn2& z!+cdbqeWV2A({|zrcHU=5v3uHqSEEh#b{0%^|l#}v!;{{J8l&4j0QH3V%Joz`xG_b zO2O3f!HsBo%q_Xp7bo2>`k%kZV$ISrz6}3dsn|GAwK&aYBV6d9V@hCVX`#Tj%yYaS zu*i^(t4SyQ+M3;MELd%Z-;>4_V2H0jls=R2Sms<_ax5~(5kX^XMg#wgN0d2su3DS7 z1=O5!W2_$K!K`?k#^k)1=1a=aW+^XOPp~1X*T1YKu*dH|n-9=5&~&%n|J&wbLa%!@ zUM-IGXe+k9=FLyVlPTI1u<9C>J=_|397fwAal4 zX=NHqedwM(2-|$ekkJaYKB$^t1tgEY*rOeVt&H#{BR+~Srz>Gb1mdOzs59O!~ z9?wK)y)n$c^V3jKT9YTdaPGZux~J5BR}$q;=I8%ryg*R+km+0s44E7JM`JidoKvE% z(U`ETU^~vAibYPCCO2pVc7}g|!FuJ!)D`n4m)qo`R2Xx9Lk05zqAs=23h_;kAO zG|%+3#$(rV7LVJR+qR0OG4!TiR{FI;%`esq@l)bvE3$vQROZEV9`xmE719tLzh-)3 z!MSBKpw^YZrLkq+vm=XrwE&g#EAVt+GnIQzV~PBJy5maVZA-lqTk^*B5^8@-ar7HZ z^XH*d&g0)G79Izfl0xxC;|1HajqN;vJ3G4(xK=G(3l|%0)$&Jni$OSoR&6&b?7vL` zr_vNErvdW2ixk*u_H<*F5iqxKgj5uFbtx_tEEg(a&T*U`&g+!^a0Ra%gG`d#XEO+D z=M!JBKrVXz+DPQiNExv;?%STEPDqw1hngX%h;GP2t5`W43S^rU?V$N8l6wg>Ct}rD61%EMcBGfRYN9?lw4Otl`DgMDa^sG`h0pV42em>{^w4Vu-{#nLREFXM6=m^G=JPT7^H9e_D)lTBA)uFiR=cgL!sH`t zE8$HZXwV#^>mEB;m{gt3f^9Ff1|0)0xyHW#pmaJi=X1q7o&?=+&*emjiv`k@U9bRd z#QRU2m7p2y|9Zau>+$XRS3?(&7;qd|3^*K}fdBD8V@+p4w%+l%W^V{$Ivx36a!qHM zwiy2(gZ)z}nFRdL$WBMVH`R!||30zgKb8M9J91b0lYOqLGDa zMXJ1ctDSW&{lMvqg2w6q?&pD4ycjv{|+ND<{VTwKK;sCboP>`c+w1a|^#qaku0W|M{+ZDNFms=Qe8$7rFVs z%a;WXUnLiYA=?)d4>Sm$BdCowKHC9xiE*0{l@7l5PPqliZ|Xv96v>~JNBVH?)9KKQ zlMu-FRdet3^7KK zG(w;yhS-Z}OPhs(A$yjf=*r`uL-v>ol@Z@^umySc>DxKfjy#UIl?V~GCw`0oD->vW zL6`%U$J7%~2dn234_G^b8~!y9X@@MJj$zE0*6fyluPKMFiZ0np|2({t70+xp;#!=g zf}TQYUR@IAlv-K434Hi=>AiKpX^$fSst3scCHkh*fV;^|d$VHPcUnrPfB2Y2=Tf}Vw%X+TydUwIh9C1V!3@Dw+mX6V z-sxgKLE+oOOxkGRK|`Pi={*Vb`Dhl8`W&}h{=QwP(_hqn^GF}aTIM-+U~d$nvx#06 zs7~s~xJ-%-J0c2vqCy@+sEE46mgE~>7xl?zEB>TZcjr7et+b&MZbF5pDN`>mxB^s) zD`zn8;h5j`9^dG$9ahVrsVHY_a-BN)U-I3bQnKU}q^=eRypWE}{7AH#&JN^4JZjv1 z!$P<`O(27PB%4s_LO=5v+tuI>py}+XkMiV*oIUS^hgQ@{@w;$jE)&E}lwAB+{k5?y z1c4e+=QfYo81}j>2)$YccNKKgqOYn-I~d^aN;2Y(wMd+@?^URRsX2RBWX3LDkvkZ# z(&oz=m0yHlgn%#A-)1H9sOL(Hh3$K5zNx+MoAq|hn`3g^eN@Ve$I9$+S8F?Qxo#zr z)pOjnMR27oSR`qqI;{HVVpolB{A2+sUHPpAiTsh_OS4^>ZgDzB z%QfPtMK`R^utSE!haKL~>bW^+D-P(BcD~0S>`hjYA?y6ngvDPs)+lW(I;had91x^S zIw=k9K91xxud9b%sp8(Yn&KM1_q@75js`)tL)reOz|8$yTU99g+Rcw%Udlr1ogklQ zK?BTbPpBYC9A%9h>!QH}Mm`jHV-wmGTwH=H=R0qdKn%2D+-n!tgD=_2XIb1+KQ+*E zVx(H{B313Y{4k0EFjAgxDmV}@Gt}^~2sjWAQrKdWum@ zc19H3%M^2RJFPA1(EKc?V0Gf|Y4nJ^pw~{iB-wF1mEcug0yy0LTFVkBzKMW!C?51! z+NC%Xhp6}bWhS`VAte&bN5S9}7no+9_9K;(oviu=z`FTH$>`g0)Yb$Wqjehi9lovu ztksICt4YPZx~a$)smw$E`X30r?7%6kxyTcKYRstoQdL;MCfdftxBf_mI1T&F`A0EU zj-R#=*OYC@mvl{$1U+)}9RI)3^CPDGsk?I9yYdTDFLZXn15{@6rMjc6Dy(mhOe+%i zdWouOeQ`8Y<#KPrhLc#LQv!~@dii9A#E(!99ts}{Lm3qNDc0(|NK^K(0Pplgh2nsK z+42qze$&2w5l5PtF55`Y1H}^EFOBVx%n@Xnha7uuOwOPr)KfJ$(~M3kwVQ0cVji2m z-}~KQQ?eUD5>{d)23#_q~VgdOvjM?an2Q%H#r3y;F4gm23nwKEt?0H;lRGDwLhiV8m zIv}osz7#ZYK=&#T9n>`YVYyFiE0~C^<;_1i1=V37v>?F+(zg{;bGJShbUY`yzisv*^iiZkyZ)986Zr@Ub&37ML4!K)E+VZBBcWCjgpGZ> z=FqLNi40~{f>k5n8!@B#L{!CSr@^pZ??iV&`iSss<(Q(0#(2(^eW9|~vqArp%+1zE zDyrs}+G}3TN~Gu=u(FR&vN}MM>{F)1&u1yNpQ7v{mZHm%HrWk z#s7xVy?%Ufd)lnf{+KP$C?sVKHpE>HOehn$g^6!8n^u?R(taJqM6F-EW5iai0i5}X zw_7Eo;rt4}=o#9Clj-dRKA{Q^dZ~i6K_4em!kyY-&<&PH%<83ok z>Xp7g3w7S9HI^%VacQXqM)0zmH=dh~U+NU5QU^aR{Fhn4{>NB}$><3hP~LLU@p%>w zJJ$Y0GDg%#Yt3X*?+GcaGi4-RI;bJ^|286SCB{p3-7Gwo6`>-;bU!c!mrCY<_-@ZlRr?l1=w=6Bf{~`VB^&D&tRi; z{BKiuA~1tpAx+^Cn9r(KD0dGbY^#U-Pf>H5cL)=)nS1>0--cl5Uic^#d5ZJ*I;Hc2 zVm7DqUC#6A*uj-+PSNuaJZ4{uAT)PUNLrL=5aItFV6O6tcCT^&{e6rA7ELjWtBSox zjKy4x=q|R!dONs2oY{Z}zHA!gf_Gu$$p2TTi5k>_xUK;9;emDP)Yo)?9blrVn(RGg zD1me4aV$(K>+FXKwRse&abAy@p@Kr?MHd&+q0AbcqfK0_gKffKo<#7V3-g{9^a%h@ zU%(AT6uGTalI4+19|L(n5LK8^ApH)eJ$$o?HE&zGJHwB4WjrH_gCMh*?grB#l4=a~ zsa{XO5_{0HeKI8~L;QR>Vfk|?b~M2$-SdIOAJbHNsL7pc5RT!ztyLVv#1gi*bi_M{ zh4g#;tyZvCYhuc_>y2|KtO^#ip0r-Ob@q`PzkrkkYbN=i^`!5uP_(Y4=VC zL1;F0+3NSkFd`br)rb-Aj#)yVf-BF!P!XQv z@`X#=#{GQWCI!=Mt2eZkAXN^Ct8jLz(+|;bnA%$GN^fKaT^daoMXcq@H8{9_?3^Z9 z_;TgLwuZI#w$-+^`yT6nHL#|a+x5dJ!}GH$`<#M{s5KXZ1;qCdsW$7Sx2uP}E#u;e z6eUeKvYdi9NA`1s@!JWxweYWb@HL+9eHg1Mvt?D4y@^?)8WB~|!RQ!PXBYkbqH)>anXZ%padO$QmvoaHTmZ>rGX_9ZDzP3exkDT%6VY7&bB=0gkfn^y9oV3 zJX`-3ZiYAfgo0FeFXE{M)lzvSN{+R|G@RC6!;1&dq1nGP_G@lzE0Ig)IM9tkE|{CuY$Ul)Meag|NayC z;xEazKjLb!1Aden^2?$b)3)?<8srgP4VG8tL!%b?aENAy>{i+{x=5ejd^IFNB}l?| zwqZC200<%mEc^0EaBiKf&{z)4W@9;2<^mq{V`N7SCiB%|Je`*)oOD`2kQbjEr?4nC z-(S%>+TC;`{OP}=n4HC#A4NkK8>ZpAetbnCs!C^pd|!?&N%6@G3Ras=jx`&Ua(+px z02o)Y{D_pIVfe6H<~UI3#jYmY&{|&0-mJzgwK@TszAuWl)Ndnho~TWstSOH$z`!8N zO2yJZ{xT^3$-=TTP$Yw#!wd_O4Py0H=d)C9tc~FskBvP{f>ZI=r_)2qL=U1_(ZZ^g zJju}=x(O5$2RaEv-NJs6KFx(dig(To#UKJ>p)Zkc00UD{wS50*W18mR-bS;VD06kb~us z^UE}J&oDtqGV=E5M37_JHt|@w1(1d3l;d6!v}+pf^`ppij5|d%dm=*agXMc(Y-}MU zYG;2YmP>Wo!X*o5nK_{{$&L63pg?JJD64H0_S96APLo|x64$@0a=je=nIOshX=_T9 z#R$(^>rE~2`i}EL@%)F~6X}!v=K#e(%JnQ?9);k`Th1i5AmHGj zT&NX$=V%^DJ@L6^9}V?!`O3-gnt6!lH;B>KB}{%_v}}g}_5%d_q1ixfRJUEY?L^qH z=q>Ft!+;>yL2Z^GywtRm2#b|Ad_Qc|K;A@`)fU}*jWlw+Qb|*+sM&W;Bep13{ z_18HP$8Y#!sfvX-d1Bw9(BY~IL*BA2(UXMNL7jC`11{rqH>XwIOovA7Kg2Z&iqonu zhEPM7{E$1II&1Gf{oV;%6!XI4CU>2?%^%wr_!#=MwZCkYV6@&yd|4^^?!qNG?=tRu zSRm7ul1A>yyawlZky4~?QEh^4RP{W`N`1MUiG98hVUljmxxTy=E24A!o84D}dqL5W zE9C~VvGQ=vImdXfOKdai`4e^uBr2k z71n&MlZl1x#m^i}`sshM@TR*VWCu{J?i4~yc4d5cH-UWa8IW*1pDDeOz@WXo{RCBO za02>$yx*Cj{+osG{PgP)`U!liH3bDUM!yS*LJxPFv_cty7L|40m~>bGop@2E{uVrx zsTN;mLe$xh%Rp02tC!$8?udG}LXV0!#c6BBn$c34q*kT5y*~T-il)QNDvQ9K>)j+&jtoFPJ{0iFUhR= zy)oJo#JfXS^f5m_i=imwO4kp*$CM2LmM48;kV~L-U@IXL=a1)sqYJ(_Wq1<0kBn-i znRlJ^`xLI$Sw>}zhCU_kdcaMW(`FbXBwki^w-g%PKJby(2g8Lzm=jCOptdrb2g`VC z4jRPWfz^qP%@LzWMl4I4(k71Gb-HN3N#Ow`?;w zzsE^)eR|7y*j{a=oylt;qNp{ooHteW>FVKE&4xzmtYeX1CEhP{%!7rdOG<#t@64un z{$1!(97=l>ibS;&c1EN^FSECd!*KDL%(?41dijxE>wApQzm-QUBE#p#E}EHY+&PQ% zJ(R{-Kd!{_+MPo!NZ=+eG|vc2ly2;7Mfl}>P8Ov(>>1on;>)dmq!3&!5~7<(0>~rm zYZs93n;Hs6$6J~SnJ*%4*cejwf6-gpuQ>}s{6yzXo(6WNw))epOMg&Kl09p5QJq3K`aQ*OBN5*7L3 z9r;#>#xQe4R|rk*JJvc?p_^B_7|TUdXS0s4McQ`7;Vv2wJGGOozKLnmVdv~tb!v2z6ZvT*6Zvxkz_dRqh{#dtf1u#BaI+KuHRw+Gnu29uC z6wTvf$^e%|$C?*j-$xpQ>f^bT`&CqdOK?FLZcKfFq>>_)yz&^PeV^aRS-$KlJ=iPe zV`=~vmx}?^uJ8wM8Qt~BWpKg+TZs#AiLStd2t!?n`0Zcd5w*%!dPCIaAGFF=$s!_J z`ci)!x=-ZxtBJ%DLIF<8pPDp;v<~vj*ua);7xJe5K9Zj+bvC8O#ml3&zYbJXxs<3n ztgl#U*4x@wq-ZX%IyS_Z5sY0Z7L=bdl1~XDuhtGTX}Z z0D6S1;q`O-r(ipH@3F@NazKCMe0IIQ+TQBv3iJ)V>$(v<>}+8_)F@TXEV}$jBbH@s zPNV4^l=DeTKSf;1=xBN1$3)Z;3;FPz?y;znf2yMh?z%jp(L2s4Q?R zm#nLO>4$W+jGp~~+7JfM%ljJnyZ^%s_wv)tvGS7*eZz)g-;`Y1$Ybm5l%M+w-AhM1 zpswbn{i5yXyOw0K^tQJ&*5ZYz&%Vaq;{bHd2ZvuMY_erEx0!$94 zB$%|=|K%IWgy^L8wRkhuuRAi<%Tg+VWZP*t5Twrj>>m{bse{TQp$oav*NNLb6+eNL z-)F+7L_f1ziTa>yt)+Rh&CC%5CO`qowgKM8pyi490?fb{prJtTz)?PNeQ)qtYcY2V zz1p#x;aVchD794OPN4;goU~8U*n%LHtZ=TX;QkVc0M8iL7RZ}R%Aq#c+VzuxHawqG zrlue3!V;+yjE1R}!dkdLY*iD>EA+S3f%m|{+PmF=zmmk<3rqvva+ko&QgioUJYIML zb@n+@^`Jat*^UPksHw)=-AKale}9Mb0A0F!C%QG9A|-UTFN}+g8yk^mZE9yWwWT-k z44g(6*h=6%Sm6|GQf_*RgC(nAK`FLeF)uCdK(}H zElzBekK5^f7OVU(2vO%{6VU+?n&6fDfOzZWFMOywmWziHk4qif#udg@A%KGHYffII zdp8LY%~oq5UI!WGP52mWsLS>k+>H*hbp+8l3}%kuK7{)G=-ZYC?-l&kZ-UG3mHNdlw~t z+o$MB(5>ezWM1db?%TVsH&u*h51H-_2Y*{~ZKP1bP{FFc$Z==Asw+xeg8+KMJUd;L zX-l*(jr>C;#yV^2m|*EdO%!N=5F@6!uCM~}C0)kh8Ukwqi;3w0ls%PxXU{wnSu{H> zLIRI{gOmF)QXXgoF)eqrIsrGWw@{NCCkwCM|3lkb2elQo>*7f9qQ#x!?#12Ry;yNC z?oM%ccXyZKUfkWixDzaJ(|&T!_mjDQoO|b;Sz)iNO)^Z#Ui+~Zis@-=(+~|(7D6@~ zOm>t_su4diSXwxI`TMKjwIpj8n=-1)Onq8*%*8U5WnUZK`oRA3_XbE%X9iGj2FUgC zJ0cNQON;eFsw;DF2jv`3eqm`*ehh})u`mqGi?#(4D@vPtephWk8H)h-PufVQ!v75E z7?RF$o~`@Vdb}59*VW04)#<>1riMV>$g|{UVC#oka0;7oXzb8D!E78Ct5cA%LR967 zH?qE6W5m3GI4%(Cmc8{6E~-%`$$-pq#MV05vHBDqLxuOG(Wh%Du>JP+WbM`R1*fJ6 z0cJ&A$CwQOi3mL*r5AI?_KB*n1xH8G) zxV8aHy4+pbuDedF5s>K^FTph1SCz@#x3LCFt!o+!YbQ-{w7DQ%`+5#?jhKF`q0JWf zYmG=c0>ZB&iR4lmf$Q_WZd1L+xY40JCT_P?(-23d!0RL<`w(;8UPJz=dftgO*~_~$ zk&05zUXlLTj@Jck48Pfqlubj1VK==^alUu=N%d-DCSt?I?$RH_@qP_8zIjc@H@|#23vhHbzi3U!QZ3F)R%yY8!sG66(Ir=)I2e`dsdW7@{A0q`#8* z_LH_tXk{hCpYY}tGeD77s{B{>2hacE><<+pr63v4F$`gk9ji|^U0-m1G`VwIHDtJO zb5|&K(Snl2@1%HEYJLBym*dbY`T%y9ie)h(x1$O3u)Y6gPp=l%C>A(rxqCdTF_|Sf zK6T$QI)rid#%+McxJG6=+!Q~uTTA|6O1)iBp`U==V&}cvSr}EkbxHuAfsT(!pfz&a+=tUW3!Vyw))+i))8(9uB=IYyQD$z zuWx~5^d!xmf_!5+*&N4J7UBBc(ykR9siXMZo}{ilqvcpbtPwAnYOQ*@x@dFGjSi)1Nn0!t=ZH7Ptv|dJm27 zw^6jRpW6#1!mxe2Hoa^;hP2J5vi%8a-rei`tMCXKU&QSxlxs*eJlzcCye+Pn4ef)w zD1o-y@!YV-talID1FQx-Liy*jTS?Gsb)OMX_|JVXxIs5?n7cy52u{iC9cJoD*RCi3 zWI^cSHj?UT+`0n3{sC0Hf(%sqpC%DvRXz`ipc~*Ao_T;n(@;@KLei9qP&q-+ltL>C zfn%T-s+<{!pc%M)#f$guro2NfQ~`ahv3()SP!@s`dx?|$*@eg-m-vev+mT6Dk?_kG zIWI3&&NPB^&)$@t4;W#sJmYMFb|%y9v%-FGCp~GoC=yhqnXsc3fv}^S`E0jy!c1V} z3g4%p#}!^U|1(YK&aW)oc-8aK5L=9OM&1NB@7ET!#!Q5oP?p5}d{J)D5I=SMcd$g= z16>BDNiY*EMVH>y^_SHTqYRpbf-6n%7XI}Jvb$h%5LE47(0CPH!2c}yk6}Mm9s^;H zbS&!`iW7r)7`@dTsqQ!ZcP-SqfPE$6&jPcuINoS*Vs^0+kYaX!A%D<-7q7AsOPoT0 zF`~1$;yHsCYt;Am4}yo;`6RZ6I;n~7An$!Hy)W&p$Zof(viK0!v;W2w1UKISexv@Q zgO>h-1YTx?&;;Im$NzgUJ{Fz;kq@Qrf$4w9hg)d&Kjg!o z2hc})AKr2^_Ym=)1M%P;c}Z$~52-{F&yNrR-L>_yjQ0TzeFop|Q{A_gWwi_RCnVI6 z+xVzW4^V(Kn^v6f-U?P$#BSn-Q|Tc~NmpnqZC@)MGU4jGbizy@wyA{zM|XNz{-Nx( zVrJ?JCBh1o(J{%=z3%OYk1wWTq)U!wq)#OSHB&#!?ov#@B^$6Jwg?Wst2S$xF`NnOzXiwS~jngPUc}WTt|6G|2p4^H}-r-uf)^LI$NzP;zR4x% z{G?b8)XnsTg4JCo%+jzqpp2ua%iHkP9;#?wP%@^VKl74#nnh%aRoBNu(f2cJVNfJU zTwQl@IUqL^jTpC?PQUS(l9BRo#%5&388Jq~#0&&^6~-O7pO}jX786 zrt|*Ct-sbB-3Vl7jWOzJh+fW2nvlWf3o8&dyCIW*Bh#_*)ob+_S}ha#E8%2nnBMRi z1Ct#K;_Y0{cAd{lbO31Or#+yZRTxu7@OISsh%4-*QgbDgaN3aLEP*0po^4pKD+%e7 zCS7^Z=@0VsvQD&|1955+tO_@(M;w~fMyNjWv+Ig_5MQq5>mWxP68Uo@4X`oY0tzDR zr#GI_PHWV})lP@9Fwcn3!}cs`LL# z#hFl;t(Z7{RC;Lt+;mF0#oe5EVWJ)G!KQME*}$NY{=0-Q1<$%Pc_y!Ce!chKnoU6g zFmo_-1E&A4;$cm#aXnlji+b_+Ip4A#6L$tlVTQWO7*H~Es(_kaA(-A!#idu(WrbekspA$>ksC;?va%di-e%8v1`k1}{zmab?vb}SA z)OIhZ^yw#8iejBCSiZQT&GH!?>Ao{opU{gwB?n_;CQQiCY{8!j%DA94pbc*O)>h8>DXH2;i%0y2Qg!=$8#DR@GxL-` z{CXj3Sb6~5iYN^kRlcx!%w-O=>Ze0ioTsiURB_?%O1%{qrR0-j-DRg$Kp^#Vl-P-w zJjPI$c%EroA(iHr0wVf0MWeGUyn?s6D5?qE{56|>>olM=6}AKq^$}pSbzB39^E}dn zn{~>;m-VBa*t;X&2P(%B>^1HS5fnwf4xU?4cSafE{%kZzZ$~V^St&=G|NLi)=hq+T zl%&}&$<8@i-NH&$MDE2lp!VwjgxgNJc;TYOHH`$EGxT+2rnYi>z*2?>9=!YeKv0_p zh}4{YIZvnFej%@0&Jb-2(XJ=k!!>*JLNDXx+i?j2siDPtzI276U?2BXEG0bgqii(Pj4Y~P1 zsz30NAva)KBN&=%ok}&nl_cfcKhPGw-WgLO|@_4AjsP&PG(1E8~L=aovgJhHM z4P-l9{s@IP&|aOGErWvG>8E_6j2k5Tndn#%drAK8(8f^%3TAD%-K*xh`iPk5hESes zQ#bTL{;Cj*RoGsrgBCl+9Git>yHCtt?@NJI)@h~Tl~yk`qiDzXQG}9?Keo@8v(hD2 zRNRMON@AT$j!%e769A3&aF1ix>Z1?qv{?7$PO-mx!v)8KYkyxA=zZ!;{jT9I7r<sj7vZc~;4OBCbB^+!lqe^tzCnqQCuiLuC|k?*a#(Z1!GHmXKSvyk5%xTsckl=2l7t_vWP+5D>p)Cim0746xx0K0J@^l2-{Cx;QZggxBnC}H*d)g^J=PVk#l=Y zDhfrn+!^=n=a`JhJ+R9RnSV9e;t+8hhhyxyWr9t`3l&7k6YaT@37bUhd3kLG^SKN; z0*CsW{w;9!d!13(5fo|dBw0H93lJz0HCc8_v@|m+N7RD{su$RTTczY-)k0cYq-iCk z==^B5#cHG^`2N_>^+H}O_#Z#^P+p9PO>C50P`Kbw9> z8wo_5;p=-XfVf=y$J@Ikg`KhU>3lWydVA%Uzbj!qnoDa{2pQ=K`ni=Z=?apt!+39; z4@s45j76gJXH5|5x7aK`&fz@Fg+{p&@qhiw@#b@X(Ld)FgT)`c)%rZ0nloa)t(m6K zos$s(G)l@2X1>56fMGsk#ie3&_>l~cVNDngc`>pT zR9DoB^2VYLnXK$rBy6lrOJDMKb}KB6d{0Xiik=i>357uxSpA8uGw5vV>8dCCAYf-S zBc<%Q0}Ab)mRY@)|KE5*nL7XJ3Dx-H3H>Va#}kVA8BI*tuqZL)1oOs(uAwnUJh15W zd80LVylrt~ojUyDr4i)S8O#xXei(tL9jE)Bg%Vk9!~73JiI`=&2g*59pQVtiows-? ze|3M$V9K};evxRt6VT9*zPY#KfOkAi9*0#2OLEW_5Za$WB6-Pm z9kl{^_doN6npZsk@r6oQW|fQ(%e0%CJm@s*tG^#3M^{D${kC+PYkA_!D)Z!a1bqE8 zoynKd>0Fd;I>_RUcCz|jrJ=}j=5ngHLZod6pH@BKT`Ky*AG4Lyp6?ox8#5fN5bKTs zx+gGbM8zS9LJyH`=Na^vyY!w8#6M*0mNY{}>+FwqI68c%y5?x3Gb4XX$p{gRR%PDw z@S}0b4X0$or#{fV862M%MJgaFX1^bbF96Clt-)d)8xLX$NerS6+%wfZiB6KawBwN5 z-(`LEAQgIJiflK}rPmR_C#9}0U0qurQ+5g5|FO`;Uou5O7e(udadXXMn@2csqY;|i@s`V-S)Fc>Jn z>EV0DAm#Ms68@J*f9gA-Ic!JIj0d>pS<>;gc8n!6_@gV`@iAi0e!)z9b8L(hsM*#- zMlJyuPy_~u2nLhP)dQ^S1)4+oMtZJ}-cS!5ogx~JXb1^_JxaiU!d+bbL==AQrMQtI zbAwfKNmu$O0eSs1^cm0=WcG}&)IScCD*7<15EeA+WK!l>G+g*G~5A=zkr zH~ZW-rdd|~M#I7<0DdsWaQR7VW(<#RY4V$7nCn-%;Foi> z9iD0gy5OE~uyny8azdwZ5ZZzx0n^B3>iiV*h<8HD)6dZ6>k^iCq~MqQ|2BNuJSrDy zX$=qYp2CPRK+|GLbTPT~uq(xthr2&qk-`1V^7;3$2G+OYaS#6Ycogh!=1>+GC@APp z#t_ORVauf7cNZd1(iZr?=OA{hi(ujZo=^@tK@uUP@jECvNSHd76Xjz7BbYwehrn%Q z!QFoc=e&WDAq6#TL-inlelZhDKp`kMNbucBhzQmU{Nith(4XF1hFO=0A%5R6YoTkQ z)xZ4n^&v+8gceOQ?9uICDA{Aa0r0$SxDfVSrC;ZPkgg2X{1@R3v0fpiB5sP&4NQ2O z9H5P4?#ylSCzMg!4#}hx1*o>@5P}P0EJh!>H0t4z&pfMXiZpY;H>aeiI@7%uGb-ju z4+~Q}=}2p&Z1Fhpt_UvzHoiW^1c#suUi97f2EfIJ4gSc}l}4}91F{u8gm*V*g|~=G zW0kH{q7-*VhZ554+=fUr6vP!+?7+l`>$@`~aoCsvtY0f?DW}z^9@!~b=lfgL1yv0K zi-C`as^;g9yC&#Ao=ZsQOwgH`M}L?&6@C(l)|8$jC5__iW60w)8FH&`))$`%hLSFf zFH2lD400`v{MJ&FreVU4-p`#@;PR+s2 z`+?l&MDIn~Z$-~HdB_UpaHDUHq~XFes5idjo?UiO$!|K0+E-K*VFq`RPOz5vn~(P1 zIH|F+ZR>2RBG$)z!Dw!i0Czh!ozz8BhSmd%^CkK@+`V=QD?vU%J{}=H6Tt~s1_{fM z%I$Ho&9?1ODRs@w^&sk0utN=ut*t4X?wD$errA38#S5215$iUUSb}YnOX3&HwOD#4 zx6gtwf-u`*kyB5=Fa<}UeL9FRWM+5qR@3%{Gj!gcx6KC~6_oU@I+w=pks%*y#2mk9 z?G$o(=gvx(jSNSY$3DMaV6)L?Kjo)z6knDknQ0h4ldH)#fS(yThJ7f`17inf{fY6R~ZioP>Gk?GK0sblau@ ze#G{?DC_{`r^JyUHeoimXg2{{(2Vyvzh2O1#8Q1VZ)v{1Tjon^hAE*~R4tWB^bv_- zEe-4xXDwWCSIz&ddg$notGbbOFX%`{EBYzv?Ze+$DXVYL_1!Y^f?s;n+XAcde8gQZ zF%i=L439d)rW+F-E%TZ(&cU)?oDm>6`lse1{qKvV(rS_t_nHnL^0W3n7?S?T<;{~$ zs=qea=dwtp7wQK_&JodUbQ~=SO*&li9wM6w07jm61%9ohfFkhq*WP8nNKST0e}Hia zUMy*!e@3UKt&@-~196I0#79Rt4S^Wcz8ICt5kcG0+A`L{@$8i6XXB^(gkY($Q0Zor zlH0YDs3~EMsZ=J|MFR$QMR#Ax5E53$51M()p6C;B_dc+=___JHVNNXf2Bq{n(b%BK zfze%d*gL7<@Mw+@NU!YB2|r{Ty4anjPV}IH^Mmn&Nf^^p^FS!OWM|eVa0fK@&koYt z^`a~bk0PmicyjUhKdx+|zRx6wnE$fxwVfyfMSg=OQ z_06G^mj6)cxb4ntn$=XKj`io$UFm-QcgxLca7M`3bq2{$Bf;inL(N3DO zj-Mk=D+weze>285g@*Cz#?>22wQ3hmbu?S)gh8Gd!1d{-tOLQ9FLeB?4PwDr)&YAOb$wJ8vse|@fCYVQFqGt z?|DmUiW_w$_lTd!43CxrZi6;Ne^hu{UQVAC6t@d8w5h?W=$&ku8^R&3`vuzdcTzdo zL94J>QHZw;q6e;i($Qh5g486HJ)-Oxah9y?Py9*dtbR40@dNJrVV_<$SWUCM9~vwQ zsIG8O3}y($4SJri6+f$q`-!rOspZ$o1Ue27k@oCv6lNF*j>K*0_TUz4omt`)XR zH;$-+)lQm((c0KhM|>RTz2h?6NfN@8L;OiAf8=lS&@wYtpYVAPI%CDaxnd-_8 ze#En_a*~wXDO!pgQzgA%65`CWy*5QlfaE8j@a5X%maRX3f)$AhSqyt=05@EOUm@Ms z)x~IbkEpRJBu_wdgBny{QrD=;h5Ve=zBgOQ$5fEL`qADlc z6~QY413)5+Cc+-GBC)CzPW;wn{7UOsLv#Hwq}Q>uS162aZU2lEQ5OW3@BtMQvr2yU z>V0-R4Vsx9&k8x%UKGL-p{_?B8!c299(|eC{ufsP=M769A&j_6Fhduk*CD)qHeAg^ z5}bdnOLlFj@FsQOY-?ixNylYxtxtbjn~@>*?W}n!lcd2VA676zk&MT>&7xr_6Ap@Z z1QQq6HoU>jX|rKGsh^bJNTA;c)D})COX5C_eSpycESA)C)rPy7U|&3@>?MY57a#wA zD|`p*GS7Zilkj#{Z*?~-aR6V8D|DdXP-YE6v8;cVr|xvi8`lP-_S(fMggW9C!s5HX zgW~QinH0UcxXK~*2dSZoQ1h?pM${%uFBtG1+hL3s%xy`;a0siiBcJQ`=cPrOK$&^T z)W<3zD7Rs1%b)88h8!aBcV%HS3whycJ0VinpQ|Clx2tHj8P8~zt6Iu)(gU&Fa?+DV z2kkDqPanle*IhcZLSVd}%HOjP!`WUP&yEV-kaNZ|~d{gRUng#K}F%f7X>LBN%TR&yAm+WM!wuw({onqF;vQ>+&jv7go2O%F#Et8!yM z1ScQS)2+Mk|k)Y2w!Mm`=>S=b`9zqoc^c?Uc$Tjbkm7SM{nlnCfWqv zAup|w7zE49qn)K+#FTY2XDv;tbGRF-O;2gRoo}=YOyo!>r6^n2&3;la6X+w5E?NV0 zYBJc>sUOowqeuDi?N+<^LnZI*09Jfma*Xi{uB(@#)plsDYm;moIg$3 zcPUU}U-)T{Gwn}z@CRD&CpsCb z&@9HF339?hMD*2bUYbumzAYO=F`vYR-qEj`pY9qZ^mTP#{V1_v^v0NyLR2ybp#jhnwn+8E z`Scz2Q+xjF(r35m7Lvy@&hK-sR?KycUnGrmOnMv^{R(CY@!393RB7yrPT1^j!I?0M zdZi%F2)NM`S09OAFTj7fWH7^fHh8<=qcq?&zcIk#;SQk!J@(;VW-(s4wse3ng2lBqzpmH8LBezma1I2q9h zz~}xd@3xKOhMK?k*KqBfb#~JpuoD+Af6iuQiWFw3@ODN>f^~LyD$+xhs4Y-PxBTq~ zLc-!OQiR26Ke%2@4)Vy!7kumZc>e(eo;jtE7*0iL zNo0|%qt$$$HUFogWV72Eoh?CHLr8k-T)t4mMug<4-q1u4oG)b6>X0tICl!Ao56ldW z-|s?v@;S=|zFc=<;`%*v!Dz*~EyDXhbMfd2gpd?J)cQ;&($_lPJ3jv)VcKNWez}j; z84+Z%6Bvm?IIE1qo)eu@wS+wsVzM)3x+Ln(%+85kD1H1CjIyQt11KID8sLG>CI{P# zUE%kn7q=04J($fMZrh;0E_>|g5vgfotA!uw;|)GE*RFYhQ0Q1<(PMDLu-9AT7WOvb5<_5 zYk8240(T{cB5O@umn;rh!(Hg3zJG0nYOJBj{tD(hWUm+u{(FK_22 zP%x5^`sQ%@p`=1G4Q8Kgm95K^Hnoa~Zhu^`gRQm+@o<g~-(ebsfCkS>UK!P_jSrTcU-EQDg{?vGk$=x@`e zww3@Dj1w}+FpZ0_+U##jSZgc1_GMbmd<|L}-exV=2Cva3u-Rt18Ig@>wOMGb8JGcP zzV^`go%`>+6$V|S&01Bn4L)@hlXjtX44c%bN^fT4=LgFMSk&+i<1+G9)|T(p&*S*( z2aXFh&Dj-5Ivz;uMffEHg}ls}lmp5}hB8yw7eNck$uBaz#mU9;Tr^w<9-Dl8vF9%x z4c-M|%(3o0Tb2W=h5g-32Ve2Y6N?C$&B)}en&Y6HFQ)EkfTy!cl#XNa&l36%G11*+ z&f|&2w6M2Ty%ZPyitB(z;p>zrt}f11)O4PWgf9O~&pr5Zx2j3--T<2=@D*l5khE>} z)L!y%(dE0O%K(Yi+@Tf*LO)HTSctJh4+bZhe#?2R`9~x;PBNICSUOD!)rfj|LU8#G z1uhx6U1~LR*OSol+Txkd^gpw~<+BMct+t_0LJ2?LO@1X&lyDk84gDqy>rVJX^itY? z;deiDi2G@{{0el$BF2x_HA7HOSV9L+C-sZP#Ta_mm->?oTbuT4_AS#M8wJXqEE_fsec7;+?Pg^|L>_PhS`6zVh>f5s)!HQZMD%9mUUeExG|NLyJP&#FQ7X?(Q#sho257LLd~@>W;kS>8WRl*P!0YJ`sWXeXwPn?`r&2j9$~y`JxJ|o zaP%`5!1F!>Jb4A!w`aYJCLthYz4x?eGWVkfW8ZxIlxeO&<@Bc0jPP7yTZHxkyl>A& z=6*%gNz;FQcx#_w@HnJ+xbxKF>MC{8M$}l&@XA-&l2o}FSM%W)csVyZ7=FjMk<{bj z@pbed?2a^2-^|p@Txb7XFr8%whahaIz38mLb=E|t$)f;rODkuM8m{%+Zhirqc*^A> zVmk^v^qS5@PQMj$v&u2 zT1H{~j-fqoaLazs-iLx5hK^*`(H}N~CgO4nYq`+ANc0^_F5|;xkP6-YeG2r%e@(lG zdLMqk!r$r+O`~M>_$;L2m`)X)SVS!|t4f!R!$-U4_%#0e{2?ttjhft8T*UM)JR+Ia zUnxHgAn!qrVl2*>fuoBvq4MW?m_zOTZV}7k{mx9smtl79=36rqj7_1o<=ZTTApvtA zB}kxg??PAzYFap7@cfHleh(`U0qf8ph5)mnHUzSRP(Z*jR=-o!rzx@M#f7i0ta!E- z-4K(ZS=Qrzb%hrtX5cHG;)x&Ylw3GYa+nc=+B|1pr);G&O;SX|lWd}P_C&XB)&x`{ zH|IQsoGQgvvLKevwY}&+hoX0oNa{bZHtq1rwe4l2WE=3>%`G?C!5~smHxjP}jf8=N zvP-)O?Fc9^{)pIwdiDb_3{}%ij*Y{k#I&tGr-FJ=s0P6?l@VG#Uc$+~{j6CeQw`$! zRXPp&h+!DIbbkJL@anD>l-BOKQOFLuuo^rgf$ew>S|5EHf55x`7C1gso;o#RUAbxE2)oC&>oC3-wqCV41(VnMSzN-JH<_f5)x zBsplzGP{;^w+@}ma0sshQgz^i#-jZYr*qgUISuY-P2TRHs9=w_NdP)fb$`WTuvsIM~v`go}w&)%z%?ResK@L3BSEV(NL{# z5t{*(OXBAL8&Rr?O;zUt%`h#V-x-!UNAm|gnngXQ+tlpcLGKIvKe$4!K)}`gRteUG z0%Lhjz*m7zH|O`VcV)of_QrMzmJy?M|I#p4AfyJ|on{$YA%K^CQQ89TddO4bhTl;P zxe;7F_hkrPzhwj-T@BQGfYVrAQJZt1jtuTln&x9=Z3IOpl{Z|5Lr|Io+5J%AmkqH5 z!U8b1bh@iz|7WoERJ?O26ZkoFE_!yORT)E-Oooq}tnA(vS6!T&+;0D59@*3Gm}eaC zZY6_%H|D)wxzmw2orO$w*2OT_INe1UHXkL&br6Mk&ZLvcbXvZpztts z-Lqzk2AyH-mB9@;l5LRf9hc8Ly6B8}a!7Q$n))#@7BjB>D)w*orNvg`DhsD!u>8^3 zWA#+P7PIC$OoM6n0OXCmDwpEyjmOJS?kiG{=WWo%Gt9DnfC2*1QUP+_PjG;mIJt}H z^g|gJ6Y+zly9`gZoAgfNf(V1cL{oI;{Z>bE_Zp!$j5(*Ib)6hLMmb3*kz*yJDxl zEMs+sIUD=Kc%AHJpAD8e>Oz<3Wj`-JFP8wX(cJVOB@Ba>8^ zSxM!q8Jae)o+#wC*SO5vFiwX?`5Bmw$Q3(b^ zp;UQbf%#2maV^QH)bsKbsWV_~mBi-Ep8fg(WDC)(B3akrB`hAevO#JhpTt)Bw)s@% zQeZCi!8`sG;7hMHb|QgH`smM=Jt2U!NcTJHxCQ!!o#I9(1DdG} zzr7+Kd5xu4K;WplQdhGqtI#ORMCAe8kuU=4nO?`EdeYJ7VZ`sm!*1Q2SC$p{*yf?& zFoaI=>_cVO={Rz3(l`)EUM?A%7Nc~`K@^#2VL!H{V1i+Cd#(Mw4EIwJx5eWUsgii5 zm={t@2DnHpEEjg4`Wo20-LKx@|B>9eov}&#{&;Zr>SP@{dOF&@5V*Ohbg;1ouw$fk zE4qNDsT!7yZ453_E|jD={^>Hr_&krdjn#LpcRhAJzZSK{F~%s3x}73|6w6$!oc+zl zx|L+eU*BbhYr2(gOww|y^3%8$=9`Jj92cx0DQXr`N1gFz(T+cCJ}<9keDPQ1e6^F< z>q!Q}m9(Pcu|Po0KT@M>L9p>lclYVmf*l%~g$sT~+GS{OfEzCG06uW;z&G2#eEYgRVO z!KJmho}3s1D8goWEH>5~2@?$CK!SmVIa7|)%{TOyULTu-9EAWIeLlH8-%aDg@|AFy zt}$-iE&K-YVluBqkb9xa0~~APh85*`&<15!?p~-o>*O2Sn*{%be3g1nQH$%0D=lHr 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∓Yl<4C>&wWI&3UBITZ2+FvcI7bGSF7V8a@W@w-g~X#iFZu zE(YYmBvYsx>XN+s zg>E2N&z@P_6+}5_RG(&c)zG3b0N;q`5T&+kuQuW;Xlv~n2>)Qe<`@W zM6An8e;t~F0#ZL8LA)#@~*?y#2^HQR8TLUn0jaIG;J>i|6oR&D2hAM^8fJh=ZwrC8gk>f(f^4pKDo8a z;a?}NJG~L`W|%}3Dy3{3SQD-gikc@#V8AUUX%HGP?0!(5E|U^AEe?xXvcY}T7ko`< zqaibRAAU2NpDMoS|0f*2SIOnB{HB^Tt8*$UJVb|W3M%W9_*EOx=hqpFZ= zo0UpKU51{bW|t)H7W7!JGuW33-%2(hKW0ey|Iqf1(Uo=G)@W?osMxO96;zy5Y}>Y7 zv2EL_*jB~1ZR_r*p65O1z2EuHY3Kg9ZMN3eo@=bNlI-l3%sF}=eZ&qA0{_1S{_)%8 z)R!}k_7OiZDQmCa2>MC1YvN|azQV*S zBH`LoqvouS?v`a6f4xy7PexuS%-~A^4b@}l-!g|!o^SH|n*;eG{U02N0RF#oAT=vB z2ExNX@5)Q(xdI#)k`RUq)Km99wNpNupZj6SAx6hHdzE2Z0Yu;EOe;Se!wY#= z5xbML%|%)?2dl-;u!^*C-v67te?h8xeQrS!-g(0E zuyh^k@a$N$8+^eu zGYqgQScR%%F}1$0{-Uo~RZsmW@aPtn0iht0%Md@LLq+}KR7bF|C&~20hp4sF+yDLh zhusbKGB}oLC5=6+CK@b`O%ckqg z@N}(-hMo5B>FW&a6K$+@gdMSRJegnVXx9E`%Rl05p;~?a?_uO=#Eu8Hsucqj>a4jGNd%Qx5V$2 zO5BUg#4Jxf9s#MoQk17&{8K>!W~YyQ?d_iheG{CJMH zK#ukCmuT9=od81@%ZP*x!vJl&#>3rMS0D-ZZi&{NmpgF?Yp<6J!Q?W-l{!HaGA7RZ zLYMT{+WQKnc$kGU8(j&WODZPrDq(Vq5b4UhN;{Bl8K4Wv#4F4QcK8o9Zy7I(m2Z|1 zZ*T%R&msBGuv?poC#IVXgg#kzfg@7~RvQt{>XoE@g!W(^?}kx9oVA{n8HT5n90kigd*r^Ng%7%0g!^{$QG z#(fx)((`Q=rEQc~9iz@H^w{>s_ zCR6$Y-`JW&C5niH!f)O*0xRu)k0R{hpFG#XJkR$&8J`Occ4=-3z8ew(5-*|NUpaF7 zldXF{<4*+_)@hy6@gLLt!J%Mj{}(zj+Sh;AiM7qd|BE}HcST(7gxcEXb6pXGza zLfMkiD)BV$v>~5Y$njhycsd+@eJkYDHvNEYtWZyK)pp)colMfWIVg~o5-5%UA3H5` zP%-(S0Mz{x&sJFRy3bR&$~~U6A78XSK2=7Ucf%1g$4H&1G7Zi%KfnJe|2L}-beTW@ zS}Eggr4CubIR|qBKB3)aBh%{4W6|n9VTm>VP{F?D;81kvbXk70qKxga;x%>xTY;^0 zA9VIq)Nw6svxiq5(jl2u0{pPwXAOM~R1N#9V_kUgWpK`)1+gjYHZ&(qXZ1iMQSo}| z7YlTEY6mK6<628JaqC%Ybo@YBOw`57*kvoLJc- zuc=z2wVLE+qm+KHog9b%~Acq6| zJA{XVCx?^5N?~Nw)BVrDUnexu88@xZ7fG!i#~sn7ob=V4-mIk2o6NDh_XaygBKvrN z`#^%h;b5h(Vi1vVkZ}IYShzRFzWO^(jX2 z5Odm@@`QM@S%pCT_JHN+;jC5EYvAUj?%d5IHa>Dz?C9q8+z&^PG`ekRk z*_Uq>>TQ~iAO5o@lV?j4y~fBuCjWVHJK()C$=spcJU>u*?7r2yap8nE>5)fmM$x2m zc{Hs}m&DMEu2a;6NvdI6RMNn;Un-D<0ES9PMxRhbZ>xG;t)fPDYA|zvzO%HwUiF_E z9(Te|x5j}<{iXcSL>G*7o6T<=2c!ZAff5%FdI-Cy$Y38~2h>qm;kH}1MwQ0iDmqHr zd@KKlY5>Q1K3J=f!Ufv_e<+l)s6;3Ne5#6Hx#~^HrZTf|)13}|Nc1r>02=_PMyH+TVlbt;KMb;NQG-` zcb=2$2$tcdGyMFV@7r`TK8wyvI*E?neS31P7hSvA5iFjyM`Yv+SYpAU=faDc!9`p+ zN?Fpj(>2H)yfou>!zy5B(+;I?y7r{FF?_ zles)Q-;^B~>%07@`vLi#9~a^4+c1VKGr$wiu6U2oe*o1u@AewA(>2Qgh&$C0XWt~M zEBtL-kF^V{YL#TuTH4qc*z>)sr*BC&S1S$$v#yF+;mr0BsVEVa@idbzk8e&rU6d9c7|yKf&^q zw@e$m5yTqxp8A1DZB11MYvGk7N4%VWWGJ?ZV0WJ?ZQJa?xzXv=VXj~1v{cT#S{zM* z6j5HN0;)V33i=OW%d;HNNol-_i8z2FyE|^vc`^=56-D)iQq?|J>a*5`Ul3XvLINjP zsUNIp<(oaHG`+Sx4Nusz@bUDR3R#^>zN{-H+;9(F4wuMpKU^yNSHVg)Uj&8XF3Q zX_{qHhYa(-bTY@J_x)^%p8N&R)O>f!DIqfR5wIS$K|y?P5b!2$hr{kvY}Lq_>=fir zMd)MM1%AHSY3iip#sZ%KHLssIm9M_wdJGn)xEvJ4ag}?H}i^v`yT>km~ zV8b0A_)HSo7i?+{amFn>t6|`ay6erTHD}J6W7dh)zj&z=uh(9vA}@5@$-}CQv1@zD zpqj?+n?TW*3gsKeDQMr`HSwK3e@Q#1rP^f$)ZV?lcM4JQFrQV>(uYv^I8t;qL~nL{ znjsC{-|;`FSa-Mi&fA6MOoChB&iet}dwLUZKYcnnKUAm4k^i9}9*Qhb)rdy{zuA0` zZ5cZsB8CO_mU4yQwrGmqN zZb)8syf_6cAL4Le_zgVVOs9;Jg-54 zx{FD49LTXH1#Pyqf6S3oVzye&sgFy^c$q185N1^nymJBlvEwEiwrq#btj29=UT71E z3gir8t5f#BVIKZA=W5$}sq3`*Uix3EPgGj|u0Anlsedcb3E@Uu{JZ=FZtkD*6Rv-i zpX{PB%M4)`E8;1W&s(#|gbjfMaCWN*$TNl0)D8@RNK zei{SHsfh?dJ8j(qri_ION-KlHo|ON^k8Yks4*htnH@#PEpsnHu(->fpqQWYiBV=`n zdjS3fgnK~u3&dlQk>T+JaiZegA2{^`A%t*? zu`Ol`2pP$s<3(`|Jjt_V;y(eNVbT&g-*ZMta=s^j7~J7ljDT-kg=#orAscU4xkb43e=rbn+cMDENQ5Isu=4}kfY@AwvKwp??Y+VTDSWB)vSlDlTLUvn zf3uS|AVL2c3@Ioz-RYJbR~=s}$0->c7^*5tdf<1HKkUOL`O)NXsnEON-5od79e3)U z9GEz`&9^(a=EVc~AGLc!a16cQQlqg$#wkg$qCAgZy}?$!6t!w0 zSG{N}$$|lbxwhy5eaWQ@(56@4ov}(tQh&T9p-F2=8BauF7+`2HQZeM1id0Gb1f>k! zD!6URC@MBAvs(U^xz5a)&MCxj@=sXjS6|H&Q2mYPCZrh2cTM}!mV})vmscXyqu(-$ z`X=#neu3+Jy7TbPuS+BLxMvTwSq-|)h)d_7&abLSAZHKPzmWc(zo25OO8zQ&&pg#iTk?(&2alrt8gx}JCLUIa!4k;*dzk$K=bDrg7fxz+qy#50*0{0Qz zp|B%_8`^l{7Hc+b^hY^hFkCq~yOc0o3ui==qgN*DMmn`F8cHCS`R|@*>MFXKz$6LJVoZej-KCi;>Yr zXGPk zlnr{({qy<{46}Gmx)n)*ozqd}}_WHgkY;z0(*whw|e^IJIfS&_TQlK|>Nl$>8e`^*r?(@0nwwHa$4+kV}7fO7A z)-%426i;td6=z$J$e^^5@LXv-T^5RqGEK4g&qG4`0F*r#%;rPKl{6S1|6Fe~cnA>8 zrfw}f%x2Eje+42XOqfjp_T0Zh0^k1}bR__^C0eK7f$%!|KX3itBy84k{Ui(gFCSHC z#kO@_KR2+Ebuu}T?eFaWs@|F@N%=$)5CS=6k;sQB>G3XTJfMw9%k7iVZTxU>=8x~d znLNa8MCFD?<@HHT_570TW;odF_J>|;wR_mkzN`im-2QE=1P`mu`ukli|C(rLnJS_F zFymyB=iIc#D5#;FV(%wi<~ppI{(uQ@jOkPV9pm6z-8!>A6)6+)tm@M@y7hJ&(%3J8 zQmbA28BI^L7AyS5Eor))t?%jC!93w45rJ@u5uZK}8$oSWB;RpAXn4||C&MVnmsMC} z@DJbd)a-Z+G@=SDjh*iatn;U1kmSMOW184J4!XM5iKwnYgowan(A45|1z;bvFoFpB3=A0O7|&V{q6-goi>4W$58G{uE^Wq3ncn)=R|8{bEJoxrPy6GG z6K6liHpXSNc5R9;`J%?1hxiC2af=BryDUX|%1f)&cc&)6y3T+Xt2!4)Ln*h^$$Ptf(~vgsT?Q(%e3Hkk0{NTwO}Uc=VDy$?7A`iDmF-ZYC{^ZNwBdO-!Z9O2 zR#2?zrN^m;(n9YEyfDvOISe-8c-C_oDS>p|Ma(Xx=Wme4UfX+T=3k!Jtnp1O5L&r8!eewQ#gxVUYoH0uRvxCivL zA_moHd+ny;cJ-Xvsdf@NOK_gfg1gofEnRmJFaPE=@@)LY<9=(6pvj$}RK}!t zP$^XUW4S1nNi1Ub9zOUqZ%?3!E`ergLIG#5lb&>3Iwf6B0`$NbRKl#{00g*2m?@0ng!i=v14&X`&GXbhd6BUX4PF4G}3pMK6u5|?*nV-nw1^%ix z;RYk}0$z}i#L%@uovArUlAYRLl+fBOm$oOs&|NCzh_lTz-El;Y6@#$?CEtCKj-OSN z;jgu01|d>@Gbyi%&^Yd+qAX(s2nv)UP~L>Wm6DIDB8WlZbJ4JDE5PfdL$A*^W20t$ z24r|YUk%-3y4y8!l9N{KGpR>G$LIPq_lGN(>bz*qW=Ci3!%V(V#%U{qDb-vn;-%n^5BBL%Mu%oq?AksoX$!kREmDm0i zK-C(7-4~)#Do2^v-${&={WC_-FZ1{9L`!cB34^0oD|6~Ezd^nq3DDWWFhS@sVH;ej zxm=re9(CyO`c2=4Q?HFI_|dO9z}_}^^P)TCZ%slwW{GT+P!Hl8sQ z*9nvO#a>R+wKC(3*0L{sri}%zoXvFZ5bg%*c8I<} z5H1eD4V|1UkS$f&d-ivZxdh?%Z&hw-O&cdrY83Kz5ztYsa|M5;_|(Si=P}KNT|Ntx z-4c#|69q{)+_Nc@fcH+B>jnn?`|S=wey^>i5TD1|>-Fqw$=&XB{<$~314JLY(2e%3 zANbu4WhO6vP_@FO#!FbL?dkLR=L;w~rzd^Y<*GQpjur((BPUJSpA~Aj6v7{mls9tj&RRJgO z_jT=8BymB69@;M67LKyv)26U7{sxM|D(@Nzxjk=8{N@UW_tw{=NfhQ0`^rOayK=}y zJ4Sj;t~OJqzRRHwR!Gn`SDYezbV&Eym8~w5`sKKbovB^Y*6=g0gFe$Sza}xid#guc z6BkaLcqIEE>^wmtDkq*qTtD-@&0!`(3$_E>CSAc-iOr&OJAZ9s24;)Z3(=3g z*{J7+#3!Y~LdI5;jd=?)$Q1Q`v3EKwvf%aik3W3LgY1M8nEX0gcG zk~Dj92d>m{cJA9+?Xh5G+KEZQ`6)>c*Bi?!$lbZZ>o%u+aXi#B@7%G1Ti99Yd6U_{ zv~_SFMn-nEWEB5An;rT2*_lxq#HMn8;H{Uh!v7egmYWW4X2JOK$UUyZ>d$d#AC&06 zkck%^z{$()$@0?%N4{F`!2Yq;EzafG2z6gj|1oscNoZH8Px+*7{;sQy=VkWOIppM^ z>Xz-~-tp#=|GhdB=d+W?Jr?wGZZ2Pmx+c@t*>8!QZV2g4)fCCT z%~k?o&WUcWExHC+-B(%5bl$X=(cWd_vLyIYRA%snVDyM^9abXS19B~Pr6Z=WQ_ZhU zu&J4sQR%58>)fvwwt_mf5iaKkW@}hPYk+vM^v0J*3+C5cV7~Hs4dR063};kTfg9;8PU$x>0PCKjsY^yoJ`D0=vrVvrfsS9hVB*sqM!s#heDM=QR_9zZHKQC@*%r;LT%edxZxkr@>x+a}KVk*B|DHTgp|vsg z*vWkSPAr$?I71eJIln+s)vu|bf^rd*aH%__v$`H^5OS&HlFnacILJBOCeV5AO}^Rt zd1hIYMPOsMlen9qjd#R9Q&>TgBe=9?=td5|*Rsn}L2f zSo}q0`jDFI{9SqNX`JQav5s3fVgd)$D&2%Du3Pl z6NiG`xRyOXOjiAtmRC=PXZHDbSIn_=V*2Q#1zw2qEv-H#kc5R`X#8Qs?;1iZor^cF zlhyhx6BvNS+}SZI)k$PtZ+(dOcXeXL=xjHfdg}xP84t{RUf{j)Rot3E9w+1prLk)3 z`rjnw7rkrub30xeEbk>vpJ~uKgM<$?Z4ypq`yAn4RGw(B0(E=uzhlJ-%=)H_9G=V< zCbuG-di3cupTKj|oe*6GBmU{8f-r@9kir}c)2_G8SRbBL1=q_M!_x(tdjSq_5oSFe zgZr|;Hx2$*JC!~sABtM$%wHA!%>?3j89KJ!j~mZU5&6NP^(vD#?emqoqv{d%w%&+K z&*-_Qa_AiW2BEtB2*01n5SYWY=7hiA1wMC0Yc2Mr(Ybh|RyxiRMtJJjdiC7%YA(81 zvPJE#daEEh+L~tv&-tSURq9*;p8vW(?rOfIk;_>gfHjSvG9A$_>EhM$@;qeF|ALkObJ$T^|zjK z{#{`y1>y}wzt912@thcD95P`YWI|$_NZLfFWFluiN9$ePrFpY9pZSL4-1Bh(mEjK> zEyES$rveYZmVR!QHubL|o9r%Xl1U8Z!}yz49NY?C1fpSlRdm-GP@Yf%A4(598|zj) zQa%;nBBSPlOk*sBm{gVU13N#Z@?G&B-MKs#-64F9@3i*QOpl?9nZi9JKC`gY_&!X{ zDud*}gMK!FMs!A=l;&!Pte+LOJ~HlFEOh0;O82=El;iT2XnbDP&v&g9VSB%9C{y5* zs&6=3x7%zKxS|z15E?L`T$E4vsw952T+x9v`*4B^cz3Zta25_z$gd1ZEBp8(F&r$BI*`p!j*7i!Tb|5Yq)7 zC_3zouu)frP;aHloqKHALRTX~zw)E~Bwr?`RbTqU0R+)+lX z+O_1;JYHTx;C}O7lXPIjx)(m7#4Rx{fz36V8jcSB?s9!-hoU9&z;~->Ip#f=1s2X5 zHK5wXi=!{gvIh-lsXCR;F8UIQ$I_&XHkYP#dTOThDQ>XpceXeS-tM1Jdl;CXN;#6l zVsZyG>9qZZ17CG2{KHj4xIXiNB(tf~to*M<;NIL_8CghE6T`hnvRr$jOzla*&Q>yN^Nbi7uEOFl-g4rT+!jh|(u&exrQqggW==DwdRPY= zG3(wnyr&MLhRx20?X}nJ$+wQNUR-Y1o5>ydEjFK*V?ps0?)MI|=AZDQpWY$QKShxa zHLWpv!pVnrb!DayHph3;MdvJ*jvlEc(fGvA2<+MzgmRbSb`4t}Vt%tjYg*$sh3|DtxXm);$Z`?pjKXwQweQ8JvzJsR^`NibrS6>oLagmx9q zt=3zi+-&gOQr==GrWP7 zTG7k-%S+3OX*$$JAIbjB&*{>5{Vv$Z?G*N_-2)Rm~N!sKcS>h{z+_xMev;bGx>| z0e?KfpUtVRO(xSj6GMJ+Yiq%G_}@J5+tu4sTQtejN;n=Mh!xQagaS=05fallttnME zZ25+9S$+pw^4v{W!|e=isk38{rHYVNe2t?DIHR~$ahNQsg>+b2OSen~o5*@Y(HikQ z8(T7s#`WmsQP>a-0X7ju^hAU{V-#s2e91~x%T-(&3azlrPo5mVw{mQC!aYCBh}0&I zX)x2w+Yos4uM|n}e}{bSih8f6HNDdY9~F(p_}oHH?=WU9RT($Ug2G2^%RO{mIkb*} zyjnJe{bJCl{ad_YW*YN#(mt)Wu5Wc�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

H7opcx1Rk~2>2U0e2$^0!xvBKuOh+twXP@))s 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 literal 0 HcmV?d00001 diff --git a/x-pack/test/apm_api_integration/trial/fixtures/es_archiver/apm_8.0.0/mappings.json b/x-pack/test/apm_api_integration/trial/fixtures/es_archiver/apm_8.0.0/mappings.json new file mode 100644 index 0000000000000..231cd2bbc1907 --- /dev/null +++ b/x-pack/test/apm_api_integration/trial/fixtures/es_archiver/apm_8.0.0/mappings.json @@ -0,0 +1,63355 @@ +{ + "type": "index", + "value": { + "aliases": { + ".ml-anomalies-.write-android_homepage_high_latency_by_geo": { + "is_hidden": true + }, + ".ml-anomalies-.write-apm-environment_not_defined-7ed6-high_mean_transaction_duration": { + "is_hidden": true + }, + ".ml-anomalies-.write-apm-production-229a-high_mean_transaction_duration": { + "is_hidden": true + }, + ".ml-anomalies-.write-apm-testing-d457-high_mean_transaction_duration": { + "is_hidden": true + }, + ".ml-anomalies-.write-auto_http_0x73c4bc9426fb6908_high_latency_by_geo": { + "is_hidden": true + }, + ".ml-anomalies-.write-auto_http_0xa1e2426c5b01459d_high_latency_by_geo": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-logs-ui-default-default-log-entry-categories-count": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-logs-ui-default-default-log-entry-rate": { + "is_hidden": true + }, + ".ml-anomalies-android_homepage_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "android_homepage_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-apm-environment_not_defined-7ed6-high_mean_transaction_duration": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "apm-environment_not_defined-7ed6-high_mean_transaction_duration" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-apm-production-229a-high_mean_transaction_duration": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "apm-production-229a-high_mean_transaction_duration" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-apm-testing-d457-high_mean_transaction_duration": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "apm-testing-d457-high_mean_transaction_duration" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-auto_http_0x73c4bc9426fb6908_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "auto_http_0x73c4bc9426fb6908_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-auto_http_0xa1e2426c5b01459d_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "auto_http_0xa1e2426c5b01459d_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-logs-ui-default-default-log-entry-categories-count": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-logs-ui-default-default-log-entry-categories-count" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-logs-ui-default-default-log-entry-rate": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-logs-ui-default-default-log-entry-rate" + } + } + }, + "is_hidden": true + } + }, + "index": ".ml-anomalies-shared", + "mappings": { + "_meta": { + "version": "8.0.0" + }, + "dynamic_templates": [ + { + "strings_as_keywords": { + "mapping": { + "type": "keyword" + }, + "match": "*" + } + } + ], + "properties": { + "actual": { + "type": "double" + }, + "all_field_values": { + "analyzer": "whitespace", + "type": "text" + }, + "anomaly_score": { + "type": "double" + }, + "average_bucket_processing_time_ms": { + "type": "double" + }, + "bucket_allocation_failures_count": { + "type": "long" + }, + "bucket_count": { + "type": "long" + }, + "bucket_influencers": { + "properties": { + "anomaly_score": { + "type": "double" + }, + "bucket_span": { + "type": "long" + }, + "influencer_field_name": { + "type": "keyword" + }, + "initial_anomaly_score": { + "type": "double" + }, + "is_interim": { + "type": "boolean" + }, + "job_id": { + "type": "keyword" + }, + "probability": { + "type": "double" + }, + "raw_anomaly_score": { + "type": "double" + }, + "result_type": { + "type": "keyword" + }, + "timestamp": { + "type": "date" + } + }, + "type": "nested" + }, + "bucket_span": { + "type": "long" + }, + "by_field_name": { + "type": "keyword" + }, + "by_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "categorization_status": { + "type": "keyword" + }, + "categorized_doc_count": { + "type": "keyword" + }, + "category_id": { + "type": "long" + }, + "causes": { + "properties": { + "actual": { + "type": "double" + }, + "by_field_name": { + "type": "keyword" + }, + "by_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "correlated_by_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "field_name": { + "type": "keyword" + }, + "function": { + "type": "keyword" + }, + "function_description": { + "type": "keyword" + }, + "geo_results": { + "properties": { + "actual_point": { + "type": "geo_point" + }, + "typical_point": { + "type": "geo_point" + } + } + }, + "over_field_name": { + "type": "keyword" + }, + "over_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "partition_field_name": { + "type": "keyword" + }, + "partition_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "probability": { + "type": "double" + }, + "typical": { + "type": "double" + } + }, + "type": "nested" + }, + "dead_category_count": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "detector_index": { + "type": "integer" + }, + "earliest_record_timestamp": { + "type": "date" + }, + "empty_bucket_count": { + "type": "long" + }, + "event": { + "properties": { + "dataset": { + "type": "keyword" + } + } + }, + "event_count": { + "type": "long" + }, + "examples": { + "type": "text" + }, + "exponential_average_bucket_processing_time_ms": { + "type": "double" + }, + "exponential_average_calculation_context": { + "properties": { + "incremental_metric_value_ms": { + "type": "double" + }, + "latest_timestamp": { + "type": "date" + }, + "previous_exponential_average_ms": { + "type": "double" + } + } + }, + "failed_category_count": { + "type": "keyword" + }, + "field_name": { + "type": "keyword" + }, + "forecast_create_timestamp": { + "type": "date" + }, + "forecast_end_timestamp": { + "type": "date" + }, + "forecast_expiry_timestamp": { + "type": "date" + }, + "forecast_id": { + "type": "keyword" + }, + "forecast_lower": { + "type": "double" + }, + "forecast_memory_bytes": { + "type": "long" + }, + "forecast_messages": { + "type": "keyword" + }, + "forecast_prediction": { + "type": "double" + }, + "forecast_progress": { + "type": "double" + }, + "forecast_start_timestamp": { + "type": "date" + }, + "forecast_status": { + "type": "keyword" + }, + "forecast_upper": { + "type": "double" + }, + "frequent_category_count": { + "type": "keyword" + }, + "function": { + "type": "keyword" + }, + "function_description": { + "type": "keyword" + }, + "geo_results": { + "properties": { + "actual_point": { + "type": "geo_point" + }, + "typical_point": { + "type": "geo_point" + } + } + }, + "influencer_field_name": { + "type": "keyword" + }, + "influencer_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "influencer_score": { + "type": "double" + }, + "influencers": { + "properties": { + "influencer_field_name": { + "type": "keyword" + }, + "influencer_field_values": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + } + }, + "type": "nested" + }, + "initial_anomaly_score": { + "type": "double" + }, + "initial_influencer_score": { + "type": "double" + }, + "initial_record_score": { + "type": "double" + }, + "input_bytes": { + "type": "long" + }, + "input_field_count": { + "type": "long" + }, + "input_record_count": { + "type": "long" + }, + "invalid_date_count": { + "type": "long" + }, + "is_interim": { + "type": "boolean" + }, + "job_id": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "last_data_time": { + "type": "date" + }, + "latest_empty_bucket_timestamp": { + "type": "date" + }, + "latest_record_time_stamp": { + "type": "date" + }, + "latest_record_timestamp": { + "type": "date" + }, + "latest_result_time_stamp": { + "type": "date" + }, + "latest_sparse_bucket_timestamp": { + "type": "date" + }, + "log_time": { + "type": "date" + }, + "max_matching_length": { + "type": "long" + }, + "maximum_bucket_processing_time_ms": { + "type": "double" + }, + "memory_status": { + "type": "keyword" + }, + "min_version": { + "type": "keyword" + }, + "minimum_bucket_processing_time_ms": { + "type": "double" + }, + "missing_field_count": { + "type": "long" + }, + "mlcategory": { + "type": "keyword" + }, + "model_bytes": { + "type": "long" + }, + "model_bytes_exceeded": { + "type": "keyword" + }, + "model_bytes_memory_limit": { + "type": "keyword" + }, + "model_feature": { + "type": "keyword" + }, + "model_lower": { + "type": "double" + }, + "model_median": { + "type": "double" + }, + "model_size_stats": { + "properties": { + "bucket_allocation_failures_count": { + "type": "long" + }, + "categorization_status": { + "type": "keyword" + }, + "categorized_doc_count": { + "type": "keyword" + }, + "dead_category_count": { + "type": "keyword" + }, + "failed_category_count": { + "type": "keyword" + }, + "frequent_category_count": { + "type": "keyword" + }, + "job_id": { + "type": "keyword" + }, + "log_time": { + "type": "date" + }, + "memory_status": { + "type": "keyword" + }, + "model_bytes": { + "type": "long" + }, + "model_bytes_exceeded": { + "type": "keyword" + }, + "model_bytes_memory_limit": { + "type": "keyword" + }, + "peak_model_bytes": { + "type": "long" + }, + "rare_category_count": { + "type": "keyword" + }, + "result_type": { + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "total_by_field_count": { + "type": "long" + }, + "total_category_count": { + "type": "keyword" + }, + "total_over_field_count": { + "type": "long" + }, + "total_partition_field_count": { + "type": "long" + } + } + }, + "model_upper": { + "type": "double" + }, + "monitor": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "multi_bucket_impact": { + "type": "double" + }, + "num_matches": { + "type": "long" + }, + "observer": { + "properties": { + "geo": { + "properties": { + "name": { + "type": "keyword" + } + } + } + } + }, + "out_of_order_timestamp_count": { + "type": "long" + }, + "over_field_name": { + "type": "keyword" + }, + "over_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "partition_field_name": { + "type": "keyword" + }, + "partition_field_value": { + "copy_to": [ + "all_field_values" + ], + "type": "keyword" + }, + "peak_model_bytes": { + "type": "keyword" + }, + "preferred_to_categories": { + "type": "long" + }, + "probability": { + "type": "double" + }, + "processed_field_count": { + "type": "long" + }, + "processed_record_count": { + "type": "long" + }, + "processing_time_ms": { + "type": "long" + }, + "quantiles": { + "enabled": false, + "type": "object" + }, + "rare_category_count": { + "type": "keyword" + }, + "raw_anomaly_score": { + "type": "double" + }, + "record_score": { + "type": "double" + }, + "regex": { + "type": "keyword" + }, + "result_type": { + "type": "keyword" + }, + "retain": { + "type": "boolean" + }, + "scheduled_events": { + "type": "keyword" + }, + "search_count": { + "type": "long" + }, + "service": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "snapshot_doc_count": { + "type": "integer" + }, + "snapshot_id": { + "type": "keyword" + }, + "sparse_bucket_count": { + "type": "long" + }, + "terms": { + "type": "text" + }, + "timestamp": { + "type": "date" + }, + "total_by_field_count": { + "type": "long" + }, + "total_category_count": { + "type": "keyword" + }, + "total_over_field_count": { + "type": "long" + }, + "total_partition_field_count": { + "type": "long" + }, + "total_search_time_ms": { + "type": "double" + }, + "transaction": { + "properties": { + "type": { + "type": "keyword" + } + } + }, + "typical": { + "type": "double" + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "hidden": "true", + "number_of_replicas": "1", + "number_of_shards": "1", + "translog": { + "durability": "async" + } + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + }, + "index": ".ml-config", + "mappings": { + "_meta": { + "version": "8.0.0" + }, + "dynamic_templates": [ + { + "strings_as_keywords": { + "mapping": { + "type": "keyword" + }, + "match": "*" + } + } + ], + "properties": { + "aggregations": { + "enabled": false, + "type": "object" + }, + "allow_lazy_open": { + "type": "keyword" + }, + "analysis": { + "properties": { + "classification": { + "properties": { + "class_assignment_objective": { + "type": "keyword" + }, + "dependent_variable": { + "type": "keyword" + }, + "eta": { + "type": "double" + }, + "feature_bag_fraction": { + "type": "double" + }, + "gamma": { + "type": "double" + }, + "lambda": { + "type": "double" + }, + "max_trees": { + "type": "integer" + }, + "num_top_classes": { + "type": "integer" + }, + "num_top_feature_importance_values": { + "type": "integer" + }, + "prediction_field_name": { + "type": "keyword" + }, + "training_percent": { + "type": "double" + } + } + }, + "outlier_detection": { + "properties": { + "feature_influence_threshold": { + "type": "double" + }, + "method": { + "type": "keyword" + }, + "n_neighbors": { + "type": "integer" + } + } + }, + "regression": { + "properties": { + "dependent_variable": { + "type": "keyword" + }, + "eta": { + "type": "double" + }, + "feature_bag_fraction": { + "type": "double" + }, + "gamma": { + "type": "double" + }, + "lambda": { + "type": "double" + }, + "loss_function": { + "type": "keyword" + }, + "loss_function_parameter": { + "type": "double" + }, + "max_trees": { + "type": "integer" + }, + "num_top_feature_importance_values": { + "type": "integer" + }, + "prediction_field_name": { + "type": "keyword" + }, + "training_percent": { + "type": "double" + } + } + } + } + }, + "analysis_config": { + "properties": { + "bucket_span": { + "type": "keyword" + }, + "categorization_analyzer": { + "enabled": false, + "type": "object" + }, + "categorization_field_name": { + "type": "keyword" + }, + "categorization_filters": { + "type": "keyword" + }, + "detectors": { + "properties": { + "by_field_name": { + "type": "keyword" + }, + "custom_rules": { + "properties": { + "actions": { + "type": "keyword" + }, + "conditions": { + "properties": { + "applies_to": { + "type": "keyword" + }, + "operator": { + "type": "keyword" + }, + "value": { + "type": "double" + } + }, + "type": "nested" + }, + "scope": { + "enabled": false, + "type": "object" + } + }, + "type": "nested" + }, + "detector_description": { + "type": "text" + }, + "detector_index": { + "type": "integer" + }, + "exclude_frequent": { + "type": "keyword" + }, + "field_name": { + "type": "keyword" + }, + "function": { + "type": "keyword" + }, + "over_field_name": { + "type": "keyword" + }, + "partition_field_name": { + "type": "keyword" + }, + "use_null": { + "type": "boolean" + } + } + }, + "influencers": { + "type": "keyword" + }, + "latency": { + "type": "keyword" + }, + "multivariate_by_fields": { + "type": "boolean" + }, + "per_partition_categorization": { + "properties": { + "enabled": { + "type": "boolean" + }, + "stop_on_warn": { + "type": "boolean" + } + } + }, + "summary_count_field_name": { + "type": "keyword" + } + } + }, + "analysis_limits": { + "properties": { + "categorization_examples_limit": { + "type": "long" + }, + "model_memory_limit": { + "type": "keyword" + } + } + }, + "analyzed_fields": { + "enabled": false, + "type": "object" + }, + "background_persist_interval": { + "type": "keyword" + }, + "chunking_config": { + "properties": { + "mode": { + "type": "keyword" + }, + "time_span": { + "type": "keyword" + } + } + }, + "config_type": { + "type": "keyword" + }, + "create_time": { + "type": "date" + }, + "custom_settings": { + "enabled": false, + "type": "object" + }, + "daily_model_snapshot_retention_after_days": { + "type": "long" + }, + "data_description": { + "properties": { + "field_delimiter": { + "type": "keyword" + }, + "format": { + "type": "keyword" + }, + "quote_character": { + "type": "keyword" + }, + "time_field": { + "type": "keyword" + }, + "time_format": { + "type": "keyword" + } + } + }, + "datafeed_id": { + "type": "keyword" + }, + "delayed_data_check_config": { + "properties": { + "check_window": { + "type": "keyword" + }, + "enabled": { + "type": "boolean" + } + } + }, + "deleting": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "dest": { + "properties": { + "index": { + "type": "keyword" + }, + "results_field": { + "type": "keyword" + } + } + }, + "finished_time": { + "type": "date" + }, + "frequency": { + "type": "keyword" + }, + "groups": { + "type": "keyword" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "id": { + "type": "keyword" + }, + "indices": { + "type": "keyword" + }, + "indices_options": { + "enabled": false, + "type": "object" + }, + "job_id": { + "type": "keyword" + }, + "job_type": { + "type": "keyword" + }, + "job_version": { + "type": "keyword" + }, + "max_empty_searches": { + "type": "keyword" + }, + "max_num_threads": { + "type": "integer" + }, + "model_plot_config": { + "properties": { + "annotations_enabled": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "terms": { + "type": "keyword" + } + } + }, + "model_snapshot_id": { + "type": "keyword" + }, + "model_snapshot_min_version": { + "type": "keyword" + }, + "model_snapshot_retention_days": { + "type": "long" + }, + "query": { + "enabled": false, + "type": "object" + }, + "query_delay": { + "type": "keyword" + }, + "renormalization_window_days": { + "type": "long" + }, + "results_index_name": { + "type": "keyword" + }, + "results_retention_days": { + "type": "long" + }, + "script_fields": { + "enabled": false, + "type": "object" + }, + "scroll_size": { + "type": "long" + }, + "source": { + "properties": { + "_source": { + "enabled": false, + "type": "object" + }, + "index": { + "type": "keyword" + }, + "query": { + "enabled": false, + "type": "object" + } + } + }, + "version": { + "type": "keyword" + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "max_result_window": "10000", + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-error": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-error-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-error" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-error": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-error-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-error" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-error": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-error-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-error" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-error": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-error-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-error" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "float" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "float" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "long" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "long" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "clr": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + }, + "gen0size": { + "type": "float" + }, + "gen1size": { + "type": "float" + }, + "gen2size": { + "type": "float" + }, + "gen3size": { + "type": "float" + } + } + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "long" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "long" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "long" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "pool": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "long" + } + } + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "long" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + } + } + }, + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-metric-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "clr": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + }, + "gen0size": { + "type": "float" + }, + "gen1size": { + "type": "float" + }, + "gen2size": { + "type": "float" + }, + "gen3size": { + "type": "float" + } + } + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "float" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "float" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "pool": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + } + } + }, + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-span": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-span-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "productId": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-span": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-span-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "productId": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-span": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-span-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "productId": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-span": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-span-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "productId": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-transaction-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "firstContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "largestContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-transaction-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "firstContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "largestContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-transaction-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-transaction-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, + "customer_tier": { + "type": "keyword" + }, + "foo": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "request_id": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} \ No newline at end of file From 61edcb32f9c9e89df9fcf9dfd850e4784a39d3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Wed, 9 Sep 2020 11:38:49 +0100 Subject: [PATCH 52/58] [UI Metrics] Support multi-colon keys (#76913) --- .../server/collectors/ui_metric/index.test.ts | 11 +++++++++++ .../ui_metric/telemetry_ui_metric_collector.ts | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/plugins/kibana_usage_collection/server/collectors/ui_metric/index.test.ts b/src/plugins/kibana_usage_collection/server/collectors/ui_metric/index.test.ts index fca685ef4b805..d6f40a2a6867f 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/ui_metric/index.test.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/ui_metric/index.test.ts @@ -73,6 +73,11 @@ describe('telemetry_ui_metric', () => { { id: 'testAppName:testKeyName1', attributes: { count: 3 } }, { id: 'testAppName:testKeyName2', attributes: { count: 5 } }, { id: 'testAppName2:testKeyName3', attributes: { count: 1 } }, + { + id: + 'kibana-user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0', + attributes: { count: 1 }, + }, ], total: 3, } as any; @@ -86,6 +91,12 @@ describe('telemetry_ui_metric', () => { { key: 'testKeyName2', value: 5 }, ], testAppName2: [{ key: 'testKeyName3', value: 1 }], + 'kibana-user_agent': [ + { + key: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0', + value: 1, + }, + ], }); }); }); diff --git a/src/plugins/kibana_usage_collection/server/collectors/ui_metric/telemetry_ui_metric_collector.ts b/src/plugins/kibana_usage_collection/server/collectors/ui_metric/telemetry_ui_metric_collector.ts index ec2f1bfdfc25f..46768813b1970 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/ui_metric/telemetry_ui_metric_collector.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/ui_metric/telemetry_ui_metric_collector.ts @@ -66,9 +66,9 @@ export function registerUiMetricUsageCollector( attributes: { count }, } = rawUiMetric; - const [appName, metricType] = id.split(':'); + const [appName, ...metricType] = id.split(':'); - const pair = { key: metricType, value: count }; + const pair = { key: metricType.join(':'), value: count }; return { ...accum, [appName]: [...(accum[appName] || []), pair], From d89e6d370235c68f9e2a36c32d9693cd724edaf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20G=C3=B3mez?= Date: Wed, 9 Sep 2020 12:58:32 +0200 Subject: [PATCH 53/58] [Logs UI] Use fields api in log stream (#76919) --- .../log_entries/kibana_log_entries_adapter.ts | 15 +++++++++------ ...vert_document_source_to_log_item_fields.ts | 5 +++++ .../log_entries_domain/log_entries_domain.ts | 6 +++--- .../server/routes/log_entries/entries.ts | 19 +++---------------- .../infra/server/routes/log_entries/item.ts | 19 +++---------------- 5 files changed, 23 insertions(+), 41 deletions(-) diff --git a/x-pack/plugins/infra/server/lib/adapters/log_entries/kibana_log_entries_adapter.ts b/x-pack/plugins/infra/server/lib/adapters/log_entries/kibana_log_entries_adapter.ts index 939498305eb98..c5b667fb20538 100644 --- a/x-pack/plugins/infra/server/lib/adapters/log_entries/kibana_log_entries_adapter.ts +++ b/x-pack/plugins/infra/server/lib/adapters/log_entries/kibana_log_entries_adapter.ts @@ -8,12 +8,12 @@ import { timeMilliseconds } from 'd3-time'; import * as runtimeTypes from 'io-ts'; -import { compact, first, get, has } from 'lodash'; +import { compact, first } from 'lodash'; import { pipe } from 'fp-ts/lib/pipeable'; import { map, fold } from 'fp-ts/lib/Either'; import { identity, constant } from 'fp-ts/lib/function'; import { RequestHandlerContext } from 'src/core/server'; -import { JsonObject, JsonValue } from '../../../../common/typed_json'; +import { JsonValue } from '../../../../common/typed_json'; import { LogEntriesAdapter, LogEntriesParams, @@ -31,7 +31,7 @@ const TIMESTAMP_FORMAT = 'epoch_millis'; interface LogItemHit { _index: string; _id: string; - _source: JsonObject; + fields: { [key: string]: [value: unknown] }; sort: [number, number]; } @@ -82,7 +82,8 @@ export class InfraKibanaLogEntriesAdapter implements LogEntriesAdapter { body: { size: typeof size !== 'undefined' ? size : LOG_ENTRIES_PAGE_SIZE, track_total_hits: false, - _source: fields, + _source: false, + fields, query: { bool: { filter: [ @@ -214,6 +215,8 @@ export class InfraKibanaLogEntriesAdapter implements LogEntriesAdapter { values: [id], }, }, + fields: ['*'], + _source: false, }, }; @@ -230,8 +233,8 @@ function mapHitsToLogEntryDocuments(hits: SortedSearchHit[], fields: string[]): return hits.map((hit) => { const logFields = fields.reduce<{ [fieldName: string]: JsonValue }>( (flattenedFields, field) => { - if (has(hit._source, field)) { - flattenedFields[field] = get(hit._source, field); + if (field in hit.fields) { + flattenedFields[field] = hit.fields[field][0]; } return flattenedFields; }, diff --git a/x-pack/plugins/infra/server/lib/domains/log_entries_domain/convert_document_source_to_log_item_fields.ts b/x-pack/plugins/infra/server/lib/domains/log_entries_domain/convert_document_source_to_log_item_fields.ts index 099e7c3b5038c..7c8560d72ff97 100644 --- a/x-pack/plugins/infra/server/lib/domains/log_entries_domain/convert_document_source_to_log_item_fields.ts +++ b/x-pack/plugins/infra/server/lib/domains/log_entries_domain/convert_document_source_to_log_item_fields.ts @@ -20,6 +20,11 @@ const serializeValue = (value: any): string => { } return `${value}`; }; +export const convertESFieldsToLogItemFields = (fields: { + [field: string]: [value: unknown]; +}): LogEntriesItemField[] => { + return Object.keys(fields).map((field) => ({ field, value: serializeValue(fields[field][0]) })); +}; export const convertDocumentSourceToLogItemFields = ( source: JsonObject, diff --git a/x-pack/plugins/infra/server/lib/domains/log_entries_domain/log_entries_domain.ts b/x-pack/plugins/infra/server/lib/domains/log_entries_domain/log_entries_domain.ts index 9b3e31f4da87a..e211f72b4e076 100644 --- a/x-pack/plugins/infra/server/lib/domains/log_entries_domain/log_entries_domain.ts +++ b/x-pack/plugins/infra/server/lib/domains/log_entries_domain/log_entries_domain.ts @@ -22,7 +22,7 @@ import { SavedSourceConfigurationFieldColumnRuntimeType, } from '../../sources'; import { getBuiltinRules } from './builtin_rules'; -import { convertDocumentSourceToLogItemFields } from './convert_document_source_to_log_item_fields'; +import { convertESFieldsToLogItemFields } from './convert_document_source_to_log_item_fields'; import { CompiledLogMessageFormattingRule, Fields, @@ -264,7 +264,7 @@ export class InfraLogEntriesDomain { tiebreaker: document.sort[1], }, fields: sortBy( - [...defaultFields, ...convertDocumentSourceToLogItemFields(document._source)], + [...defaultFields, ...convertESFieldsToLogItemFields(document.fields)], 'field' ), }; @@ -313,7 +313,7 @@ export class InfraLogEntriesDomain { interface LogItemHit { _index: string; _id: string; - _source: JsonObject; + fields: { [field: string]: [value: unknown] }; sort: [number, number]; } diff --git a/x-pack/plugins/infra/server/routes/log_entries/entries.ts b/x-pack/plugins/infra/server/routes/log_entries/entries.ts index 2cd889d9c5568..c1f63d9c29577 100644 --- a/x-pack/plugins/infra/server/routes/log_entries/entries.ts +++ b/x-pack/plugins/infra/server/routes/log_entries/entries.ts @@ -4,14 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import Boom from 'boom'; - -import { pipe } from 'fp-ts/lib/pipeable'; -import { fold } from 'fp-ts/lib/Either'; -import { identity } from 'fp-ts/lib/function'; -import { schema } from '@kbn/config-schema'; - -import { throwErrors } from '../../../common/runtime_types'; +import { createValidationFunction } from '../../../common/runtime_types'; import { InfraBackendLibs } from '../../lib/infra_types'; import { @@ -22,22 +15,16 @@ import { import { parseFilterQuery } from '../../utils/serialized_query'; import { LogEntriesParams } from '../../lib/domains/log_entries_domain'; -const escapeHatch = schema.object({}, { unknowns: 'allow' }); - export const initLogEntriesRoute = ({ framework, logEntries }: InfraBackendLibs) => { framework.registerRoute( { method: 'post', path: LOG_ENTRIES_PATH, - validate: { body: escapeHatch }, + validate: { body: createValidationFunction(logEntriesRequestRT) }, }, async (requestContext, request, response) => { try { - const payload = pipe( - logEntriesRequestRT.decode(request.body), - fold(throwErrors(Boom.badRequest), identity) - ); - + const payload = request.body; const { startTimestamp: startTimestamp, endTimestamp: endTimestamp, diff --git a/x-pack/plugins/infra/server/routes/log_entries/item.ts b/x-pack/plugins/infra/server/routes/log_entries/item.ts index 85dba8f598a89..67ca481ff4fcb 100644 --- a/x-pack/plugins/infra/server/routes/log_entries/item.ts +++ b/x-pack/plugins/infra/server/routes/log_entries/item.ts @@ -4,14 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import Boom from 'boom'; - -import { pipe } from 'fp-ts/lib/pipeable'; -import { fold } from 'fp-ts/lib/Either'; -import { identity } from 'fp-ts/lib/function'; -import { schema } from '@kbn/config-schema'; - -import { throwErrors } from '../../../common/runtime_types'; +import { createValidationFunction } from '../../../common/runtime_types'; import { InfraBackendLibs } from '../../lib/infra_types'; import { @@ -20,22 +13,16 @@ import { logEntriesItemResponseRT, } from '../../../common/http_api'; -const escapeHatch = schema.object({}, { unknowns: 'allow' }); - export const initLogEntriesItemRoute = ({ framework, sources, logEntries }: InfraBackendLibs) => { framework.registerRoute( { method: 'post', path: LOG_ENTRIES_ITEM_PATH, - validate: { body: escapeHatch }, + validate: { body: createValidationFunction(logEntriesItemRequestRT) }, }, async (requestContext, request, response) => { try { - const payload = pipe( - logEntriesItemRequestRT.decode(request.body), - fold(throwErrors(Boom.badRequest), identity) - ); - + const payload = request.body; const { id, sourceId } = payload; const sourceConfiguration = ( await sources.getSourceConfiguration(requestContext.core.savedObjects.client, sourceId) From 1ea58d96cb8df5c9efd6f336b020a932fa154845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Wed, 9 Sep 2020 14:40:29 +0200 Subject: [PATCH 54/58] [Form lib] Add validations prop to UseArray and expose "moveItem" handler (#76949) --- .../hook_form_lib/components/use_array.ts | 127 +++++++++++++----- .../static/forms/hook_form_lib/helpers.ts | 7 +- .../static/forms/hook_form_lib/hooks/index.ts | 2 +- .../forms/hook_form_lib/hooks/use_field.ts | 28 +++- .../forms/hook_form_lib/hooks/use_form.ts | 36 +++-- .../static/forms/hook_form_lib/types.ts | 17 ++- .../mappings_editor/types/document_fields.ts | 2 +- .../public/common/mock/test_providers.tsx | 1 + 8 files changed, 153 insertions(+), 67 deletions(-) diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.ts index 3688421964d2e..d0ac0d4ab28c3 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.ts @@ -17,18 +17,25 @@ * under the License. */ -import { useState, useEffect, useRef, useCallback } from 'react'; +import { useEffect, useRef, useCallback, useMemo } from 'react'; +import { FormHook, FieldConfig } from '../types'; +import { getFieldValidityAndErrorMessage } from '../helpers'; import { useFormContext } from '../form_context'; +import { useField, InternalFieldConfig } from '../hooks'; interface Props { path: string; initialNumberOfItems?: number; readDefaultValueOnForm?: boolean; + validations?: FieldConfig['validations']; children: (args: { items: ArrayItem[]; + error: string | null; addItem: () => void; removeItem: (id: number) => void; + moveItem: (sourceIdx: number, destinationIdx: number) => void; + form: FormHook; }) => JSX.Element; } @@ -56,32 +63,62 @@ export interface ArrayItem { export const UseArray = ({ path, initialNumberOfItems, + validations, readDefaultValueOnForm = true, children, }: Props) => { - const didMountRef = useRef(false); - const form = useFormContext(); - const defaultValues = readDefaultValueOnForm && (form.getFieldDefaultValue(path) as any[]); + const isMounted = useRef(false); const uniqueId = useRef(0); - const getInitialItemsFromValues = (values: any[]): ArrayItem[] => - values.map((_, index) => ({ + const form = useFormContext(); + const { getFieldDefaultValue } = form; + + const getNewItemAtIndex = useCallback( + (index: number): ArrayItem => ({ id: uniqueId.current++, path: `${path}[${index}]`, - isNew: false, - })); + isNew: true, + }), + [path] + ); + + const fieldDefaultValue = useMemo(() => { + const defaultValues = readDefaultValueOnForm + ? (getFieldDefaultValue(path) as any[]) + : undefined; - const getNewItemAtIndex = (index: number): ArrayItem => ({ - id: uniqueId.current++, - path: `${path}[${index}]`, - isNew: true, - }); + const getInitialItemsFromValues = (values: any[]): ArrayItem[] => + values.map((_, index) => ({ + id: uniqueId.current++, + path: `${path}[${index}]`, + isNew: false, + })); - const initialState = defaultValues - ? getInitialItemsFromValues(defaultValues) - : new Array(initialNumberOfItems).fill('').map((_, i) => getNewItemAtIndex(i)); + return defaultValues + ? getInitialItemsFromValues(defaultValues) + : new Array(initialNumberOfItems).fill('').map((_, i) => getNewItemAtIndex(i)); + }, [path, initialNumberOfItems, readDefaultValueOnForm, getFieldDefaultValue, getNewItemAtIndex]); - const [items, setItems] = useState(initialState); + // Create a new hook field with the "hasValue" set to false so we don't use its value to build the final form data. + // Apart from that the field behaves like a normal field and is hooked into the form validation lifecycle. + const fieldConfigBase: FieldConfig & InternalFieldConfig = { + defaultValue: fieldDefaultValue, + errorDisplayDelay: 0, + isIncludedInOutput: false, + }; + + const fieldConfig: FieldConfig & InternalFieldConfig = validations + ? { validations, ...fieldConfigBase } + : fieldConfigBase; + + const field = useField(form, path, fieldConfig); + const { setValue, value, isChangingValue, errors } = field; + + // Derived state from the field + const error = useMemo(() => { + const { errorMessage } = getFieldValidityAndErrorMessage({ isChangingValue, errors }); + return errorMessage; + }, [isChangingValue, errors]); const updatePaths = useCallback( (_rows: ArrayItem[]) => { @@ -96,29 +133,51 @@ export const UseArray = ({ [path] ); - const addItem = () => { - setItems((previousItems) => { + const addItem = useCallback(() => { + setValue((previousItems) => { const itemIndex = previousItems.length; return [...previousItems, getNewItemAtIndex(itemIndex)]; }); - }; + }, [setValue, getNewItemAtIndex]); - const removeItem = (id: number) => { - setItems((previousItems) => { - const updatedItems = previousItems.filter((item) => item.id !== id); - return updatePaths(updatedItems); - }); - }; + const removeItem = useCallback( + (id: number) => { + setValue((previousItems) => { + const updatedItems = previousItems.filter((item) => item.id !== id); + return updatePaths(updatedItems); + }); + }, + [setValue, updatePaths] + ); - useEffect(() => { - if (didMountRef.current) { - setItems((prev) => { - return updatePaths(prev); + const moveItem = useCallback( + (sourceIdx: number, destinationIdx: number) => { + setValue((previousItems) => { + const nextItems = [...previousItems]; + const removed = nextItems.splice(sourceIdx, 1)[0]; + nextItems.splice(destinationIdx, 0, removed); + return updatePaths(nextItems); }); - } else { - didMountRef.current = true; + }, + [setValue, updatePaths] + ); + + useEffect(() => { + if (!isMounted.current) { + return; } - }, [path, updatePaths]); - return children({ items, addItem, removeItem }); + setValue((prev) => { + return updatePaths(prev); + }); + }, [path, updatePaths, setValue]); + + useEffect(() => { + isMounted.current = true; + return () => { + isMounted.current = false; + }; + }, []); + + return children({ items: value, error, form, addItem, removeItem, moveItem }); }; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/helpers.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/helpers.ts index 7ea42f81b43cb..a148dc543542b 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/helpers.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/helpers.ts @@ -19,9 +19,10 @@ import { FieldHook } from './types'; -export const getFieldValidityAndErrorMessage = ( - field: FieldHook -): { isInvalid: boolean; errorMessage: string | null } => { +export const getFieldValidityAndErrorMessage = (field: { + isChangingValue: FieldHook['isChangingValue']; + errors: FieldHook['errors']; +}): { isInvalid: boolean; errorMessage: string | null } => { const isInvalid = !field.isChangingValue && field.errors.length > 0; const errorMessage = !field.isChangingValue && field.errors.length ? field.errors[0].message : null; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/index.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/index.ts index 45c11dd6272e4..aa9610dd85ae3 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/index.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/index.ts @@ -17,6 +17,6 @@ * under the License. */ -export { useField } from './use_field'; +export { useField, InternalFieldConfig } from './use_field'; export { useForm } from './use_form'; export { useFormData } from './use_form_data'; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field.ts index f01c7226ea4ce..bb4aae6eccae8 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field.ts @@ -22,16 +22,22 @@ import { useMemo, useState, useEffect, useRef, useCallback } from 'react'; import { FormHook, FieldHook, FieldConfig, FieldValidateResponse, ValidationError } from '../types'; import { FIELD_TYPES, VALIDATION_TYPES } from '../constants'; +export interface InternalFieldConfig { + initialValue?: T; + isIncludedInOutput?: boolean; +} + export const useField = ( form: FormHook, path: string, - config: FieldConfig & { initialValue?: T } = {}, + config: FieldConfig & InternalFieldConfig = {}, valueChangeListener?: (value: T) => void ) => { const { type = FIELD_TYPES.TEXT, defaultValue = '', // The value to use a fallback mecanism when no initial value is passed initialValue = config.defaultValue ?? '', // The value explicitly passed + isIncludedInOutput = true, label = '', labelAppend = '', helpText = '', @@ -201,7 +207,7 @@ export const useField = ( validationTypeToValidate, }: { formData: any; - value: unknown; + value: T; validationTypeToValidate?: string; }): ValidationError[] | Promise => { if (!validations) { @@ -234,7 +240,7 @@ export const useField = ( } inflightValidation.current = validator({ - value: (valueToValidate as unknown) as string, + value: valueToValidate, errors: validationErrors, form: { getFormData, getFields }, formData, @@ -280,7 +286,7 @@ export const useField = ( } const validationResult = validator({ - value: (valueToValidate as unknown) as string, + value: valueToValidate, errors: validationErrors, form: { getFormData, getFields }, formData, @@ -388,9 +394,15 @@ export const useField = ( */ const setValue: FieldHook['setValue'] = useCallback( (newValue) => { - const formattedValue = formatInputValue(newValue); - setStateValue(formattedValue); - return formattedValue; + setStateValue((prev) => { + let formattedValue: T; + if (typeof newValue === 'function') { + formattedValue = formatInputValue((newValue as Function)(prev)); + } else { + formattedValue = formatInputValue(newValue); + } + return formattedValue; + }); }, [formatInputValue] ); @@ -496,6 +508,7 @@ export const useField = ( clearErrors, validate, reset, + __isIncludedInOutput: isIncludedInOutput, __serializeValue: serializeValue, }; }, [ @@ -511,6 +524,7 @@ export const useField = ( isValidating, isValidated, isChangingValue, + isIncludedInOutput, onChange, getErrorsMessages, setValue, diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_form.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_form.ts index 7b72a9eeacf7b..b390c17d3c2ff 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_form.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_form.ts @@ -95,19 +95,25 @@ export function useForm( const fieldsToArray = useCallback(() => Object.values(fieldsRefs.current), []); - const stripEmptyFields = useCallback( - (fields: FieldsMap): FieldsMap => { - if (formOptions.stripEmptyFields) { - return Object.entries(fields).reduce((acc, [key, field]) => { - if (typeof field.value !== 'string' || field.value.trim() !== '') { - acc[key] = field; - } + const getFieldsForOutput = useCallback( + (fields: FieldsMap, opts: { stripEmptyFields: boolean }): FieldsMap => { + return Object.entries(fields).reduce((acc, [key, field]) => { + if (!field.__isIncludedInOutput) { return acc; - }, {} as FieldsMap); - } - return fields; + } + + if (opts.stripEmptyFields) { + const isFieldEmpty = typeof field.value === 'string' && field.value.trim() === ''; + if (isFieldEmpty) { + return acc; + } + } + + acc[key] = field; + return acc; + }, {} as FieldsMap); }, - [formOptions] + [] ); const updateFormDataAt: FormHook['__updateFormDataAt'] = useCallback( @@ -133,8 +139,10 @@ export function useForm( const getFormData: FormHook['getFormData'] = useCallback( (getDataOptions: Parameters['getFormData']>[0] = { unflatten: true }) => { if (getDataOptions.unflatten) { - const nonEmptyFields = stripEmptyFields(fieldsRefs.current); - const fieldsValue = mapFormFields(nonEmptyFields, (field) => field.__serializeValue()); + const fieldsToOutput = getFieldsForOutput(fieldsRefs.current, { + stripEmptyFields: formOptions.stripEmptyFields, + }); + const fieldsValue = mapFormFields(fieldsToOutput, (field) => field.__serializeValue()); return serializer ? (serializer(unflattenObject(fieldsValue)) as T) : (unflattenObject(fieldsValue) as T); @@ -148,7 +156,7 @@ export function useForm( {} as T ); }, - [stripEmptyFields, serializer] + [getFieldsForOutput, formOptions.stripEmptyFields, serializer] ); const getErrors: FormHook['getErrors'] = useCallback(() => { diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/types.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/types.ts index 4b343ec5e9f2e..18b8f478f7c0e 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/types.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/types.ts @@ -108,15 +108,18 @@ export interface FieldHook { errorCode?: string; }) => string | null; onChange: (event: ChangeEvent<{ name?: string; value: string; checked?: boolean }>) => void; - setValue: (value: T) => T; + setValue: (value: T | ((prevValue: T) => T)) => void; setErrors: (errors: ValidationError[]) => void; clearErrors: (type?: string | string[]) => void; validate: (validateData?: { formData?: any; - value?: unknown; + value?: T; validationType?: string; }) => FieldValidateResponse | Promise; reset: (options?: { resetValue?: boolean; defaultValue?: T }) => unknown | undefined; + // Flag to indicate if the field value will be included in the form data outputted + // when calling form.getFormData(); + __isIncludedInOutput: boolean; __serializeValue: (rawValue?: unknown) => unknown; } @@ -127,7 +130,7 @@ export interface FieldConfig { readonly helpText?: string | ReactNode; readonly type?: HTMLInputElement['type']; readonly defaultValue?: ValueType; - readonly validations?: Array>; + readonly validations?: Array>; readonly formatters?: FormatterFunc[]; readonly deserializer?: SerializerFunc; readonly serializer?: SerializerFunc; @@ -163,8 +166,8 @@ export interface ValidationFuncArg { errors: readonly ValidationError[]; } -export type ValidationFunc = ( - data: ValidationFuncArg +export type ValidationFunc = ( + data: ValidationFuncArg ) => ValidationError | void | undefined | Promise | void | undefined>; export interface FieldValidateResponse { @@ -184,8 +187,8 @@ type FormatterFunc = (value: any, formData: FormData) => unknown; // string | number | boolean | string[] ... type FieldValue = unknown; -export interface ValidationConfig { - validator: ValidationFunc; +export interface ValidationConfig { + validator: ValidationFunc; type?: string; /** * By default all validation are blockers, which means that if they fail, the field is invalid. diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/types/document_fields.ts b/x-pack/plugins/index_management/public/application/components/mappings_editor/types/document_fields.ts index a9f6d2ea03bdf..6882ddea4ad5d 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/types/document_fields.ts +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/types/document_fields.ts @@ -24,7 +24,7 @@ export interface DataTypeDefinition { export interface ParameterDefinition { title?: string; description?: JSX.Element | string; - fieldConfig: FieldConfig; + fieldConfig: FieldConfig; schema?: any; props?: { [key: string]: ParameterDefinition }; documentation?: { diff --git a/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx b/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx index c7810af13eb74..5a4eaad72ac32 100644 --- a/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx +++ b/x-pack/plugins/security_solution/public/common/mock/test_providers.tsx @@ -95,6 +95,7 @@ export const useFormFieldMock = (options?: Partial): FieldHook => { clearErrors: jest.fn(), validate: jest.fn(), reset: jest.fn(), + __isIncludedInOutput: true, __serializeValue: jest.fn(), ...options, }; From 60294cbcf431e7f21b6665449cd5d8cc881c23f2 Mon Sep 17 00:00:00 2001 From: Joe Portner <5295965+jportner@users.noreply.github.com> Date: Wed, 9 Sep 2020 08:56:04 -0400 Subject: [PATCH 55/58] Update saved object management UI text (#76826) --- .../__snapshots__/flyout.test.tsx.snap | 8 +- .../__snapshots__/header.test.tsx.snap | 2 +- .../objects_table/components/flyout.test.tsx | 4 + .../objects_table/components/flyout.tsx | 15 ++-- .../objects_table/components/header.tsx | 5 +- .../components/import_mode_control.tsx | 11 +-- .../components/import_summary.test.tsx | 6 +- .../components/import_summary.tsx | 23 ++++-- .../components/overwrite_modal.test.tsx | 4 +- .../components/overwrite_modal.tsx | 6 +- .../components/copy_mode_control.tsx | 18 +++-- .../components/copy_status_indicator.tsx | 74 +++++++++++-------- .../copy_status_summary_indicator.tsx | 6 +- .../components/copy_to_space_flyout.test.tsx | 4 +- .../components/copy_to_space_form.tsx | 2 +- .../components/processing_copy_to_space.tsx | 42 +++++------ .../components/selectable_spaces_control.tsx | 2 +- .../unauthorized_prompt.test.tsx.snap | 2 +- .../unauthorized_prompt.tsx | 2 +- .../components/share_to_space_flyout.tsx | 39 +++++++--- .../components/share_to_space_form.tsx | 6 +- .../share_saved_objects_to_space_column.tsx | 2 +- .../translations/translations/ja-JP.json | 8 -- .../translations/translations/zh-CN.json | 8 -- 24 files changed, 162 insertions(+), 137 deletions(-) diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap index 9ad82723c1161..0a330d074fd42 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap @@ -122,6 +122,8 @@ exports[`Flyout conflicts should allow conflict resolution 1`] = ` grow={false} > @@ -420,6 +422,8 @@ exports[`Flyout legacy conflicts should allow conflict resolution 1`] = ` grow={false} > @@ -553,7 +557,7 @@ exports[`Flyout should render import step 1`] = ` hasEmptyLabelSpace={false} label={ @@ -603,6 +607,8 @@ exports[`Flyout should render import step 1`] = ` grow={false} > diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap index 642a5030e4ec0..038e1aaf2d8f5 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap @@ -92,7 +92,7 @@ exports[`Header should render normally 1`] = ` color="subdued" > diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx index 32462e1e2184d..cc9d2ed160241 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx @@ -267,6 +267,10 @@ describe('Flyout', () => { expect(component.state('status')).toBe('success'); expect(component.find('EuiFlyout ImportSummary')).toMatchSnapshot(); + const cancelButton = await component.find( + 'EuiButtonEmpty[data-test-subj="importSavedObjectsCancelBtn"]' + ); + expect(cancelButton.prop('disabled')).toBe(true); }); }); diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx index eddca18f9e283..47d82077294cc 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx @@ -729,7 +729,7 @@ export class Flyout extends Component { label={ } > @@ -756,7 +756,7 @@ export class Flyout extends Component { } renderFooter() { - const { status } = this.state; + const { isLegacyFile, status } = this.state; const { done, close } = this.props; let confirmButton; @@ -773,7 +773,7 @@ export class Flyout extends Component { } else if (this.hasUnmatchedReferences) { confirmButton = ( { } else { confirmButton = ( { return ( - +

diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_mode_control.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_mode_control.tsx index ac8099893d00e..4000d620465a8 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_mode_control.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_mode_control.tsx @@ -51,8 +51,7 @@ const createNewCopiesDisabled = { tooltip: i18n.translate( 'savedObjectsManagement.objectsTable.importModeControl.createNewCopies.disabledText', { - defaultMessage: - 'Check if each object was previously copied or imported into the destination space.', + defaultMessage: 'Check if objects were previously copied or imported.', } ), }; @@ -64,21 +63,23 @@ const createNewCopiesEnabled = { ), tooltip: i18n.translate( 'savedObjectsManagement.objectsTable.importModeControl.createNewCopies.enabledText', - { defaultMessage: 'All imported objects will be created with new random IDs.' } + { + defaultMessage: 'Use this option to create one or more copies of the object.', + } ), }; const overwriteEnabled = { id: 'overwriteEnabled', label: i18n.translate( 'savedObjectsManagement.objectsTable.importModeControl.overwrite.enabledLabel', - { defaultMessage: 'Automatically try to overwrite conflicts' } + { defaultMessage: 'Automatically overwrite conflicts' } ), }; const overwriteDisabled = { id: 'overwriteDisabled', label: i18n.translate( 'savedObjectsManagement.objectsTable.importModeControl.overwrite.disabledLabel', - { defaultMessage: 'Request action when conflict occurs' } + { defaultMessage: 'Request action on conflict' } ), }; const importOptionsTitle = i18n.translate( diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_summary.test.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_summary.test.tsx index ed65131b0fc6b..20ac5a903ef22 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_summary.test.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_summary.test.tsx @@ -70,7 +70,7 @@ describe('ImportSummary', () => { const wrapper = shallowWithI18nProvider(); expect(findHeader(wrapper).childAt(0).props()).toEqual( - expect.objectContaining({ values: { importCount: 1 } }) + expect.not.objectContaining({ values: expect.anything() }) // no importCount for singular ); const countCreated = findCountCreated(wrapper); expect(countCreated).toHaveLength(1); @@ -90,7 +90,7 @@ describe('ImportSummary', () => { const wrapper = shallowWithI18nProvider(); expect(findHeader(wrapper).childAt(0).props()).toEqual( - expect.objectContaining({ values: { importCount: 1 } }) + expect.not.objectContaining({ values: expect.anything() }) // no importCount for singular ); expect(findCountCreated(wrapper)).toHaveLength(0); const countOverwritten = findCountOverwritten(wrapper); @@ -110,7 +110,7 @@ describe('ImportSummary', () => { const wrapper = shallowWithI18nProvider(); expect(findHeader(wrapper).childAt(0).props()).toEqual( - expect.objectContaining({ values: { importCount: 1 } }) + expect.not.objectContaining({ values: expect.anything() }) // no importCount for singular ); expect(findCountCreated(wrapper)).toHaveLength(0); expect(findCountOverwritten(wrapper)).toHaveLength(0); diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_summary.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_summary.tsx index 7949f7d18d350..e2ce3c3695b17 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_summary.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/import_summary.tsx @@ -141,7 +141,7 @@ const getCountIndicators = (importItems: ImportItem[]) => { ); }; -const getStatusIndicator = ({ outcome, errorMessage }: ImportItem) => { +const getStatusIndicator = ({ outcome, errorMessage = 'Error' }: ImportItem) => { switch (outcome) { case 'created': return ( @@ -168,8 +168,8 @@ const getStatusIndicator = ({ outcome, errorMessage }: ImportItem) => { type={'alert'} color={'danger'} content={i18n.translate('savedObjectsManagement.importSummary.errorOutcomeLabel', { - defaultMessage: 'Error{message}', - values: { message: errorMessage ? `: ${errorMessage}` : '' }, + defaultMessage: '{errorMessage}', + values: { errorMessage }, })} /> ); @@ -194,11 +194,18 @@ export const ImportSummary = ({ failedImports, successfulImports }: ImportSummar } >

- + {importItems.length === 1 ? ( + + ) : ( + + )}

diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/overwrite_modal.test.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/overwrite_modal.test.tsx index c93bc9e5038df..7576b62552aa2 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/overwrite_modal.test.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/overwrite_modal.test.tsx @@ -40,7 +40,7 @@ describe('OverwriteModal', () => { const wrapper = shallowWithI18nProvider(); expect(wrapper.find('p').text()).toMatchInlineSnapshot( - `"\\"baz\\" conflicts with an existing object, are you sure you want to overwrite it?"` + `"\\"baz\\" conflicts with an existing object. Overwrite it?"` ); expect(wrapper.find('EuiSuperSelect')).toHaveLength(0); }); @@ -82,7 +82,7 @@ describe('OverwriteModal', () => { const wrapper = shallowWithI18nProvider(); expect(wrapper.find('p').text()).toMatchInlineSnapshot( - `"\\"baz\\" conflicts with multiple existing objects, do you want to overwrite one of them?"` + `"\\"baz\\" conflicts with multiple existing objects. Overwrite one?"` ); expect(wrapper.find('EuiSuperSelect')).toHaveLength(1); }); diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/overwrite_modal.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/overwrite_modal.tsx index dbe95161cbeae..bf27d407fbe94 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/overwrite_modal.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/overwrite_modal.tsx @@ -98,15 +98,13 @@ export const OverwriteModal = ({ conflict, onFinish }: OverwriteModalProps) => { const bodyText = error.type === 'conflict' ? i18n.translate('savedObjectsManagement.objectsTable.overwriteModal.body.conflict', { - defaultMessage: - '"{title}" conflicts with an existing object, are you sure you want to overwrite it?', + defaultMessage: '"{title}" conflicts with an existing object. Overwrite it?', values: { title }, }) : i18n.translate( 'savedObjectsManagement.objectsTable.overwriteModal.body.ambiguousConflict', { - defaultMessage: - '"{title}" conflicts with multiple existing objects, do you want to overwrite one of them?', + defaultMessage: '"{title}" conflicts with multiple existing objects. Overwrite one?', values: { title }, } ); diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_mode_control.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_mode_control.tsx index 42fbf8954396e..c3e631e335ea7 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_mode_control.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_mode_control.tsx @@ -37,8 +37,7 @@ const createNewCopiesDisabled = { tooltip: i18n.translate( 'xpack.spaces.management.copyToSpace.copyModeControl.createNewCopies.disabledText', { - defaultMessage: - 'Check if each object was previously copied or imported into the destination space.', + defaultMessage: 'Check if objects were previously copied or imported into the space.', } ), }; @@ -50,33 +49,36 @@ const createNewCopiesEnabled = { ), tooltip: i18n.translate( 'xpack.spaces.management.copyToSpace.copyModeControl.createNewCopies.enabledText', - { defaultMessage: 'All copied objects will be created with new random IDs.' } + { + defaultMessage: + 'Use this option to create one or more copies of the object in the same space.', + } ), }; const overwriteEnabled = { id: 'overwriteEnabled', label: i18n.translate( 'xpack.spaces.management.copyToSpace.copyModeControl.overwrite.enabledLabel', - { defaultMessage: 'Automatically try to overwrite conflicts' } + { defaultMessage: 'Automatically overwrite conflicts' } ), }; const overwriteDisabled = { id: 'overwriteDisabled', label: i18n.translate( 'xpack.spaces.management.copyToSpace.copyModeControl.overwrite.disabledLabel', - { defaultMessage: 'Request action when conflict occurs' } + { defaultMessage: 'Request action on conflict' } ), }; const includeRelated = { id: 'includeRelated', text: i18n.translate('xpack.spaces.management.copyToSpace.copyModeControl.includeRelated.title', { - defaultMessage: 'Include related saved objects', + defaultMessage: 'Include related objects', }), tooltip: i18n.translate( 'xpack.spaces.management.copyToSpace.copyModeControl.includeRelated.text', { defaultMessage: - 'This will copy any other objects this has references to -- for example, a dashboard may have references to multiple visualizations.', + 'Copy this object and its related objects. For dashboards, related visualizations, index patterns, and saved searches are also copied.', } ), }; @@ -86,7 +88,7 @@ const copyOptionsTitle = i18n.translate( ); const relationshipOptionsTitle = i18n.translate( 'xpack.spaces.management.copyToSpace.copyModeControl.relationshipOptionsTitle', - { defaultMessage: 'Relationship options' } + { defaultMessage: 'Relationship' } ); const createLabel = ({ text, tooltip }: { text: string; tooltip: string }) => ( diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_status_indicator.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_status_indicator.tsx index 158d7a9a43ef6..d9e1418cdd412 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_status_indicator.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_status_indicator.tsx @@ -5,7 +5,7 @@ */ import React, { Fragment } from 'react'; -import { EuiLoadingSpinner, EuiIconTip, EuiSpacer } from '@elastic/eui'; +import { EuiLoadingSpinner, EuiIconTip } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { ImportRetry } from '../types'; import { SummarizedCopyToSpaceResult, SummarizedSavedObjectResult } from '..'; @@ -36,13 +36,13 @@ export const CopyStatusIndicator = (props: Props) => { // the object was overwritten ) : ( // the object was not overwritten ); return ; @@ -53,19 +53,19 @@ export const CopyStatusIndicator = (props: Props) => { // this is an "automatic overwrite", e.g., the "Overwrite all conflicts" option was selected ) : pendingObjectRetry?.overwrite ? ( // this is a manual overwrite, e.g., the individual "Overwrite?" switch was enabled ) : ( // this object is pending success, but it will not result in an overwrite ); return ; @@ -80,7 +80,7 @@ export const CopyStatusIndicator = (props: Props) => { content={ } /> @@ -88,28 +88,38 @@ export const CopyStatusIndicator = (props: Props) => { } if (hasConflicts) { - return ( - - - - - - } - /> - ); + switch (conflict!.error.type) { + case 'conflict': + return ( + + + + } + /> + ); + case 'ambiguous_conflict': + return ( + + + + } + /> + ); + } } return hasMissingReferences ? ( @@ -121,17 +131,17 @@ export const CopyStatusIndicator = (props: Props) => { overwrite ? ( ) : conflict ? ( ) : ( ) } diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_status_summary_indicator.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_status_summary_indicator.tsx index 4bc7e5cfaf31a..4dfb14e756cd6 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_status_summary_indicator.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_status_summary_indicator.tsx @@ -55,7 +55,7 @@ const renderIcon = (props: Props) => { content={ } @@ -93,7 +93,7 @@ const renderIcon = (props: Props) => { content={ } @@ -119,7 +119,7 @@ const renderIcon = (props: Props) => { content={ } diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.test.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.test.tsx index dfc908d81887a..e214db22aa9cc 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.test.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.test.tsx @@ -510,7 +510,7 @@ describe('CopyToSpaceFlyout', () => { Object { "color": "warning", "content": , @@ -604,7 +604,7 @@ describe('CopyToSpaceFlyout', () => { Object { "color": "danger", "content": , diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_form.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_form.tsx index fdc8d8c73e324..551573feebcdb 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_form.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_form.tsx @@ -51,7 +51,7 @@ export const CopyToSpaceForm = (props: Props) => { label={ } fullWidth diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx index ceaa1dc9f5e21..ab8fb0b438f67 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx @@ -45,36 +45,30 @@ const renderCopyOptions = ({ createNewCopies, overwrite, includeRelated }: CopyO defaultMessage="Check for existing objects" /> ); - const overwriteLabel = overwrite ? ( - - ) : ( - - ); - const includeRelatedLabel = includeRelated ? ( - - ) : ( - - ); return ( {!createNewCopies && ( - + + } + /> )} - + + } + /> ); }; diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/selectable_spaces_control.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/selectable_spaces_control.tsx index 2a8b5e660f38c..d4e12b31b5b4f 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/selectable_spaces_control.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/selectable_spaces_control.tsx @@ -31,7 +31,7 @@ export const SelectableSpacesControl = (props: Props) => { content={ } position="left" diff --git a/x-pack/plugins/spaces/public/management/components/unauthorized_prompt/__snapshots__/unauthorized_prompt.test.tsx.snap b/x-pack/plugins/spaces/public/management/components/unauthorized_prompt/__snapshots__/unauthorized_prompt.test.tsx.snap index b53b4d6ec7caf..1e761a0f14fc9 100644 --- a/x-pack/plugins/spaces/public/management/components/unauthorized_prompt/__snapshots__/unauthorized_prompt.test.tsx.snap +++ b/x-pack/plugins/spaces/public/management/components/unauthorized_prompt/__snapshots__/unauthorized_prompt.test.tsx.snap @@ -7,7 +7,7 @@ exports[`UnauthorizedPrompt renders as expected 1`] = ` data-test-subj="permissionDeniedMessage" > diff --git a/x-pack/plugins/spaces/public/management/components/unauthorized_prompt/unauthorized_prompt.tsx b/x-pack/plugins/spaces/public/management/components/unauthorized_prompt/unauthorized_prompt.tsx index dd3f96d94eab4..50f10ec3860df 100644 --- a/x-pack/plugins/spaces/public/management/components/unauthorized_prompt/unauthorized_prompt.tsx +++ b/x-pack/plugins/spaces/public/management/components/unauthorized_prompt/unauthorized_prompt.tsx @@ -24,7 +24,7 @@ export const UnauthorizedPrompt = () => (

} diff --git a/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/share_to_space_flyout.tsx b/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/share_to_space_flyout.tsx index 10cc5777cdcff..053fcb4fdabf8 100644 --- a/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/share_to_space_flyout.tsx +++ b/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/share_to_space_flyout.tsx @@ -104,20 +104,27 @@ export const ShareSavedObjectsToSpaceFlyout = (props: Props) => { const title = currentNamespaces.length === 1 ? i18n.translate('xpack.spaces.management.shareToSpace.shareNewSuccessTitle', { - defaultMessage: 'Saved Object is now shared!', + defaultMessage: 'Object is now shared', }) : i18n.translate('xpack.spaces.management.shareToSpace.shareEditSuccessTitle', { - defaultMessage: 'Saved Object updated', + defaultMessage: 'Object was updated', }); if (spacesToAdd.length > 0) { await spacesManager.shareSavedObjectAdd({ type, id }, spacesToAdd); const spaceNames = spacesToAdd.map( (spaceId) => spaces.find((space) => space.id === spaceId)!.name ); - const text = i18n.translate('xpack.spaces.management.shareToSpace.shareAddSuccessText', { - defaultMessage: `'{object}' was added to the following spaces:\n{spaces}`, - values: { object: meta.title, spaces: spaceNames.join(', ') }, - }); + const spaceCount = spaceNames.length; + const text = + spaceCount === 1 + ? i18n.translate('xpack.spaces.management.shareToSpace.shareAddSuccessTextSingular', { + defaultMessage: `'{object}' was added to 1 space.`, + values: { object: meta.title }, + }) + : i18n.translate('xpack.spaces.management.shareToSpace.shareAddSuccessTextPlural', { + defaultMessage: `'{object}' was added to {spaceCount} spaces.`, + values: { object: meta.title, spaceCount }, + }); toastNotifications.addSuccess({ title, text }); } if (spacesToRemove.length > 0) { @@ -125,10 +132,20 @@ export const ShareSavedObjectsToSpaceFlyout = (props: Props) => { const spaceNames = spacesToRemove.map( (spaceId) => spaces.find((space) => space.id === spaceId)!.name ); - const text = i18n.translate('xpack.spaces.management.shareToSpace.shareRemoveSuccessText', { - defaultMessage: `'{object}' was removed from the following spaces:\n{spaces}`, - values: { object: meta.title, spaces: spaceNames.join(', ') }, - }); + const spaceCount = spaceNames.length; + const text = + spaceCount === 1 + ? i18n.translate( + 'xpack.spaces.management.shareToSpace.shareRemoveSuccessTextSingular', + { + defaultMessage: `'{object}' was removed from 1 space.`, + values: { object: meta.title }, + } + ) + : i18n.translate('xpack.spaces.management.shareToSpace.shareRemoveSuccessTextPlural', { + defaultMessage: `'{object}' was removed from {spaceCount} spaces.`, + values: { object: meta.title, spaceCount }, + }); toastNotifications.addSuccess({ title, text }); } onObjectUpdated(); @@ -210,7 +227,7 @@ export const ShareSavedObjectsToSpaceFlyout = (props: Props) => {

diff --git a/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/share_to_space_form.tsx b/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/share_to_space_form.tsx index 24402fec8d771..ad84ea85d5e54 100644 --- a/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/share_to_space_form.tsx +++ b/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/share_to_space_form.tsx @@ -35,14 +35,14 @@ export const ShareToSpaceForm = (props: Props) => { title={ } color="warning" > { label={ } labelAppend={ diff --git a/x-pack/plugins/spaces/public/share_saved_objects_to_space/share_saved_objects_to_space_column.tsx b/x-pack/plugins/spaces/public/share_saved_objects_to_space/share_saved_objects_to_space_column.tsx index e8649faa120be..93d7bb0170519 100644 --- a/x-pack/plugins/spaces/public/share_saved_objects_to_space/share_saved_objects_to_space_column.tsx +++ b/x-pack/plugins/spaces/public/share_saved_objects_to_space/share_saved_objects_to_space_column.tsx @@ -52,7 +52,7 @@ const ColumnDisplay = ({ namespaces, data }: ColumnDataProps) => { const unauthorizedCount = (namespaces?.filter((namespace) => namespace === '?') ?? []).length; const unauthorizedTooltip = i18n.translate( 'xpack.spaces.management.shareToSpace.columnUnauthorizedLabel', - { defaultMessage: 'You do not have permission to view these spaces' } + { defaultMessage: `You don't have permission to view these spaces.` } ); const displayedSpaces = isExpanded diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 8b9409f01087c..89d400f92bce9 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2880,7 +2880,6 @@ "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsDescription": "影響されるオブジェクトのサンプル", "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsName": "影響されるオブジェクトのサンプル", "savedObjectsManagement.objectsTable.flyout.resolveImportErrorsFileErrorMessage": "ファイルを処理できませんでした。", - "savedObjectsManagement.objectsTable.flyout.selectFileToImportFormRowLabel": "インポートするファイルを選択してください", "savedObjectsManagement.objectsTable.header.exportButtonLabel": "{filteredCount, plural, one{# オブジェクト} other {# オブジェクト}}をエクスポート", "savedObjectsManagement.objectsTable.header.importButtonLabel": "インポート", "savedObjectsManagement.objectsTable.header.refreshButtonLabel": "更新", @@ -17600,8 +17599,6 @@ "xpack.spaces.management.copyToSpace.actionTitle": "スペースにコピー", "xpack.spaces.management.copyToSpace.copyErrorTitle": "保存されたオブジェクトのコピー中にエラーが発生", "xpack.spaces.management.copyToSpace.copyResultsLabel": "コピー結果", - "xpack.spaces.management.copyToSpace.copyStatus.conflictsMessage": "このスペースには同じID({id})の保存されたオブジェクトが既に存在します。", - "xpack.spaces.management.copyToSpace.copyStatus.conflictsOverwriteMessage": "「上書き」をクリックしてこのバージョンをコピーされたバージョンに置き換えます。", "xpack.spaces.management.copyToSpace.copyStatus.pendingOverwriteMessage": "保存されたオブジェクトは上書きされます。「スキップ」をクリックしてこの操作をキャンセルします。", "xpack.spaces.management.copyToSpace.copyStatus.successMessage": "保存されたオブジェクトがコピーされました。", "xpack.spaces.management.copyToSpace.copyStatus.unresolvableErrorMessage": "この保存されたオブジェクトのコピー中にエラーが発生しました。", @@ -17610,8 +17607,6 @@ "xpack.spaces.management.copyToSpace.copyStatusSummary.successMessage": "{space}スペースにコピーされました。", "xpack.spaces.management.copyToSpace.copyToSpacesButton": "{spaceCount} {spaceCount, plural, one {スペース} other {スペース}}にコピー", "xpack.spaces.management.copyToSpace.disabledCopyToSpacesButton": "コピー", - "xpack.spaces.management.copyToSpace.dontIncludeRelatedLabel": "関連性のある保存されたオブジェクトを含みません", - "xpack.spaces.management.copyToSpace.dontOverwriteLabel": "保存されたオブジェクトを上書きしません", "xpack.spaces.management.copyToSpace.finishCopyToSpacesButton": "終了", "xpack.spaces.management.copyToSpace.finishedButtonLabel": "コピーが完了しました。", "xpack.spaces.management.copyToSpace.finishPendingOverwritesCopyToSpacesButton": "{overwriteCount}件のオブジェクトを上書き", @@ -17619,10 +17614,8 @@ "xpack.spaces.management.copyToSpace.inProgressButtonLabel": "コピーが進行中です。お待ちください。", "xpack.spaces.management.copyToSpace.noSpacesBody": "コピーできるスペースがありません。", "xpack.spaces.management.copyToSpace.noSpacesTitle": "スペースがありません", - "xpack.spaces.management.copyToSpace.overwriteLabel": "保存されたオブジェクトを自動的に上書きしています", "xpack.spaces.management.copyToSpace.resolveCopyErrorTitle": "保存されたオブジェクトの矛盾の解決中にエラーが発生", "xpack.spaces.management.copyToSpace.resolveCopySuccessTitle": "上書き成功", - "xpack.spaces.management.copyToSpace.selectSpacesLabel": "コピー先のスペースを選択してください", "xpack.spaces.management.copyToSpace.spacesLoadErrorTitle": "利用可能なスペースを読み込み中にエラーが発生", "xpack.spaces.management.copyToSpaceFlyoutFooter.errorCount": "エラー", "xpack.spaces.management.copyToSpaceFlyoutFooter.pendingCount": "保留中", @@ -17701,7 +17694,6 @@ "xpack.spaces.management.spacesGridPage.spacesTitle": "スペース", "xpack.spaces.management.spacesGridPage.spaceSuccessfullyDeletedNotificationMessage": "「{spaceName}」 スペースが削除されました。", "xpack.spaces.management.toggleAllFeaturesLink": "(すべて変更)", - "xpack.spaces.management.unauthorizedPrompt.permissionDeniedDescription": "スペースを管理するパーミッションがありません。", "xpack.spaces.management.unauthorizedPrompt.permissionDeniedTitle": "パーミッションが拒否されました", "xpack.spaces.management.validateSpace.describeMaxLengthErrorMessage": "説明は 2000 文字以内でなければなりません。", "xpack.spaces.management.validateSpace.nameMaxLengthErrorMessage": "名前はは 1024 文字以内でなければなりません。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b9fb6340e38cf..4fa6544caf191 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2881,7 +2881,6 @@ "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsDescription": "受影响对象样例", "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsName": "受影响对象样例", "savedObjectsManagement.objectsTable.flyout.resolveImportErrorsFileErrorMessage": "无法处理该文件。", - "savedObjectsManagement.objectsTable.flyout.selectFileToImportFormRowLabel": "请选择要导入的文件", "savedObjectsManagement.objectsTable.header.exportButtonLabel": "导出 {filteredCount, plural, one{# 个对象} other {# 个对象}}", "savedObjectsManagement.objectsTable.header.importButtonLabel": "导入", "savedObjectsManagement.objectsTable.header.refreshButtonLabel": "刷新", @@ -17610,8 +17609,6 @@ "xpack.spaces.management.copyToSpace.actionTitle": "复制到工作区", "xpack.spaces.management.copyToSpace.copyErrorTitle": "复制已保存对象时出错", "xpack.spaces.management.copyToSpace.copyResultsLabel": "复制结果", - "xpack.spaces.management.copyToSpace.copyStatus.conflictsMessage": "具有匹配 ID ({id}) 的已保存对象在此工作区中已存在。", - "xpack.spaces.management.copyToSpace.copyStatus.conflictsOverwriteMessage": "单击“覆盖”可将此版本替换为复制的版本。", "xpack.spaces.management.copyToSpace.copyStatus.pendingOverwriteMessage": "已保存对象将被覆盖。单击“跳过”可取消此操作。", "xpack.spaces.management.copyToSpace.copyStatus.successMessage": "已保存对象成功复制。", "xpack.spaces.management.copyToSpace.copyStatus.unresolvableErrorMessage": "复制此已保存对象时出错。", @@ -17620,8 +17617,6 @@ "xpack.spaces.management.copyToSpace.copyStatusSummary.successMessage": "已成功复制到 {space} 工作区。", "xpack.spaces.management.copyToSpace.copyToSpacesButton": "复制到 {spaceCount} {spaceCount, plural, one {个工作区} other {个工作区}}", "xpack.spaces.management.copyToSpace.disabledCopyToSpacesButton": "复制", - "xpack.spaces.management.copyToSpace.dontIncludeRelatedLabel": "不包括相关已保存对象", - "xpack.spaces.management.copyToSpace.dontOverwriteLabel": "未覆盖已保存对象", "xpack.spaces.management.copyToSpace.finishCopyToSpacesButton": "完成", "xpack.spaces.management.copyToSpace.finishedButtonLabel": "复制已完成。", "xpack.spaces.management.copyToSpace.finishPendingOverwritesCopyToSpacesButton": "覆盖 {overwriteCount} 个对象", @@ -17629,10 +17624,8 @@ "xpack.spaces.management.copyToSpace.inProgressButtonLabel": "复制正在进行中。请稍候。", "xpack.spaces.management.copyToSpace.noSpacesBody": "没有可向其中进行复制的合格工作区。", "xpack.spaces.management.copyToSpace.noSpacesTitle": "没有可用的工作区", - "xpack.spaces.management.copyToSpace.overwriteLabel": "正在自动覆盖已保存对象", "xpack.spaces.management.copyToSpace.resolveCopyErrorTitle": "解决已保存对象冲突时出错", "xpack.spaces.management.copyToSpace.resolveCopySuccessTitle": "覆盖成功", - "xpack.spaces.management.copyToSpace.selectSpacesLabel": "选择要向其中进行复制的工作区", "xpack.spaces.management.copyToSpace.spacesLoadErrorTitle": "加载可用工作区时出错", "xpack.spaces.management.copyToSpaceFlyoutFooter.errorCount": "错误", "xpack.spaces.management.copyToSpaceFlyoutFooter.pendingCount": "待处理", @@ -17711,7 +17704,6 @@ "xpack.spaces.management.spacesGridPage.spacesTitle": "工作区", "xpack.spaces.management.spacesGridPage.spaceSuccessfullyDeletedNotificationMessage": "已删除 “{spaceName}” 空间。", "xpack.spaces.management.toggleAllFeaturesLink": "(全部更改)", - "xpack.spaces.management.unauthorizedPrompt.permissionDeniedDescription": "您没有权限管理空间。", "xpack.spaces.management.unauthorizedPrompt.permissionDeniedTitle": "权限被拒绝", "xpack.spaces.management.validateSpace.describeMaxLengthErrorMessage": "描述不能超过 2000 个字符。", "xpack.spaces.management.validateSpace.nameMaxLengthErrorMessage": "名称不能超过 1024 个字符。", From 1c3f0fc7d08fd093cf1a218da28ecc21eaaaff9a Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Wed, 9 Sep 2020 15:10:15 +0200 Subject: [PATCH 56/58] [Snapshot & Restore] fix pre existing policy with no existing repository (#76861) * implement fix and add callout with copy * added test * make callout a danger callout and revise copy * block the form if we have a repo, but it does not exist * added test to assert that form wizard blocks on validation for not found repo * fix types and add a doc comment * move callout to above the form Co-authored-by: Elastic Machine --- .../helpers/policy_form.helpers.ts | 2 + .../client_integration/policy_add.test.ts | 5 ++ .../client_integration/policy_edit.test.ts | 38 +++++++++++++++ .../policy_form/steps/step_logistics.tsx | 46 ++++++++++++++++++- .../services/validation/validate_policy.ts | 16 ++++++- 5 files changed, 103 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_form.helpers.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_form.helpers.ts index a3ab829ab642c..ab2963223f678 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_form.helpers.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_form.helpers.ts @@ -56,4 +56,6 @@ export type PolicyFormTestSubjects = | 'showAdvancedCronLink' | 'snapshotNameInput' | 'dataStreamBadge' + | 'repositoryNotFoundWarning' + | 'repositorySelect' | 'submitButton'; diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_add.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_add.test.ts index dc568161d4fb4..f7d6a60703bc4 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_add.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_add.test.ts @@ -67,6 +67,11 @@ describe('', () => { expect(find('nextButton').props().disabled).toBe(true); }); + test('should not show repository-not-found warning', () => { + const { exists } = testBed; + expect(exists('repositoryNotFoundWarning')).toBe(false); + }); + describe('form validation', () => { describe('logistics (step 1)', () => { test('should require a policy name', async () => { diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts index a5b2ec73b85cd..7c095256bd10f 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts @@ -52,6 +52,44 @@ describe('', () => { expect(find('pageTitle').text()).toEqual('Edit policy'); }); + describe('policy with pre-existing repository that was deleted', () => { + beforeEach(async () => { + httpRequestsMockHelpers.setGetPolicyResponse({ policy: POLICY_EDIT }); + httpRequestsMockHelpers.setLoadIndicesResponse({ + indices: ['my_index'], + dataStreams: ['my_data_stream'], + }); + httpRequestsMockHelpers.setLoadRepositoriesResponse({ + repositories: [{ name: 'this-is-a-new-repository' }], + }); + + testBed = await setup(); + + await act(async () => { + await nextTick(); + testBed.component.update(); + }); + }); + + test('should show repository-not-found warning', () => { + const { exists, find } = testBed; + expect(exists('repositoryNotFoundWarning')).toBe(true); + // The select should be an empty string to allow users to select a new repository + expect(find('repositorySelect').props().value).toBe(''); + }); + + describe('validation', () => { + test('should block navigating to next step', () => { + const { exists, find, actions } = testBed; + actions.clickNextButton(); + // Assert that we are still on the repository configuration step + expect(exists('repositoryNotFoundWarning')).toBe(true); + // The select should be an empty string to allow users to select a new repository + expect(find('repositorySelect').props().value).toBe(''); + }); + }); + }); + /** * As the "edit" policy component uses the same form underneath that * the "create" policy, we won't test it again but simply make sure that diff --git a/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx b/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx index 8a7338f4db4e7..f825c7b1f3d98 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx @@ -18,6 +18,8 @@ import { EuiLink, EuiSpacer, EuiText, + EuiCallOut, + EuiCode, } from '@elastic/eui'; import { Repository } from '../../../../../common/types'; @@ -54,6 +56,10 @@ export const PolicyStepLogistics: React.FunctionComponent = ({ const { i18n, history } = useServices(); + const [showRepositoryNotFoundWarning, setShowRepositoryNotFoundWarning] = useState( + false + ); + // State for touched inputs const [touched, setTouched] = useState({ name: false, @@ -256,13 +262,26 @@ export const PolicyStepLogistics: React.FunctionComponent = ({ } } + const doesRepositoryExist = + !!policy.repository && + repositories.some((r: { name: string }) => r.name === policy.repository); + + if (!doesRepositoryExist && !errors.repository) { + updatePolicy(policy, { repositoryDoesNotExist: true }); + } + + if (showRepositoryNotFoundWarning !== !doesRepositoryExist) { + setShowRepositoryNotFoundWarning(!doesRepositoryExist); + } + return ( ({ value: name, text: name, }))} - value={policy.repository || repositories[0].name} + hasNoInitialSelection={!doesRepositoryExist} + value={!doesRepositoryExist ? '' : policy.repository} onBlur={() => setTouched({ ...touched, repository: true })} onChange={(e) => { updatePolicy( @@ -541,8 +560,31 @@ export const PolicyStepLogistics: React.FunctionComponent = ({ - + {showRepositoryNotFoundWarning && ( + <> + + + } + color="danger" + iconType="alert" + > + {policy.repository} }} + /> + + + )} + + {renderNameField()} {renderSnapshotNameField()} {renderRepositoryField()} diff --git a/x-pack/plugins/snapshot_restore/public/application/services/validation/validate_policy.ts b/x-pack/plugins/snapshot_restore/public/application/services/validation/validate_policy.ts index 4314b703722f6..b371ec9f8fe82 100644 --- a/x-pack/plugins/snapshot_restore/public/application/services/validation/validate_policy.ts +++ b/x-pack/plugins/snapshot_restore/public/application/services/validation/validate_policy.ts @@ -41,6 +41,12 @@ export interface ValidatePolicyHelperData { * are not configuring this value - like when they are on a previous step. */ validateIndicesCount?: boolean; + + /** + * A policy might be configured with a repository that no longer exists. We want the form to + * block in this case because just having a repository configured is not enough for validity. + */ + repositoryDoesNotExist?: boolean; } export const validatePolicy = ( @@ -50,7 +56,13 @@ export const validatePolicy = ( const i18n = textService.i18n; const { name, snapshotName, schedule, repository, config, retention } = policy; - const { managedRepository, isEditing, policyName, validateIndicesCount } = validationHelperData; + const { + managedRepository, + isEditing, + policyName, + validateIndicesCount, + repositoryDoesNotExist, + } = validationHelperData; const validation: PolicyValidation = { isValid: true, @@ -99,7 +111,7 @@ export const validatePolicy = ( ); } - if (isStringEmpty(repository)) { + if (isStringEmpty(repository) || repositoryDoesNotExist) { validation.errors.repository.push( i18n.translate('xpack.snapshotRestore.policyValidation.repositoryRequiredErrorMessage', { defaultMessage: 'Repository is required.', From db5652e020401fceaf2d95cfe258d133de3aadb4 Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Wed, 9 Sep 2020 16:17:11 +0300 Subject: [PATCH 57/58] [Alerting][Connectors] Refactor Jira: Generic Implementation (phase one) (#73778) --- x-pack/plugins/actions/README.md | 165 +++-- .../case_shema.ts => case/common_schema.ts} | 13 +- .../case_types.ts => case/common_types.ts} | 34 +- .../server/builtin_action_types/case/utils.ts | 10 +- .../builtin_action_types/jira/api.test.ts | 274 +++++++- .../server/builtin_action_types/jira/api.ts | 177 ++++- .../server/builtin_action_types/jira/index.ts | 147 +++- .../server/builtin_action_types/jira/mocks.ts | 38 +- .../builtin_action_types/jira/schema.ts | 79 ++- .../builtin_action_types/jira/service.test.ts | 652 +++++++++++++++++- .../builtin_action_types/jira/service.ts | 271 +++++++- .../builtin_action_types/jira/translations.ts | 16 + .../server/builtin_action_types/jira/types.ts | 170 ++++- .../builtin_action_types/jira/validators.ts | 34 +- .../servicenow/api.test.ts | 8 +- .../builtin_action_types/servicenow/api.ts | 40 +- .../builtin_action_types/servicenow/index.ts | 2 +- .../builtin_action_types/servicenow/mocks.ts | 2 +- .../builtin_action_types/servicenow/schema.ts | 6 +- .../servicenow/translations.ts | 4 +- .../builtin_action_types/servicenow/types.ts | 7 +- .../servicenow/validators.ts | 4 +- x-pack/plugins/case/common/constants.ts | 8 +- .../api/cases/configure/get_connectors.ts | 6 +- .../public/common/lib/connectors/config.ts | 11 +- .../public/common/lib/connectors/index.ts | 1 - .../common/lib/connectors/jira/flyout.tsx | 114 --- .../common/lib/connectors/jira/index.tsx | 54 -- .../lib/connectors/jira/translations.ts | 72 -- .../common/lib/connectors/jira/types.ts | 22 - .../security_solution/public/plugin.tsx | 3 +- .../translations/translations/ja-JP.json | 10 - .../translations/translations/zh-CN.json | 10 - .../case_mappings/field_mapping.tsx | 9 +- .../case_mappings/field_mapping_row.tsx | 0 .../case_mappings/index.ts} | 12 +- .../case_mappings/translations.ts | 0 .../{servicenow => }/case_mappings/types.ts | 7 +- .../{servicenow => }/case_mappings/utils.ts | 12 +- .../email/email_params.test.tsx | 1 + .../components/builtin_action_types/index.ts | 2 + .../builtin_action_types/jira/api.ts | 44 ++ .../builtin_action_types}/jira/config.ts | 6 +- .../builtin_action_types/jira/index.ts | 7 + .../builtin_action_types/jira/jira.test.tsx | 100 +++ .../builtin_action_types/jira/jira.tsx | 69 ++ .../jira/jira_connectors.test.tsx | 99 +++ .../jira/jira_connectors.tsx | 209 ++++++ .../jira/jira_params.test.tsx | 233 +++++++ .../builtin_action_types/jira/jira_params.tsx | 319 +++++++++ .../builtin_action_types}/jira/logo.svg | 0 .../builtin_action_types/jira/translations.ts | 133 ++++ .../builtin_action_types/jira/types.ts | 44 ++ .../jira/use_get_fields_by_issue_type.tsx | 97 +++ .../jira/use_get_issue_types.tsx | 90 +++ .../servicenow/servicenow_connectors.tsx | 17 +- .../servicenow/servicenow_params.tsx | 9 +- .../builtin_action_types/servicenow/types.ts | 9 +- .../action_connector_form/action_form.tsx | 1 + .../public/common/index.ts | 1 + .../triggers_actions_ui/public/types.ts | 1 + .../actions/builtin_action_types/jira.ts | 97 +++ .../basic/tests/actions/index.ts | 1 + .../server/jira_simulation.ts | 51 ++ .../actions_simulators/server/plugin.ts | 1 + .../actions/builtin_action_types/jira.ts | 111 +-- .../case_api_integration/common/lib/utils.ts | 3 +- 67 files changed, 3582 insertions(+), 677 deletions(-) rename x-pack/plugins/actions/server/builtin_action_types/{servicenow/case_shema.ts => case/common_schema.ts} (72%) rename x-pack/plugins/actions/server/builtin_action_types/{servicenow/case_types.ts => case/common_types.ts} (53%) delete mode 100644 x-pack/plugins/security_solution/public/common/lib/connectors/jira/flyout.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/lib/connectors/jira/index.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/lib/connectors/jira/translations.ts delete mode 100644 x-pack/plugins/security_solution/public/common/lib/connectors/jira/types.ts rename x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/{servicenow => }/case_mappings/field_mapping.tsx (95%) rename x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/{servicenow => }/case_mappings/field_mapping_row.tsx (100%) rename x-pack/plugins/{actions/server/builtin_action_types/jira/config.ts => triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/index.ts} (51%) rename x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/{servicenow => }/case_mappings/translations.ts (100%) rename x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/{servicenow => }/case_mappings/types.ts (72%) rename x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/{servicenow => }/case_mappings/utils.ts (76%) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/api.ts rename x-pack/plugins/{security_solution/public/common/lib/connectors => triggers_actions_ui/public/application/components/builtin_action_types}/jira/config.ts (87%) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/index.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_connectors.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_connectors.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.tsx rename x-pack/plugins/{security_solution/public/common/lib/connectors => triggers_actions_ui/public/application/components/builtin_action_types}/jira/logo.svg (100%) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/translations.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/types.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/use_get_fields_by_issue_type.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/use_get_issue_types.tsx create mode 100644 x-pack/test/alerting_api_integration/basic/tests/actions/builtin_action_types/jira.ts diff --git a/x-pack/plugins/actions/README.md b/x-pack/plugins/actions/README.md index 868f6f180cc91..3bc8acead6c13 100644 --- a/x-pack/plugins/actions/README.md +++ b/x-pack/plugins/actions/README.md @@ -19,7 +19,7 @@ Table of Contents - [Usage](#usage) - [Kibana Actions Configuration](#kibana-actions-configuration) - [Configuration Options](#configuration-options) - - [Adding Built-in Action Types to allowedHosts](#adding-built-in-action-types-to-hosts-allow-list) + - [Adding Built-in Action Types to allowedHosts](#adding-built-in-action-types-to-allowedhosts) - [Configuration Utilities](#configuration-utilities) - [Action types](#action-types) - [Methods](#methods) @@ -74,13 +74,21 @@ Table of Contents - [`secrets`](#secrets-7) - [`params`](#params-7) - [`subActionParams (pushToService)`](#subactionparams-pushtoservice-1) + - [`subActionParams (issueTypes)`](#subactionparams-issuetypes) + - [`subActionParams (pushToService)`](#subactionparams-pushtoservice-2) - [IBM Resilient](#ibm-resilient) - [`config`](#config-8) - [`secrets`](#secrets-8) - [`params`](#params-8) - - [`subActionParams (pushToService)`](#subactionparams-pushtoservice-2) + - [`subActionParams (pushToService)`](#subactionparams-pushtoservice-3) - [Command Line Utility](#command-line-utility) - [Developing New Action Types](#developing-new-action-types) + - [licensing](#licensing) + - [plugin location](#plugin-location) + - [documentation](#documentation) + - [tests](#tests) + - [action type config and secrets](#action-type-config-and-secrets) + - [user interface](#user-interface) ## Terminology @@ -103,12 +111,12 @@ Implemented under the [Actions Config](./server/actions_config.ts). Built-In-Actions are configured using the _xpack.actions_ namespoace under _kibana.yml_, and have the following configuration options: -| Namespaced Key | Description | Type | -| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| _xpack.actions._**enabled** | Feature toggle which enabled Actions in Kibana. | boolean | -| _xpack.actions._**allowedHosts** | Which _hostnames_ are allowed for the Built-In-Action? This list should contain hostnames of every external service you wish to interact with using Webhooks, Email or any other built in Action. Note that you may use the string "\*" in place of a specific hostname to enable Kibana to target any URL, but keep in mind the potential use of such a feature to execute [SSRF](https://www.owasp.org/index.php/Server_Side_Request_Forgery) attacks from your server. | Array | -| _xpack.actions._**enabledActionTypes** | A list of _actionTypes_ id's that are enabled. A "\*" may be used as an element to indicate all registered actionTypes should be enabled. The actionTypes registered for Kibana are `.server-log`, `.slack`, `.email`, `.index`, `.pagerduty`, `.webhook`. Default: `["*"]` | Array | -| _xpack.actions._**preconfigured** | A object of action id / preconfigured actions. Default: `{}` | Array | +| Namespaced Key | Description | Type | +| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| _xpack.actions._**enabled** | Feature toggle which enabled Actions in Kibana. | boolean | +| _xpack.actions._**allowedHosts** | Which _hostnames_ are allowed for the Built-In-Action? This list should contain hostnames of every external service you wish to interact with using Webhooks, Email or any other built in Action. Note that you may use the string "\*" in place of a specific hostname to enable Kibana to target any URL, but keep in mind the potential use of such a feature to execute [SSRF](https://www.owasp.org/index.php/Server_Side_Request_Forgery) attacks from your server. | Array | +| _xpack.actions._**enabledActionTypes** | A list of _actionTypes_ id's that are enabled. A "\*" may be used as an element to indicate all registered actionTypes should be enabled. The actionTypes registered for Kibana are `.server-log`, `.slack`, `.email`, `.index`, `.pagerduty`, `.webhook`. Default: `["*"]` | Array | +| _xpack.actions._**preconfigured** | A object of action id / preconfigured actions. Default: `{}` | Array | #### Adding Built-in Action Types to allowedHosts @@ -120,14 +128,14 @@ Uniquely, the _PagerDuty Action Type_ has been configured to support the service This module provides a Utilities for interacting with the configuration. -| Method | Arguments | Description | Return Type | -| ------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | -| isUriAllowed | _uri_: The URI you wish to validate is allowed | Validates whether the URI is allowed. This checks the configuration and validates that the hostname of the URI is in the list of allowed Hosts and returns `true` if it is allowed. If the configuration says that all URI's are allowed (using an "\*") then it will always return `true`. | Boolean | -| isHostnameAllowed | _hostname_: The Hostname you wish to validate is allowed | Validates whether the Hostname is allowed. This checks the configuration and validates that the hostname is in the list of allowed Hosts and returns `true` if it is allowed. If the configuration says that all Hostnames are allowed (using an "\*") then it will always return `true`. | Boolean | -| isActionTypeEnabled | _actionType_: The actionType to check to see if it's enabled | Returns true if the actionType is enabled, otherwise false. | Boolean | -| ensureUriAllowed | _uri_: The URI you wish to validate is allowed | Validates whether the URI is allowed. This checks the configuration and validates that the hostname of the URI is in the list of allowed Hosts and throws an error if it is not allowed. If the configuration says that all URI's are allowed (using an "\*") then it will never throw. | No return value, throws if URI isn't allowed | -| ensureHostnameAllowed | _hostname_: The Hostname you wish to validate is allowed | Validates whether the Hostname is allowed. This checks the configuration and validates that the hostname is in the list of allowed Hosts and throws an error if it is not allowed. If the configuration says that all Hostnames are allowed (using an "\*") then it will never throw | No return value, throws if Hostname isn't allowed . | -| ensureActionTypeEnabled | _actionType_: The actionType to check to see if it's enabled | Throws an error if the actionType is not enabled | No return value, throws if actionType isn't enabled | +| Method | Arguments | Description | Return Type | +| ----------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | +| isUriAllowed | _uri_: The URI you wish to validate is allowed | Validates whether the URI is allowed. This checks the configuration and validates that the hostname of the URI is in the list of allowed Hosts and returns `true` if it is allowed. If the configuration says that all URI's are allowed (using an "\*") then it will always return `true`. | Boolean | +| isHostnameAllowed | _hostname_: The Hostname you wish to validate is allowed | Validates whether the Hostname is allowed. This checks the configuration and validates that the hostname is in the list of allowed Hosts and returns `true` if it is allowed. If the configuration says that all Hostnames are allowed (using an "\*") then it will always return `true`. | Boolean | +| isActionTypeEnabled | _actionType_: The actionType to check to see if it's enabled | Returns true if the actionType is enabled, otherwise false. | Boolean | +| ensureUriAllowed | _uri_: The URI you wish to validate is allowed | Validates whether the URI is allowed. This checks the configuration and validates that the hostname of the URI is in the list of allowed Hosts and throws an error if it is not allowed. If the configuration says that all URI's are allowed (using an "\*") then it will never throw. | No return value, throws if URI isn't allowed | +| ensureHostnameAllowed | _hostname_: The Hostname you wish to validate is allowed | Validates whether the Hostname is allowed. This checks the configuration and validates that the hostname is in the list of allowed Hosts and throws an error if it is not allowed. If the configuration says that all Hostnames are allowed (using an "\*") then it will never throw | No return value, throws if Hostname isn't allowed . | +| ensureActionTypeEnabled | _actionType_: The actionType to check to see if it's enabled | Throws an error if the actionType is not enabled | No return value, throws if actionType isn't enabled | ## Action types @@ -442,7 +450,7 @@ The config and params properties are modelled after the [Watcher Index Action](h | index | The Elasticsearch index to index into. | string _(optional)_ | | doc_id | The optional \_id of the document. | string _(optional)_ | | execution_time_field | The field that will store/index the action execution time. | string _(optional)_ | -| refresh | Setting of the refresh policy for the write request. | boolean _(optional)_ | +| refresh | Setting of the refresh policy for the write request. | boolean _(optional)_ | ### `secrets` @@ -450,9 +458,9 @@ This action type has no `secrets` properties. ### `params` -| Property | Description | Type | -| --------- | ---------------------------------------- | ------------------- | -| documents | JSON object that describes the [document](https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-index.html#getting-started-batch-processing). | object[] | +| Property | Description | Type | +| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | +| documents | JSON object that describes the [document](https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-index.html#getting-started-batch-processing). | object[] | --- @@ -529,10 +537,10 @@ The ServiceNow action uses the [V2 Table API](https://developer.servicenow.com/a ### `config` -| Property | Description | Type | -| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -| apiUrl | ServiceNow instance URL. | string | -| casesConfiguration | Case configuration object. The object should contain an attribute called `mapping`. A `mapping` is an array of objects. Each mapping object should be of the form `{ source: string, target: string, actionType: string }`. `source` is the Case field. `target` is the ServiceNow field where `source` will be mapped to. `actionType` can be one of `nothing`, `overwrite` or `append`. For example the `{ source: 'title', target: 'short_description', actionType: 'overwrite' }` record, inside mapping array, means that the title of a case will be mapped to the short description of an incident in ServiceNow and will be overwrite on each update. | object | +| Property | Description | Type | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------- | +| apiUrl | ServiceNow instance URL. | string | +| incidentConfiguration | Optional property and specific to **Cases only**. If defined, the object should contain an attribute called `mapping`. A `mapping` is an array of objects. Each mapping object should be of the form `{ source: string, target: string, actionType: string }`. `source` is the Case field. `target` is the ServiceNow field where `source` will be mapped to. `actionType` can be one of `nothing`, `overwrite` or `append`. For example the `{ source: 'title', target: 'short_description', actionType: 'overwrite' }` record, inside mapping array, means that the title of a case will be mapped to the short description of an incident in ServiceNow and will be overwrite on each update. | object _(optional)_ | ### `secrets` @@ -550,13 +558,17 @@ The ServiceNow action uses the [V2 Table API](https://developer.servicenow.com/a #### `subActionParams (pushToService)` -| Property | Description | Type | -| ----------- | -------------------------------------------------------------------------------------------------------------------------- | --------------------- | -| caseId | The case id | string | -| title | The title of the case | string _(optional)_ | -| description | The description of the case | string _(optional)_ | -| comments | The comments of the case. A comment is of the form `{ commentId: string, version: string, comment: string }` | object[] _(optional)_ | -| externalId | The id of the incident in ServiceNow . If presented the incident will be update. Otherwise a new incident will be created. | string _(optional)_ | +| Property | Description | Type | +| ------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------- | +| savedObjectId | The id of the saved object. | string | +| title | The title of the case. | string _(optional)_ | +| description | The description of the case. | string _(optional)_ | +| comment | A comment. | string _(optional)_ | +| comments | The comments of the case. A comment is of the form `{ commentId: string, version: string, comment: string }`. | object[] _(optional)_ | +| externalId | The id of the incident in ServiceNow. If presented the incident will be update. Otherwise a new incident will be created. | string _(optional)_ | +| severity | The name of the severity in ServiceNow. | string _(optional)_ | +| urgency | The name of the urgency in ServiceNow. | string _(optional)_ | +| impact | The name of the impact in ServiceNow. | string _(optional)_ | --- @@ -568,34 +580,47 @@ The Jira action uses the [V2 API](https://developer.atlassian.com/cloud/jira/pla ### `config` -| Property | Description | Type | -| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -| apiUrl | Jira instance URL. | string | -| casesConfiguration | Case configuration object. The object should contain an attribute called `mapping`. A `mapping` is an array of objects. Each mapping object should be of the form `{ source: string, target: string, actionType: string }`. `source` is the Case field. `target` is the Jira field where `source` will be mapped to. `actionType` can be one of `nothing`, `overwrite` or `append`. For example the `{ source: 'title', target: 'summary', actionType: 'overwrite' }` record, inside mapping array, means that the title of a case will be mapped to the short description of an incident in Jira and will be overwrite on each update. | object | +| Property | Description | Type | +| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| apiUrl | Jira instance URL. | string | +| incidentConfiguration | Optional property and specific to **Cases only**. if defined, the object should contain an attribute called `mapping`. A `mapping` is an array of objects. Each mapping object should be of the form `{ source: string, target: string, actionType: string }`. `source` is the Case field. `target` is the Jira field where `source` will be mapped to. `actionType` can be one of `nothing`, `overwrite` or `append`. For example the `{ source: 'title', target: 'summary', actionType: 'overwrite' }` record, inside mapping array, means that the title of a case will be mapped to the short description of an incident in Jira and will be overwrite on each update. | object _(optional)_ | ### `secrets` -| Property | Description | Type | -| -------- | --------------------------------------- | ------ | -| email | email for HTTP Basic authentication | string | -| apiToken | API token for HTTP Basic authentication | string | +| Property | Description | Type | +| -------- | ----------------------------------------------------- | ------ | +| email | email (or username) for HTTP Basic authentication | string | +| apiToken | API token (or password) for HTTP Basic authentication | string | ### `params` -| Property | Description | Type | -| --------------- | ------------------------------------------------------------------------------------ | ------ | -| subAction | The sub action to perform. It can be `pushToService`, `handshake`, and `getIncident` | string | -| subActionParams | The parameters of the sub action | object | +| Property | Description | Type | +| --------------- | ----------------------------------------------------------------------------------------------------------------------- | ------ | +| subAction | The sub action to perform. It can be `pushToService`, `handshake`, `getIncident`, `issueTypes`, and `fieldsByIssueType` | string | +| subActionParams | The parameters of the sub action | object | + +#### `subActionParams (pushToService)` + +| Property | Description | Type | +| ------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------- | +| savedObjectId | The id of the saved object | string | +| title | The title of the case | string _(optional)_ | +| description | The description of the case | string _(optional)_ | +| externalId | The id of the incident in Jira. If presented the incident will be update. Otherwise a new incident will be created. | string _(optional)_ | +| issueType | The id of the issue type in Jira. | string _(optional)_ | +| priority | The name of the priority in Jira. Example: `Medium`. | string _(optional)_ | +| labels | An array of labels. | string[] _(optional)_ | +| comments | The comments of the case. A comment is of the form `{ commentId: string, version: string, comment: string }` | object[] _(optional)_ | + +#### `subActionParams (issueTypes)` + +No parameters for `issueTypes` sub-action. Provide an empty object `{}`. #### `subActionParams (pushToService)` -| Property | Description | Type | -| ----------- | ------------------------------------------------------------------------------------------------------------------- | --------------------- | -| caseId | The case id | string | -| title | The title of the case | string _(optional)_ | -| description | The description of the case | string _(optional)_ | -| comments | The comments of the case. A comment is of the form `{ commentId: string, version: string, comment: string }` | object[] _(optional)_ | -| externalId | The id of the incident in Jira. If presented the incident will be update. Otherwise a new incident will be created. | string _(optional)_ | +| Property | Description | Type | +| -------- | -------------------------------- | ------ | +| id | The id of the issue type in Jira | string | ## IBM Resilient @@ -603,10 +628,10 @@ ID: `.resilient` ### `config` -| Property | Description | Type | -| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | -| apiUrl | IBM Resilient instance URL. | string | -| casesConfiguration | Case configuration object. The object should contain an attribute called `mapping`. A `mapping` is an array of objects. Each mapping object should be of the form `{ source: string, target: string, actionType: string }`. `source` is the Case field. `target` is the Jira field where `source` will be mapped to. `actionType` can be one of `nothing`, `overwrite` or `append`. For example the `{ source: 'title', target: 'summary', actionType: 'overwrite' }` record, inside mapping array, means that the title of a case will be mapped to the short description of an incident in IBM Resilient and will be overwrite on each update. | object | +| Property | Description | Type | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | +| apiUrl | IBM Resilient instance URL. | string | +| incidentConfiguration | Case configuration object. The object should contain an attribute called `mapping`. A `mapping` is an array of objects. Each mapping object should be of the form `{ source: string, target: string, actionType: string }`. `source` is the Case field. `target` is the Jira field where `source` will be mapped to. `actionType` can be one of `nothing`, `overwrite` or `append`. For example the `{ source: 'title', target: 'summary', actionType: 'overwrite' }` record, inside mapping array, means that the title of a case will be mapped to the short description of an incident in IBM Resilient and will be overwrite on each update. | object | ### `secrets` @@ -624,13 +649,13 @@ ID: `.resilient` #### `subActionParams (pushToService)` -| Property | Description | Type | -| ----------- | ---------------------------------------------------------------------------------------------------------------------------- | --------------------- | -| caseId | The case id | string | -| title | The title of the case | string _(optional)_ | -| description | The description of the case | string _(optional)_ | -| comments | The comments of the case. A comment is of the form `{ commentId: string, version: string, comment: string }` | object[] _(optional)_ | -| externalId | The id of the incident in IBM Resilient. If presented the incident will be update. Otherwise a new incident will be created. | string _(optional)_ | +| Property | Description | Type | +| ------------- | ---------------------------------------------------------------------------------------------------------------------------- | --------------------- | +| savedObjectId | The id of the saved object | string | +| title | The title of the case | string _(optional)_ | +| description | The description of the case | string _(optional)_ | +| comments | The comments of the case. A comment is of the form `{ commentId: string, version: string, comment: string }` | object[] _(optional)_ | +| externalId | The id of the incident in IBM Resilient. If presented the incident will be update. Otherwise a new incident will be created. | string _(optional)_ | # Command Line Utility @@ -660,30 +685,30 @@ Consider working with the alerting team on early structure /design feedback of n ## licensing -Currently actions are licensed as "basic" if the action only interacts with the stack, eg the server log and es index actions. Other actions are at least "gold" level. +Currently actions are licensed as "basic" if the action only interacts with the stack, eg the server log and es index actions. Other actions are at least "gold" level. ## plugin location -Currently actions that are licensed as "basic" **MUST** be implemented in the actions plugin, other actions can be implemented in any other plugin that pre-reqs the actions plugin. If the new action is generic across the stack, it probably belongs in the actions plugin, but if your action is very specific to a plugin/solution, it might be easiest to implement it in the plugin/solution. Keep in mind that if Kibana is run without the plugin being enabled, any actions defined in that plugin will not run, nor will those actions be available via APIs or UI. +Currently actions that are licensed as "basic" **MUST** be implemented in the actions plugin, other actions can be implemented in any other plugin that pre-reqs the actions plugin. If the new action is generic across the stack, it probably belongs in the actions plugin, but if your action is very specific to a plugin/solution, it might be easiest to implement it in the plugin/solution. Keep in mind that if Kibana is run without the plugin being enabled, any actions defined in that plugin will not run, nor will those actions be available via APIs or UI. -Actions that take URLs or hostnames should check that those values are allowed. The allowed host list utilities are currently internal to the actions plugin, and so such actions will need to be implemented in the actions plugin. Longer-term, we will expose these utilities so they can be used by alerts implemented in other plugins; see [issue #64659](https://github.com/elastic/kibana/issues/64659). +Actions that take URLs or hostnames should check that those values are allowed. The allowed host list utilities are currently internal to the actions plugin, and so such actions will need to be implemented in the actions plugin. Longer-term, we will expose these utilities so they can be used by alerts implemented in other plugins; see [issue #64659](https://github.com/elastic/kibana/issues/64659). ## documentation -You should also create some asciidoc for the new action type. An entry should be made in the action type index - [`docs/user/alerting/action-types.asciidoc`](../../../docs/user/alerting/action-types.asciidoc) which points to a new document for the action type that should be in the directory [`docs/user/alerting/action-types`](../../../docs/user/alerting/action-types). +You should also create some asciidoc for the new action type. An entry should be made in the action type index - [`docs/user/alerting/action-types.asciidoc`](../../../docs/user/alerting/action-types.asciidoc) which points to a new document for the action type that should be in the directory [`docs/user/alerting/action-types`](../../../docs/user/alerting/action-types). ## tests -The action type should have both jest tests and functional tests. For functional tests, if your action interacts with a 3rd party service via HTTP, you may be able to create a simulator for your service, to test with. See the existing functional test servers in the directory [`x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server`](../../test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server) +The action type should have both jest tests and functional tests. For functional tests, if your action interacts with a 3rd party service via HTTP, you may be able to create a simulator for your service, to test with. See the existing functional test servers in the directory [`x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server`](../../test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server) ## action type config and secrets -Action types must define `config` and `secrets` which are used to create connectors. This data should be described with `@kbn/config-schema` object schemas, and you **MUST NOT** use `schema.maybe()` to define properties. +Action types must define `config` and `secrets` which are used to create connectors. This data should be described with `@kbn/config-schema` object schemas, and you **MUST NOT** use `schema.maybe()` to define properties. -This is due to the fact that the structures are persisted in saved objects, which performs partial updates on the persisted data. If a property value is already persisted, but an update either doesn't include the property, or sets it to `undefined`, the persisted value will not be changed. Beyond this being a semantic error in general, it also ends up invalidating the encryption used to save secrets, and will render the secrets will not be able to be unencrypted later. +This is due to the fact that the structures are persisted in saved objects, which performs partial updates on the persisted data. If a property value is already persisted, but an update either doesn't include the property, or sets it to `undefined`, the persisted value will not be changed. Beyond this being a semantic error in general, it also ends up invalidating the encryption used to save secrets, and will render the secrets will not be able to be unencrypted later. -Instead of `schema.maybe()`, use `schema.nullable()`, which is the same as `schema.maybe()` except that when passed an `undefined` value, the object returned from the validation will be set to `null`. The resulting type will be `property-type | null`, whereas with `schema.maybe()` it would be `property-type | undefined`. +Instead of `schema.maybe()`, use `schema.nullable()`, which is the same as `schema.maybe()` except that when passed an `undefined` value, the object returned from the validation will be set to `null`. The resulting type will be `property-type | null`, whereas with `schema.maybe()` it would be `property-type | undefined`. ## user interface -In order to make this action usable in the Kibana UI, you will need to provide all the UI editing aspects of the action. The existing action type user interfaces are defined in [`x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types`](../triggers_actions_ui/public/application/components/builtin_action_types). For more information, see the [UI documentation](../triggers_actions_ui/README.md#create-and-register-new-action-type-ui). +In order to make this action usable in the Kibana UI, you will need to provide all the UI editing aspects of the action. The existing action type user interfaces are defined in [`x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types`](../triggers_actions_ui/public/application/components/builtin_action_types). For more information, see the [UI documentation](../triggers_actions_ui/README.md#create-and-register-new-action-type-ui). diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/case_shema.ts b/x-pack/plugins/actions/server/builtin_action_types/case/common_schema.ts similarity index 72% rename from x-pack/plugins/actions/server/builtin_action_types/servicenow/case_shema.ts rename to x-pack/plugins/actions/server/builtin_action_types/case/common_schema.ts index 2df8c8156cde8..5a23eb89339e6 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/case_shema.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/case/common_schema.ts @@ -22,13 +22,20 @@ export const IncidentConfigurationSchema = schema.object({ mapping: schema.arrayOf(MapRecordSchema), }); +export const UserSchema = schema.object({ + fullName: schema.nullable(schema.string()), + username: schema.nullable(schema.string()), +}); + export const EntityInformation = { - createdAt: schema.maybe(schema.string()), - createdBy: schema.maybe(schema.any()), + createdAt: schema.nullable(schema.string()), + createdBy: schema.nullable(UserSchema), updatedAt: schema.nullable(schema.string()), - updatedBy: schema.nullable(schema.any()), + updatedBy: schema.nullable(UserSchema), }; +export const EntityInformationSchema = schema.object(EntityInformation); + export const CommentSchema = schema.object({ commentId: schema.string(), comment: schema.string(), diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/case_types.ts b/x-pack/plugins/actions/server/builtin_action_types/case/common_types.ts similarity index 53% rename from x-pack/plugins/actions/server/builtin_action_types/servicenow/case_types.ts rename to x-pack/plugins/actions/server/builtin_action_types/case/common_types.ts index 49b85f9254af9..cca83fb88ca92 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/case_types.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/case/common_types.ts @@ -6,15 +6,11 @@ import { TypeOf } from '@kbn/config-schema'; import { - ExecutorSubActionGetIncidentParamsSchema, - ExecutorSubActionHandshakeParamsSchema, -} from './schema'; -import { IncidentConfigurationSchema, MapRecordSchema } from './case_shema'; -import { - PushToServiceApiParams, - ExternalServiceIncidentResponse, - ExternalServiceParams, -} from './types'; + IncidentConfigurationSchema, + MapRecordSchema, + CommentSchema, + EntityInformationSchema, +} from './common_schema'; export interface CreateCommentRequest { [key: string]: string; @@ -22,6 +18,8 @@ export interface CreateCommentRequest { export type IncidentConfiguration = TypeOf; export type MapRecord = TypeOf; +export type Comment = TypeOf; +export type EntityInformation = TypeOf; export interface ExternalServiceCommentResponse { commentId: string; @@ -29,18 +27,6 @@ export interface ExternalServiceCommentResponse { externalCommentId?: string; } -export type ExecutorSubActionGetIncidentParams = TypeOf< - typeof ExecutorSubActionGetIncidentParamsSchema ->; - -export type ExecutorSubActionHandshakeParams = TypeOf< - typeof ExecutorSubActionHandshakeParamsSchema ->; - -export interface PushToServiceResponse extends ExternalServiceIncidentResponse { - comments?: ExternalServiceCommentResponse[]; -} - export interface PipedField { key: string; value: string; @@ -48,10 +34,10 @@ export interface PipedField { pipes: string[]; } -export interface TransformFieldsArgs { - params: PushToServiceApiParams; +export interface TransformFieldsArgs { + params: P; fields: PipedField[]; - currentIncident?: ExternalServiceParams; + currentIncident?: S; } export interface TransformerArgs { diff --git a/x-pack/plugins/actions/server/builtin_action_types/case/utils.ts b/x-pack/plugins/actions/server/builtin_action_types/case/utils.ts index d895bf386a367..701bbea14fde8 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/case/utils.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/case/utils.ts @@ -51,10 +51,7 @@ export const buildMap = (mapping: MapRecord[]): Map => { }, new Map()); }; -export const mapParams = ( - params: Partial, - mapping: Map -): AnyParams => { +export const mapParams = (params: T, mapping: Map): AnyParams => { return Object.keys(params).reduce((prev: AnyParams, curr: string): AnyParams => { const field = mapping.get(curr); if (field) { @@ -106,7 +103,10 @@ export const createConnectorExecutor = ({ const { comments, externalId, ...restParams } = pushToServiceParams; const mapping = buildMap(config.casesConfiguration.mapping); - const externalCase = mapParams(restParams, mapping); + const externalCase = mapParams( + restParams as ExecutorSubActionPushParams, + mapping + ); data = await api.pushToService({ externalService, diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/api.test.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/api.test.ts index bcfb82077d286..4495c37f758ee 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/api.test.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/api.test.ts @@ -4,15 +4,18 @@ * you may not use this file except in compliance with the Elastic License. */ -import { api } from '../case/api'; +import { Logger } from '../../../../../../src/core/server'; import { externalServiceMock, mapping, apiParams } from './mocks'; -import { ExternalService } from '../case/types'; +import { ExternalService } from './types'; +import { api } from './api'; +let mockedLogger: jest.Mocked; describe('api', () => { let externalService: jest.Mocked; beforeEach(() => { externalService = externalServiceMock.create(); + jest.clearAllMocks(); }); afterEach(() => { @@ -20,10 +23,15 @@ describe('api', () => { }); describe('pushToService', () => { - describe('create incident', () => { + describe('create incident - cases', () => { test('it creates an incident', async () => { const params = { ...apiParams, externalId: null }; - const res = await api.pushToService({ externalService, mapping, params }); + const res = await api.pushToService({ + externalService, + mapping, + params, + logger: mockedLogger, + }); expect(res).toEqual({ id: 'incident-1', @@ -45,7 +53,12 @@ describe('api', () => { test('it creates an incident without comments', async () => { const params = { ...apiParams, externalId: null, comments: [] }; - const res = await api.pushToService({ externalService, mapping, params }); + const res = await api.pushToService({ + externalService, + mapping, + params, + logger: mockedLogger, + }); expect(res).toEqual({ id: 'incident-1', @@ -57,7 +70,7 @@ describe('api', () => { test('it calls createIncident correctly', async () => { const params = { ...apiParams, externalId: null }; - await api.pushToService({ externalService, mapping, params }); + await api.pushToService({ externalService, mapping, params, logger: mockedLogger }); expect(externalService.createIncident).toHaveBeenCalledWith({ incident: { @@ -69,9 +82,25 @@ describe('api', () => { expect(externalService.updateIncident).not.toHaveBeenCalled(); }); + test('it calls createIncident correctly without mapping', async () => { + const params = { ...apiParams, externalId: null }; + await api.pushToService({ externalService, mapping: null, params, logger: mockedLogger }); + + expect(externalService.createIncident).toHaveBeenCalledWith({ + incident: { + description: 'Incident description', + summary: 'Incident title', + issueType: '10006', + labels: ['kibana', 'elastic'], + priority: 'High', + }, + }); + expect(externalService.updateIncident).not.toHaveBeenCalled(); + }); + test('it calls createComment correctly', async () => { const params = { ...apiParams, externalId: null }; - await api.pushToService({ externalService, mapping, params }); + await api.pushToService({ externalService, mapping, params, logger: mockedLogger }); expect(externalService.createComment).toHaveBeenCalledTimes(2); expect(externalService.createComment).toHaveBeenNthCalledWith(1, { incidentId: 'incident-1', @@ -89,7 +118,6 @@ describe('api', () => { username: 'elastic', }, }, - field: 'comments', }); expect(externalService.createComment).toHaveBeenNthCalledWith(2, { @@ -108,14 +136,59 @@ describe('api', () => { username: 'elastic', }, }, - field: 'comments', + }); + }); + + test('it calls createComment correctly without mapping', async () => { + const params = { ...apiParams, externalId: null }; + await api.pushToService({ externalService, mapping: null, params, logger: mockedLogger }); + expect(externalService.createComment).toHaveBeenCalledTimes(2); + expect(externalService.createComment).toHaveBeenNthCalledWith(1, { + incidentId: 'incident-1', + comment: { + commentId: 'case-comment-1', + comment: 'A comment', + createdAt: '2020-04-27T10:59:46.202Z', + createdBy: { + fullName: 'Elastic User', + username: 'elastic', + }, + updatedAt: '2020-04-27T10:59:46.202Z', + updatedBy: { + fullName: 'Elastic User', + username: 'elastic', + }, + }, + }); + + expect(externalService.createComment).toHaveBeenNthCalledWith(2, { + incidentId: 'incident-1', + comment: { + commentId: 'case-comment-2', + comment: 'Another comment', + createdAt: '2020-04-27T10:59:46.202Z', + createdBy: { + fullName: 'Elastic User', + username: 'elastic', + }, + updatedAt: '2020-04-27T10:59:46.202Z', + updatedBy: { + fullName: 'Elastic User', + username: 'elastic', + }, + }, }); }); }); describe('update incident', () => { test('it updates an incident', async () => { - const res = await api.pushToService({ externalService, mapping, params: apiParams }); + const res = await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(res).toEqual({ id: 'incident-1', @@ -137,7 +210,12 @@ describe('api', () => { test('it updates an incident without comments', async () => { const params = { ...apiParams, comments: [] }; - const res = await api.pushToService({ externalService, mapping, params }); + const res = await api.pushToService({ + externalService, + mapping, + params, + logger: mockedLogger, + }); expect(res).toEqual({ id: 'incident-1', @@ -149,7 +227,7 @@ describe('api', () => { test('it calls updateIncident correctly', async () => { const params = { ...apiParams }; - await api.pushToService({ externalService, mapping, params }); + await api.pushToService({ externalService, mapping, params, logger: mockedLogger }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', @@ -162,9 +240,26 @@ describe('api', () => { expect(externalService.createIncident).not.toHaveBeenCalled(); }); + test('it calls updateIncident correctly without mapping', async () => { + const params = { ...apiParams }; + await api.pushToService({ externalService, mapping: null, params, logger: mockedLogger }); + + expect(externalService.updateIncident).toHaveBeenCalledWith({ + incidentId: 'incident-3', + incident: { + description: 'Incident description', + summary: 'Incident title', + issueType: '10006', + labels: ['kibana', 'elastic'], + priority: 'High', + }, + }); + expect(externalService.createIncident).not.toHaveBeenCalled(); + }); + test('it calls createComment correctly', async () => { const params = { ...apiParams }; - await api.pushToService({ externalService, mapping, params }); + await api.pushToService({ externalService, mapping, params, logger: mockedLogger }); expect(externalService.createComment).toHaveBeenCalledTimes(2); expect(externalService.createComment).toHaveBeenNthCalledWith(1, { incidentId: 'incident-1', @@ -182,7 +277,6 @@ describe('api', () => { username: 'elastic', }, }, - field: 'comments', }); expect(externalService.createComment).toHaveBeenNthCalledWith(2, { @@ -201,7 +295,87 @@ describe('api', () => { username: 'elastic', }, }, - field: 'comments', + }); + }); + + test('it calls createComment correctly without mapping', async () => { + const params = { ...apiParams }; + await api.pushToService({ externalService, mapping: null, params, logger: mockedLogger }); + expect(externalService.createComment).toHaveBeenCalledTimes(2); + expect(externalService.createComment).toHaveBeenNthCalledWith(1, { + incidentId: 'incident-1', + comment: { + commentId: 'case-comment-1', + comment: 'A comment', + createdAt: '2020-04-27T10:59:46.202Z', + createdBy: { + fullName: 'Elastic User', + username: 'elastic', + }, + updatedAt: '2020-04-27T10:59:46.202Z', + updatedBy: { + fullName: 'Elastic User', + username: 'elastic', + }, + }, + }); + + expect(externalService.createComment).toHaveBeenNthCalledWith(2, { + incidentId: 'incident-1', + comment: { + commentId: 'case-comment-2', + comment: 'Another comment', + createdAt: '2020-04-27T10:59:46.202Z', + createdBy: { + fullName: 'Elastic User', + username: 'elastic', + }, + updatedAt: '2020-04-27T10:59:46.202Z', + updatedBy: { + fullName: 'Elastic User', + username: 'elastic', + }, + }, + }); + }); + }); + + describe('issueTypes', () => { + test('it returns the issue types correctly', async () => { + const res = await api.issueTypes({ + externalService, + params: {}, + }); + expect(res).toEqual([ + { + id: '10006', + name: 'Task', + }, + { + id: '10007', + name: 'Bug', + }, + ]); + }); + }); + + describe('fieldsByIssueType', () => { + test('it returns the fields correctly', async () => { + const res = await api.fieldsByIssueType({ + externalService, + params: { id: '10006' }, + }); + expect(res).toEqual({ + summary: { allowedValues: [], defaultValue: {} }, + priority: { + allowedValues: [ + { + name: 'Medium', + id: '3', + }, + ], + defaultValue: { name: 'Medium', id: '3' }, + }, }); }); }); @@ -228,7 +402,12 @@ describe('api', () => { actionType: 'overwrite', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: { @@ -260,7 +439,12 @@ describe('api', () => { actionType: 'nothing', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: { @@ -291,7 +475,12 @@ describe('api', () => { actionType: 'append', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: { @@ -324,7 +513,12 @@ describe('api', () => { actionType: 'nothing', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: {}, @@ -352,7 +546,12 @@ describe('api', () => { actionType: 'overwrite', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: { @@ -382,7 +581,12 @@ describe('api', () => { actionType: 'overwrite', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: { @@ -414,7 +618,12 @@ describe('api', () => { actionType: 'nothing', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: { @@ -445,7 +654,12 @@ describe('api', () => { actionType: 'append', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: { @@ -478,7 +692,12 @@ describe('api', () => { actionType: 'append', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.updateIncident).toHaveBeenCalledWith({ incidentId: 'incident-3', incident: { @@ -509,7 +728,12 @@ describe('api', () => { actionType: 'overwrite', }); - await api.pushToService({ externalService, mapping, params: apiParams }); + await api.pushToService({ + externalService, + mapping, + params: apiParams, + logger: mockedLogger, + }); expect(externalService.createComment).not.toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/api.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/api.ts index 3db66e5884af4..da47a4bfb839b 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/api.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/api.ts @@ -4,4 +4,179 @@ * you may not use this file except in compliance with the Elastic License. */ -export { api } from '../case/api'; +import { flow } from 'lodash'; +import { + ExternalServiceParams, + PushToServiceApiHandlerArgs, + HandshakeApiHandlerArgs, + GetIncidentApiHandlerArgs, + ExternalServiceApi, + Incident, + GetFieldsByIssueTypeHandlerArgs, + GetIssueTypesHandlerArgs, + PushToServiceApiParams, +} from './types'; + +// TODO: to remove, need to support Case +import { transformers } from '../case/transformers'; +import { TransformFieldsArgs, Comment, EntityInformation } from '../case/common_types'; + +import { PushToServiceResponse } from './types'; +import { prepareFieldsForTransformation } from '../case/utils'; + +const handshakeHandler = async ({ + externalService, + mapping, + params, +}: HandshakeApiHandlerArgs) => {}; + +const getIncidentHandler = async ({ + externalService, + mapping, + params, +}: GetIncidentApiHandlerArgs) => {}; + +const getIssueTypesHandler = async ({ externalService }: GetIssueTypesHandlerArgs) => { + const res = await externalService.getIssueTypes(); + return res; +}; + +const getFieldsByIssueTypeHandler = async ({ + externalService, + params, +}: GetFieldsByIssueTypeHandlerArgs) => { + const { id } = params; + const res = await externalService.getFieldsByIssueType(id); + return res; +}; + +const pushToServiceHandler = async ({ + externalService, + mapping, + params, + logger, +}: PushToServiceApiHandlerArgs): Promise => { + const { externalId, comments } = params; + const updateIncident = externalId ? true : false; + const defaultPipes = updateIncident ? ['informationUpdated'] : ['informationCreated']; + let currentIncident: ExternalServiceParams | undefined; + let res: PushToServiceResponse; + + if (externalId) { + try { + currentIncident = await externalService.getIncident(externalId); + } catch (ex) { + logger.debug( + `Retrieving Incident by id ${externalId} from Jira failed with exception: ${ex}` + ); + } + } + + let incident: Incident; + // TODO: should be removed later but currently keep it for the Case implementation support + if (mapping) { + const fields = prepareFieldsForTransformation({ + externalCase: params.externalObject, + mapping, + defaultPipes, + }); + + incident = transformFields({ + params, + fields, + currentIncident, + }); + } else { + const { title, description, priority, labels, issueType } = params; + incident = { summary: title, description, priority, labels, issueType }; + } + + if (externalId != null) { + res = await externalService.updateIncident({ + incidentId: externalId, + incident, + }); + } else { + res = await externalService.createIncident({ + incident: { + ...incident, + }, + }); + } + + if (comments && Array.isArray(comments) && comments.length > 0) { + if (mapping && mapping.get('comments')?.actionType === 'nothing') { + return res; + } + + const commentsTransformed = mapping + ? transformComments(comments, ['informationAdded']) + : comments; + + res.comments = []; + for (const currentComment of commentsTransformed) { + const comment = await externalService.createComment({ + incidentId: res.id, + comment: currentComment, + }); + res.comments = [ + ...(res.comments ?? []), + { + commentId: comment.commentId, + pushedDate: comment.pushedDate, + }, + ]; + } + } + + return res; +}; + +export const transformFields = ({ + params, + fields, + currentIncident, +}: TransformFieldsArgs): Incident => { + return fields.reduce((prev, cur) => { + const transform = flow(...cur.pipes.map((p) => transformers[p])); + return { + ...prev, + [cur.key]: transform({ + value: cur.value, + date: params.updatedAt ?? params.createdAt, + user: getEntity(params), + previousValue: currentIncident ? currentIncident[cur.key] : '', + }).value, + }; + }, {} as Incident); +}; + +export const transformComments = (comments: Comment[], pipes: string[]): Comment[] => { + return comments.map((c) => ({ + ...c, + comment: flow(...pipes.map((p) => transformers[p]))({ + value: c.comment, + date: c.updatedAt ?? c.createdAt, + user: getEntity(c), + }).value, + })); +}; + +export const getEntity = (entity: EntityInformation): string => + (entity.updatedBy != null + ? entity.updatedBy.fullName + ? entity.updatedBy.fullName + : entity.updatedBy.username + : entity.createdBy != null + ? entity.createdBy.fullName + ? entity.createdBy.fullName + : entity.createdBy.username + : '') ?? ''; + +export const api: ExternalServiceApi = { + handshake: handshakeHandler, + pushToService: pushToServiceHandler, + getIncident: getIncidentHandler, + issueTypes: getIssueTypesHandler, + fieldsByIssueType: getFieldsByIssueTypeHandler, +}; diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/index.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/index.ts index 66be0bad02d7b..d3346557f3684 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/index.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/index.ts @@ -4,33 +4,138 @@ * you may not use this file except in compliance with the Elastic License. */ -import { Logger } from '../../../../../../src/core/server'; -import { createConnector } from '../case/utils'; -import { ActionType } from '../../types'; +import { curry } from 'lodash'; +import { schema } from '@kbn/config-schema'; -import { api } from './api'; -import { config } from './config'; import { validate } from './validators'; -import { createExternalService } from './service'; -import { JiraSecretConfiguration, JiraPublicConfiguration } from './schema'; +import { + ExternalIncidentServiceConfiguration, + ExternalIncidentServiceSecretConfiguration, + ExecutorParamsSchema, +} from './schema'; import { ActionsConfigurationUtilities } from '../../actions_config'; +import { ActionType, ActionTypeExecutorOptions, ActionTypeExecutorResult } from '../../types'; +import { createExternalService } from './service'; +import { api } from './api'; +import { + ExecutorParams, + ExecutorSubActionPushParams, + JiraPublicConfigurationType, + JiraSecretConfigurationType, + JiraExecutorResultData, + ExecutorSubActionGetFieldsByIssueTypeParams, + ExecutorSubActionGetIssueTypesParams, +} from './types'; +import * as i18n from './translations'; +import { Logger } from '../../../../../../src/core/server'; -export function getActionType({ - logger, - configurationUtilities, -}: { +// TODO: to remove, need to support Case +import { buildMap, mapParams } from '../case/utils'; + +interface GetActionTypeParams { logger: Logger; configurationUtilities: ActionsConfigurationUtilities; -}): ActionType { - return createConnector({ - api, - config, - validate, - createExternalService, - validationSchema: { - config: JiraPublicConfiguration, - secrets: JiraSecretConfiguration, +} + +const supportedSubActions: string[] = ['pushToService', 'issueTypes', 'fieldsByIssueType']; + +// action type definition +export function getActionType( + params: GetActionTypeParams +): ActionType< + JiraPublicConfigurationType, + JiraSecretConfigurationType, + ExecutorParams, + JiraExecutorResultData | {} +> { + const { logger, configurationUtilities } = params; + return { + id: '.jira', + minimumLicenseRequired: 'gold', + name: i18n.NAME, + validate: { + config: schema.object(ExternalIncidentServiceConfiguration, { + validate: curry(validate.config)(configurationUtilities), + }), + secrets: schema.object(ExternalIncidentServiceSecretConfiguration, { + validate: curry(validate.secrets)(configurationUtilities), + }), + params: ExecutorParamsSchema, + }, + executor: curry(executor)({ logger }), + }; +} + +// action executor +async function executor( + { logger }: { logger: Logger }, + execOptions: ActionTypeExecutorOptions< + JiraPublicConfigurationType, + JiraSecretConfigurationType, + ExecutorParams + > +): Promise> { + const { actionId, config, params, secrets } = execOptions; + const { subAction, subActionParams } = params as ExecutorParams; + let data: JiraExecutorResultData | null = null; + + const externalService = createExternalService( + { + config, + secrets, }, logger, - })({ configurationUtilities }); + execOptions.proxySettings + ); + + if (!api[subAction]) { + const errorMessage = `[Action][ExternalService] Unsupported subAction type ${subAction}.`; + logger.error(errorMessage); + throw new Error(errorMessage); + } + + if (!supportedSubActions.includes(subAction)) { + const errorMessage = `[Action][ExternalService] subAction ${subAction} not implemented.`; + logger.error(errorMessage); + throw new Error(errorMessage); + } + + if (subAction === 'pushToService') { + const pushToServiceParams = subActionParams as ExecutorSubActionPushParams; + + const { comments, externalId, ...restParams } = pushToServiceParams; + const incidentConfiguration = config.incidentConfiguration; + const mapping = incidentConfiguration ? buildMap(incidentConfiguration.mapping) : null; + const externalObject = + config.incidentConfiguration && mapping + ? mapParams(restParams as ExecutorSubActionPushParams, mapping) + : {}; + + data = await api.pushToService({ + externalService, + mapping, + params: { ...pushToServiceParams, externalObject }, + logger, + }); + + logger.debug(`response push to service for incident id: ${data.id}`); + } + + if (subAction === 'issueTypes') { + const getIssueTypesParams = subActionParams as ExecutorSubActionGetIssueTypesParams; + data = await api.issueTypes({ + externalService, + params: getIssueTypesParams, + }); + } + + if (subAction === 'fieldsByIssueType') { + const getFieldsByIssueTypeParams = subActionParams as ExecutorSubActionGetFieldsByIssueTypeParams; + data = await api.fieldsByIssueType({ + externalService, + params: getFieldsByIssueTypeParams, + }); + } + + return { status: 'ok', data: data ?? {}, actionId }; } diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/mocks.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/mocks.ts index 709d490a5227f..e7841996fedef 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/mocks.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/mocks.ts @@ -4,12 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import { - ExternalService, - PushToServiceApiParams, - ExecutorSubActionPushParams, - MapRecord, -} from '../case/types'; +import { ExternalService, PushToServiceApiParams, ExecutorSubActionPushParams } from './types'; + +import { MapRecord } from '../case/common_types'; const createMock = (): jest.Mocked => { const service = { @@ -40,6 +37,30 @@ const createMock = (): jest.Mocked => { }) ), createComment: jest.fn(), + findIncidents: jest.fn(), + getCapabilities: jest.fn(), + getIssueTypes: jest.fn().mockImplementation(() => [ + { + id: '10006', + name: 'Task', + }, + { + id: '10007', + name: 'Bug', + }, + ]), + getFieldsByIssueType: jest.fn().mockImplementation(() => ({ + summary: { allowedValues: [], defaultValue: {} }, + priority: { + allowedValues: [ + { + name: 'Medium', + id: '3', + }, + ], + defaultValue: { name: 'Medium', id: '3' }, + }, + })), }; service.createComment.mockImplementationOnce(() => @@ -96,6 +117,9 @@ const executorParams: ExecutorSubActionPushParams = { updatedBy: { fullName: 'Elastic User', username: 'elastic' }, title: 'Incident title', description: 'Incident description', + labels: ['kibana', 'elastic'], + priority: 'High', + issueType: '10006', comments: [ { commentId: 'case-comment-1', @@ -118,7 +142,7 @@ const executorParams: ExecutorSubActionPushParams = { const apiParams: PushToServiceApiParams = { ...executorParams, - externalCase: { summary: 'Incident title', description: 'Incident description' }, + externalObject: { summary: 'Incident title', description: 'Incident description' }, }; export { externalServiceMock, mapping, executorParams, apiParams }; diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/schema.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/schema.ts index 9c831e75d91c1..07c8e22812b27 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/schema.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/schema.ts @@ -5,18 +5,85 @@ */ import { schema } from '@kbn/config-schema'; -import { ExternalIncidentServiceConfiguration } from '../case/schema'; +import { + CommentSchema, + EntityInformation, + IncidentConfigurationSchema, +} from '../case/common_schema'; -export const JiraPublicConfiguration = { +export const ExternalIncidentServiceConfiguration = { + apiUrl: schema.string(), projectKey: schema.string(), - ...ExternalIncidentServiceConfiguration, + // TODO: to remove - set it optional for the current stage to support Case Jira implementation + incidentConfiguration: schema.nullable(IncidentConfigurationSchema), + isCaseOwned: schema.nullable(schema.boolean()), }; -export const JiraPublicConfigurationSchema = schema.object(JiraPublicConfiguration); +export const ExternalIncidentServiceConfigurationSchema = schema.object( + ExternalIncidentServiceConfiguration +); -export const JiraSecretConfiguration = { +export const ExternalIncidentServiceSecretConfiguration = { email: schema.string(), apiToken: schema.string(), }; -export const JiraSecretConfigurationSchema = schema.object(JiraSecretConfiguration); +export const ExternalIncidentServiceSecretConfigurationSchema = schema.object( + ExternalIncidentServiceSecretConfiguration +); + +export const ExecutorSubActionSchema = schema.oneOf([ + schema.literal('getIncident'), + schema.literal('pushToService'), + schema.literal('handshake'), + schema.literal('issueTypes'), + schema.literal('fieldsByIssueType'), +]); + +export const ExecutorSubActionPushParamsSchema = schema.object({ + savedObjectId: schema.string(), + title: schema.string(), + description: schema.nullable(schema.string()), + externalId: schema.nullable(schema.string()), + issueType: schema.nullable(schema.string()), + priority: schema.nullable(schema.string()), + labels: schema.nullable(schema.arrayOf(schema.string())), + // TODO: modify later to string[] - need for support Case schema + comments: schema.nullable(schema.arrayOf(CommentSchema)), + ...EntityInformation, +}); + +export const ExecutorSubActionGetIncidentParamsSchema = schema.object({ + externalId: schema.string(), +}); + +// Reserved for future implementation +export const ExecutorSubActionHandshakeParamsSchema = schema.object({}); +export const ExecutorSubActionGetCapabilitiesParamsSchema = schema.object({}); +export const ExecutorSubActionGetIssueTypesParamsSchema = schema.object({}); +export const ExecutorSubActionGetFieldsByIssueTypeParamsSchema = schema.object({ + id: schema.string(), +}); + +export const ExecutorParamsSchema = schema.oneOf([ + schema.object({ + subAction: schema.literal('getIncident'), + subActionParams: ExecutorSubActionGetIncidentParamsSchema, + }), + schema.object({ + subAction: schema.literal('handshake'), + subActionParams: ExecutorSubActionHandshakeParamsSchema, + }), + schema.object({ + subAction: schema.literal('pushToService'), + subActionParams: ExecutorSubActionPushParamsSchema, + }), + schema.object({ + subAction: schema.literal('issueTypes'), + subActionParams: ExecutorSubActionGetIssueTypesParamsSchema, + }), + schema.object({ + subAction: schema.literal('fieldsByIssueType'), + subActionParams: ExecutorSubActionGetFieldsByIssueTypeParamsSchema, + }), +]); diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/service.test.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/service.test.ts index 547595b4c183f..2439c507c3328 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/service.test.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/service.test.ts @@ -8,11 +8,15 @@ import axios from 'axios'; import { createExternalService } from './service'; import * as utils from '../lib/axios_utils'; -import { ExternalService } from '../case/types'; +import { ExternalService } from './types'; import { Logger } from '../../../../../../src/core/server'; import { loggingSystemMock } from '../../../../../../src/core/server/mocks'; const logger = loggingSystemMock.create().get() as jest.Mocked; +interface ResponseError extends Error { + response?: { data: { errors: Record } }; +} + jest.mock('axios'); jest.mock('../lib/axios_utils', () => { const originalUtils = jest.requireActual('../lib/axios_utils'); @@ -25,6 +29,72 @@ jest.mock('../lib/axios_utils', () => { axios.create = jest.fn(() => axios); const requestMock = utils.request as jest.Mock; +const issueTypesResponse = { + data: { + projects: [ + { + issuetypes: [ + { + id: '10006', + name: 'Task', + }, + { + id: '10007', + name: 'Bug', + }, + ], + }, + ], + }, +}; + +const fieldsResponse = { + data: { + projects: [ + { + issuetypes: [ + { + id: '10006', + name: 'Task', + fields: { + summary: { fieldId: 'summary' }, + priority: { + fieldId: 'priority', + allowedValues: [ + { + name: 'Highest', + id: '1', + }, + { + name: 'High', + id: '2', + }, + { + name: 'Medium', + id: '3', + }, + { + name: 'Low', + id: '4', + }, + { + name: 'Lowest', + id: '5', + }, + ], + defaultValue: { + name: 'Medium', + id: '3', + }, + }, + }, + }, + ], + }, + ], + }, +}; + describe('Jira service', () => { let service: ExternalService; @@ -116,19 +186,24 @@ describe('Jira service', () => { test('it should throw an error', async () => { requestMock.mockImplementation(() => { - throw new Error('An error has occurred'); + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { summary: 'Required field' } } }; + throw error; }); expect(service.getIncident('1')).rejects.toThrow( - 'Unable to get incident with id 1. Error: An error has occurred' + '[Action][Jira]: Unable to get incident with id 1. Error: An error has occurred Reason: Required field' ); }); }); describe('createIncident', () => { test('it creates the incident correctly', async () => { - // The response from Jira when creating an issue contains only the key and the id. - // The service makes two calls when creating an issue. One to create and one to get - // the created incident with all the necessary fields. + /* The response from Jira when creating an issue contains only the key and the id. + The function makes the following calls when creating an issue: + 1. Get issueTypes to set a default ONLY when incident.issueType is missing + 2. Create the issue. + 3. Get the created issue with all the necessary fields. + */ requestMock.mockImplementationOnce(() => ({ data: { id: '1', key: 'CK-1', fields: { summary: 'title', description: 'description' } }, })); @@ -138,7 +213,13 @@ describe('Jira service', () => { })); const res = await service.createIncident({ - incident: { summary: 'title', description: 'desc' }, + incident: { + summary: 'title', + description: 'desc', + labels: [], + issueType: '10006', + priority: 'High', + }, }); expect(res).toEqual({ @@ -149,6 +230,68 @@ describe('Jira service', () => { }); }); + test('it creates the incident correctly without issue type', async () => { + /* The response from Jira when creating an issue contains only the key and the id. + The function makes the following calls when creating an issue: + 1. Get issueTypes to set a default ONLY when incident.issueType is missing + 2. Create the issue. + 3. Get the created issue with all the necessary fields. + */ + // getIssueType mocks + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + + // getIssueType mocks + requestMock.mockImplementationOnce(() => issueTypesResponse); + + requestMock.mockImplementationOnce(() => ({ + data: { id: '1', key: 'CK-1', fields: { summary: 'title', description: 'description' } }, + })); + + requestMock.mockImplementationOnce(() => ({ + data: { id: '1', key: 'CK-1', fields: { created: '2020-04-27T10:59:46.202Z' } }, + })); + + const res = await service.createIncident({ + incident: { + summary: 'title', + description: 'desc', + labels: [], + priority: 'High', + issueType: null, + }, + }); + + expect(res).toEqual({ + title: 'CK-1', + id: '1', + pushedDate: '2020-04-27T10:59:46.202Z', + url: 'https://siem-kibana.atlassian.net/browse/CK-1', + }); + + expect(requestMock).toHaveBeenCalledWith({ + axios, + url: 'https://siem-kibana.atlassian.net/rest/api/2/issue', + logger, + method: 'post', + data: { + fields: { + summary: 'title', + description: 'desc', + project: { key: 'CK' }, + issuetype: { id: '10006' }, + labels: [], + priority: { name: 'High' }, + }, + }, + }); + }); + test('it should call request with correct arguments', async () => { requestMock.mockImplementation(() => ({ data: { @@ -159,7 +302,13 @@ describe('Jira service', () => { })); await service.createIncident({ - incident: { summary: 'title', description: 'desc' }, + incident: { + summary: 'title', + description: 'desc', + labels: [], + issueType: '10006', + priority: 'High', + }, }); expect(requestMock).toHaveBeenCalledWith({ @@ -172,7 +321,9 @@ describe('Jira service', () => { summary: 'title', description: 'desc', project: { key: 'CK' }, - issuetype: { name: 'Task' }, + issuetype: { id: '10006' }, + labels: [], + priority: { name: 'High' }, }, }, }); @@ -180,14 +331,24 @@ describe('Jira service', () => { test('it should throw an error', async () => { requestMock.mockImplementation(() => { - throw new Error('An error has occurred'); + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { summary: 'Required field' } } }; + throw error; }); expect( service.createIncident({ - incident: { summary: 'title', description: 'desc' }, + incident: { + summary: 'title', + description: 'desc', + labels: [], + issueType: '10006', + priority: 'High', + }, }) - ).rejects.toThrow('[Action][Jira]: Unable to create incident. Error: An error has occurred'); + ).rejects.toThrow( + '[Action][Jira]: Unable to create incident. Error: An error has occurred. Reason: Required field' + ); }); }); @@ -203,7 +364,13 @@ describe('Jira service', () => { const res = await service.updateIncident({ incidentId: '1', - incident: { summary: 'title', description: 'desc' }, + incident: { + summary: 'title', + description: 'desc', + labels: [], + issueType: '10006', + priority: 'High', + }, }); expect(res).toEqual({ @@ -225,7 +392,13 @@ describe('Jira service', () => { await service.updateIncident({ incidentId: '1', - incident: { summary: 'title', description: 'desc' }, + incident: { + summary: 'title', + description: 'desc', + labels: [], + issueType: '10006', + priority: 'High', + }, }); expect(requestMock).toHaveBeenCalledWith({ @@ -233,22 +406,39 @@ describe('Jira service', () => { logger, method: 'put', url: 'https://siem-kibana.atlassian.net/rest/api/2/issue/1', - data: { fields: { summary: 'title', description: 'desc' } }, + data: { + fields: { + summary: 'title', + description: 'desc', + labels: [], + priority: { name: 'High' }, + issuetype: { id: '10006' }, + project: { key: 'CK' }, + }, + }, }); }); test('it should throw an error', async () => { requestMock.mockImplementation(() => { - throw new Error('An error has occurred'); + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { summary: 'Required field' } } }; + throw error; }); expect( service.updateIncident({ incidentId: '1', - incident: { summary: 'title', description: 'desc' }, + incident: { + summary: 'title', + description: 'desc', + labels: [], + issueType: '10006', + priority: 'High', + }, }) ).rejects.toThrow( - '[Action][Jira]: Unable to update incident with id 1. Error: An error has occurred' + '[Action][Jira]: Unable to update incident with id 1. Error: An error has occurred. Reason: Required field' ); }); }); @@ -265,8 +455,14 @@ describe('Jira service', () => { const res = await service.createComment({ incidentId: '1', - comment: { comment: 'comment', commentId: 'comment-1' }, - field: 'comments', + comment: { + comment: 'comment', + commentId: 'comment-1', + createdBy: null, + createdAt: null, + updatedAt: null, + updatedBy: null, + }, }); expect(res).toEqual({ @@ -287,8 +483,14 @@ describe('Jira service', () => { await service.createComment({ incidentId: '1', - comment: { comment: 'comment', commentId: 'comment-1' }, - field: 'my_field', + comment: { + comment: 'comment', + commentId: 'comment-1', + createdBy: null, + createdAt: null, + updatedAt: null, + updatedBy: null, + }, }); expect(requestMock).toHaveBeenCalledWith({ @@ -302,18 +504,416 @@ describe('Jira service', () => { test('it should throw an error', async () => { requestMock.mockImplementation(() => { - throw new Error('An error has occurred'); + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { summary: 'Required field' } } }; + throw error; }); expect( service.createComment({ incidentId: '1', - comment: { comment: 'comment', commentId: 'comment-1' }, - field: 'comments', + comment: { + comment: 'comment', + commentId: 'comment-1', + createdBy: null, + createdAt: null, + updatedAt: null, + updatedBy: null, + }, }) ).rejects.toThrow( - '[Action][Jira]: Unable to create comment at incident with id 1. Error: An error has occurred' + '[Action][Jira]: Unable to create comment at incident with id 1. Error: An error has occurred. Reason: Required field' + ); + }); + }); + + describe('getCapabilities', () => { + test('it should return the capabilities', async () => { + requestMock.mockImplementation(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + const res = await service.getCapabilities(); + expect(res).toEqual({ + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }); + }); + + test('it should call request with correct arguments', async () => { + requestMock.mockImplementation(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + + await service.getCapabilities(); + + expect(requestMock).toHaveBeenCalledWith({ + axios, + logger, + method: 'get', + url: 'https://siem-kibana.atlassian.net/rest/capabilities', + }); + }); + + test('it should throw an error', async () => { + requestMock.mockImplementation(() => { + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { capabilities: 'Could not get capabilities' } } }; + throw error; + }); + + expect(service.getCapabilities()).rejects.toThrow( + '[Action][Jira]: Unable to get capabilities. Error: An error has occurred. Reason: Could not get capabilities' ); }); }); + + describe('getIssueTypes', () => { + describe('Old API', () => { + test('it should return the issue types', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + + requestMock.mockImplementationOnce(() => issueTypesResponse); + + const res = await service.getIssueTypes(); + + expect(res).toEqual([ + { + id: '10006', + name: 'Task', + }, + { + id: '10007', + name: 'Bug', + }, + ]); + }); + + test('it should call request with correct arguments', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + + requestMock.mockImplementationOnce(() => issueTypesResponse); + + await service.getIssueTypes(); + + expect(requestMock).toHaveBeenLastCalledWith({ + axios, + logger, + method: 'get', + url: + 'https://siem-kibana.atlassian.net/rest/api/2/issue/createmeta?projectKeys=CK&expand=projects.issuetypes.fields', + }); + }); + + test('it should throw an error', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + + requestMock.mockImplementation(() => { + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { issuetypes: 'Could not get issue types' } } }; + throw error; + }); + + expect(service.getIssueTypes()).rejects.toThrow( + '[Action][Jira]: Unable to get issue types. Error: An error has occurred. Reason: Could not get issue types' + ); + }); + }); + describe('New API', () => { + test('it should return the issue types', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + 'list-project-issuetypes': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-project-issuetypes', + 'list-issuetype-fields': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-issuetype-fields', + }, + }, + })); + + requestMock.mockImplementationOnce(() => ({ + data: { + values: issueTypesResponse.data.projects[0].issuetypes, + }, + })); + + const res = await service.getIssueTypes(); + + expect(res).toEqual([ + { + id: '10006', + name: 'Task', + }, + { + id: '10007', + name: 'Bug', + }, + ]); + }); + + test('it should call request with correct arguments', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + 'list-project-issuetypes': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-project-issuetypes', + 'list-issuetype-fields': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-issuetype-fields', + }, + }, + })); + + requestMock.mockImplementationOnce(() => ({ + data: { + values: issueTypesResponse.data.projects[0].issuetypes, + }, + })); + + await service.getIssueTypes(); + + expect(requestMock).toHaveBeenLastCalledWith({ + axios, + logger, + method: 'get', + url: 'https://siem-kibana.atlassian.net/rest/api/2/issue/createmeta/CK/issuetypes', + }); + }); + + test('it should throw an error', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + 'list-project-issuetypes': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-project-issuetypes', + 'list-issuetype-fields': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-issuetype-fields', + }, + }, + })); + + requestMock.mockImplementation(() => { + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { issuetypes: 'Could not get issue types' } } }; + throw error; + }); + + expect(service.getIssueTypes()).rejects.toThrow( + '[Action][Jira]: Unable to get issue types. Error: An error has occurred. Reason: Could not get issue types' + ); + }); + }); + }); + + describe('getFieldsByIssueType', () => { + describe('Old API', () => { + test('it should return the fields', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + + requestMock.mockImplementationOnce(() => fieldsResponse); + + const res = await service.getFieldsByIssueType('10006'); + + expect(res).toEqual({ + priority: { + allowedValues: [ + { id: '1', name: 'Highest' }, + { id: '2', name: 'High' }, + { id: '3', name: 'Medium' }, + { id: '4', name: 'Low' }, + { id: '5', name: 'Lowest' }, + ], + defaultValue: { id: '3', name: 'Medium' }, + }, + summary: { allowedValues: [], defaultValue: {} }, + }); + }); + + test('it should call request with correct arguments', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + + requestMock.mockImplementationOnce(() => fieldsResponse); + + await service.getFieldsByIssueType('10006'); + + expect(requestMock).toHaveBeenLastCalledWith({ + axios, + logger, + method: 'get', + url: + 'https://siem-kibana.atlassian.net/rest/api/2/issue/createmeta?projectKeys=CK&issuetypeIds=10006&expand=projects.issuetypes.fields', + }); + }); + + test('it should throw an error', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + navigation: 'https://siem-kibana.atlassian.net/rest/capabilities/navigation', + }, + }, + })); + + requestMock.mockImplementation(() => { + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { fields: 'Could not get fields' } } }; + throw error; + }); + + expect(service.getFieldsByIssueType('10006')).rejects.toThrow( + '[Action][Jira]: Unable to get fields. Error: An error has occurred. Reason: Could not get fields' + ); + }); + }); + + describe('New API', () => { + test('it should return the fields', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + 'list-project-issuetypes': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-project-issuetypes', + 'list-issuetype-fields': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-issuetype-fields', + }, + }, + })); + + requestMock.mockImplementationOnce(() => ({ + data: { + values: [ + { fieldId: 'summary' }, + { + fieldId: 'priority', + allowedValues: [ + { + name: 'Medium', + id: '3', + }, + ], + defaultValue: { + name: 'Medium', + id: '3', + }, + }, + ], + }, + })); + + const res = await service.getFieldsByIssueType('10006'); + + expect(res).toEqual({ + priority: { + allowedValues: [{ id: '3', name: 'Medium' }], + defaultValue: { id: '3', name: 'Medium' }, + }, + summary: { allowedValues: [], defaultValue: {} }, + }); + }); + + test('it should call request with correct arguments', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + 'list-project-issuetypes': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-project-issuetypes', + 'list-issuetype-fields': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-issuetype-fields', + }, + }, + })); + + requestMock.mockImplementationOnce(() => ({ + data: { + values: [ + { fieldId: 'summary' }, + { + fieldId: 'priority', + allowedValues: [ + { + name: 'Medium', + id: '3', + }, + ], + defaultValue: { + name: 'Medium', + id: '3', + }, + }, + ], + }, + })); + + await service.getFieldsByIssueType('10006'); + + expect(requestMock).toHaveBeenLastCalledWith({ + axios, + logger, + method: 'get', + url: 'https://siem-kibana.atlassian.net/rest/api/2/issue/createmeta/CK/issuetypes/10006', + }); + }); + + test('it should throw an error', async () => { + requestMock.mockImplementationOnce(() => ({ + data: { + capabilities: { + 'list-project-issuetypes': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-project-issuetypes', + 'list-issuetype-fields': + 'https://siem-kibana.atlassian.net/rest/capabilities/list-issuetype-fields', + }, + }, + })); + + requestMock.mockImplementation(() => { + const error: ResponseError = new Error('An error has occurred'); + error.response = { data: { errors: { issuetypes: 'Could not get issue types' } } }; + throw error; + }); + + expect(service.getFieldsByIssueType('10006')).rejects.toThrow( + '[Action][Jira]: Unable to get fields. Error: An error has occurred. Reason: Could not get issue types' + ); + }); + }); + }); }); diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/service.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/service.ts index aec73cfb375ed..84b6e70d2a100 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/service.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/service.ts @@ -6,14 +6,20 @@ import axios from 'axios'; -import { ExternalServiceCredentials, ExternalService, ExternalServiceParams } from '../case/types'; import { Logger } from '../../../../../../src/core/server'; import { + ExternalServiceCredentials, + ExternalService, + CreateIncidentParams, + UpdateIncidentParams, JiraPublicConfigurationType, JiraSecretConfigurationType, - CreateIncidentRequest, - UpdateIncidentRequest, - CreateCommentRequest, + Fields, + CreateCommentParams, + Incident, + ResponseError, + ExternalServiceCommentResponse, + ExternalServiceIncidentResponse, } from './types'; import * as i18n from './translations'; @@ -22,11 +28,12 @@ import { ProxySettings } from '../../types'; const VERSION = '2'; const BASE_URL = `rest/api/${VERSION}`; -const INCIDENT_URL = `issue`; -const COMMENT_URL = `comment`; +const CAPABILITIES_URL = `rest/capabilities`; const VIEW_INCIDENT_URL = `browse`; +const createMetaCapabilities = ['list-project-issuetypes', 'list-issuetype-fields']; + export const createExternalService = ( { config, secrets }: ExternalServiceCredentials, logger: Logger, @@ -39,8 +46,13 @@ export const createExternalService = ( throw Error(`[Action]${i18n.NAME}: Wrong configuration.`); } - const incidentUrl = `${url}/${BASE_URL}/${INCIDENT_URL}`; - const commentUrl = `${incidentUrl}/{issueId}/${COMMENT_URL}`; + const incidentUrl = `${url}/${BASE_URL}/issue`; + const capabilitiesUrl = `${url}/${CAPABILITIES_URL}`; + const commentUrl = `${incidentUrl}/{issueId}/comment`; + const getIssueTypesOldAPIURL = `${url}/${BASE_URL}/issue/createmeta?projectKeys=${projectKey}&expand=projects.issuetypes.fields`; + const getIssueTypeFieldsOldAPIURL = `${url}/${BASE_URL}/issue/createmeta?projectKeys=${projectKey}&issuetypeIds={issueTypeId}&expand=projects.issuetypes.fields`; + const getIssueTypesUrl = `${url}/${BASE_URL}/issue/createmeta/${projectKey}/issuetypes`; + const getIssueTypeFieldsUrl = `${url}/${BASE_URL}/issue/createmeta/${projectKey}/issuetypes/{issueTypeId}`; const axiosInstance = axios.create({ auth: { username: email, password: apiToken }, }); @@ -52,6 +64,60 @@ export const createExternalService = ( const getCommentsURL = (issueId: string) => { return commentUrl.replace('{issueId}', issueId); }; + const createGetIssueTypeFieldsUrl = (uri: string, issueTypeId: string) => { + return uri.replace('{issueTypeId}', issueTypeId); + }; + + const createFields = (key: string, incident: Incident): Fields => { + let fields: Fields = { + summary: incident.summary, + project: { key }, + }; + + if (incident.issueType) { + fields = { ...fields, issuetype: { id: incident.issueType } }; + } + + if (incident.description) { + fields = { ...fields, description: incident.description }; + } + + if (incident.labels) { + fields = { ...fields, labels: incident.labels }; + } + + if (incident.priority) { + fields = { ...fields, priority: { name: incident.priority } }; + } + + return fields; + }; + + const createErrorMessage = (errors: ResponseError) => { + return Object.entries(errors).reduce((errorMessage, [, value]) => { + const msg = errorMessage.length > 0 ? `${errorMessage} ${value}` : value; + return msg; + }, ''); + }; + + const hasSupportForNewAPI = (capabilities: { capabilities?: {} }) => + createMetaCapabilities.every((c) => Object.keys(capabilities?.capabilities ?? {}).includes(c)); + + const normalizeIssueTypes = (issueTypes: Array<{ id: string; name: string }>) => + issueTypes.map((type) => ({ id: type.id, name: type.name })); + + const normalizeFields = (fields: { + [key: string]: { allowedValues?: Array<{}>; defaultValue?: {} }; + }) => + Object.keys(fields ?? {}).reduce((fieldsAcc, fieldKey) => { + return { + ...fieldsAcc, + [fieldKey]: { + allowedValues: fields[fieldKey]?.allowedValues ?? [], + defaultValue: fields[fieldKey]?.defaultValue ?? {}, + }, + }; + }, {}); const getIncident = async (id: string) => { try { @@ -67,23 +133,46 @@ export const createExternalService = ( return { ...rest, ...fields }; } catch (error) { throw new Error( - getErrorMessage(i18n.NAME, `Unable to get incident with id ${id}. Error: ${error.message}`) + getErrorMessage( + i18n.NAME, + `Unable to get incident with id ${id}. Error: ${ + error.message + } Reason: ${createErrorMessage(error.response?.data?.errors ?? {})}` + ) ); } }; - const createIncident = async ({ incident }: ExternalServiceParams) => { - // The response from Jira when creating an issue contains only the key and the id. - // The function makes two calls when creating an issue. One to create the issue and one to get - // the created issue with all the necessary fields. + const createIncident = async ({ + incident, + }: CreateIncidentParams): Promise => { + /* The response from Jira when creating an issue contains only the key and the id. + The function makes the following calls when creating an issue: + 1. Get issueTypes to set a default ONLY when incident.issueType is missing + 2. Create the issue. + 3. Get the created issue with all the necessary fields. + */ + + let issueType = incident.issueType; + + if (!incident.issueType) { + const issueTypes = await getIssueTypes(); + issueType = issueTypes[0]?.id ?? ''; + } + + const fields = createFields(projectKey, { + ...incident, + issueType, + }); + try { - const res = await request({ + const res = await request({ axios: axiosInstance, url: `${incidentUrl}`, logger, method: 'post', data: { - fields: { ...incident, project: { key: projectKey }, issuetype: { name: 'Task' } }, + fields, }, proxySettings, }); @@ -98,23 +187,38 @@ export const createExternalService = ( }; } catch (error) { throw new Error( - getErrorMessage(i18n.NAME, `Unable to create incident. Error: ${error.message}`) + getErrorMessage( + i18n.NAME, + `Unable to create incident. Error: ${error.message}. Reason: ${createErrorMessage( + error.response?.data?.errors ?? {} + )}` + ) ); } }; - const updateIncident = async ({ incidentId, incident }: ExternalServiceParams) => { + const updateIncident = async ({ + incidentId, + incident, + }: UpdateIncidentParams): Promise => { + const incidentWithoutNullValues = Object.entries(incident).reduce( + (obj, [key, value]) => (value != null ? { ...obj, [key]: value } : obj), + {} as Incident + ); + + const fields = createFields(projectKey, incidentWithoutNullValues); + try { - await request({ + await request({ axios: axiosInstance, method: 'put', url: `${incidentUrl}/${incidentId}`, logger, - data: { fields: { ...incident } }, + data: { fields }, proxySettings, }); - const updatedIncident = await getIncident(incidentId); + const updatedIncident = await getIncident(incidentId as string); return { title: updatedIncident.key, @@ -126,15 +230,20 @@ export const createExternalService = ( throw new Error( getErrorMessage( i18n.NAME, - `Unable to update incident with id ${incidentId}. Error: ${error.message}` + `Unable to update incident with id ${incidentId}. Error: ${ + error.message + }. Reason: ${createErrorMessage(error.response?.data?.errors ?? {})}` ) ); } }; - const createComment = async ({ incidentId, comment, field }: ExternalServiceParams) => { + const createComment = async ({ + incidentId, + comment, + }: CreateCommentParams): Promise => { try { - const res = await request({ + const res = await request({ axios: axiosInstance, method: 'post', url: getCommentsURL(incidentId), @@ -152,7 +261,118 @@ export const createExternalService = ( throw new Error( getErrorMessage( i18n.NAME, - `Unable to create comment at incident with id ${incidentId}. Error: ${error.message}` + `Unable to create comment at incident with id ${incidentId}. Error: ${ + error.message + }. Reason: ${createErrorMessage(error.response?.data?.errors ?? {})}` + ) + ); + } + }; + + const getCapabilities = async () => { + try { + const res = await request({ + axios: axiosInstance, + method: 'get', + url: capabilitiesUrl, + logger, + proxySettings, + }); + + return { ...res.data }; + } catch (error) { + throw new Error( + getErrorMessage( + i18n.NAME, + `Unable to get capabilities. Error: ${error.message}. Reason: ${createErrorMessage( + error.response?.data?.errors ?? {} + )}` + ) + ); + } + }; + + const getIssueTypes = async () => { + const capabilitiesResponse = await getCapabilities(); + const supportsNewAPI = hasSupportForNewAPI(capabilitiesResponse); + + try { + if (!supportsNewAPI) { + const res = await request({ + axios: axiosInstance, + method: 'get', + url: getIssueTypesOldAPIURL, + logger, + proxySettings, + }); + + const issueTypes = res.data.projects[0]?.issuetypes ?? []; + return normalizeIssueTypes(issueTypes); + } else { + const res = await request({ + axios: axiosInstance, + method: 'get', + url: getIssueTypesUrl, + logger, + proxySettings, + }); + + const issueTypes = res.data.values; + return normalizeIssueTypes(issueTypes); + } + } catch (error) { + throw new Error( + getErrorMessage( + i18n.NAME, + `Unable to get issue types. Error: ${error.message}. Reason: ${createErrorMessage( + error.response?.data?.errors ?? {} + )}` + ) + ); + } + }; + + const getFieldsByIssueType = async (issueTypeId: string) => { + const capabilitiesResponse = await getCapabilities(); + const supportsNewAPI = hasSupportForNewAPI(capabilitiesResponse); + + try { + if (!supportsNewAPI) { + const res = await request({ + axios: axiosInstance, + method: 'get', + url: createGetIssueTypeFieldsUrl(getIssueTypeFieldsOldAPIURL, issueTypeId), + logger, + proxySettings, + }); + + const fields = res.data.projects[0]?.issuetypes[0]?.fields || {}; + return normalizeFields(fields); + } else { + const res = await request({ + axios: axiosInstance, + method: 'get', + url: createGetIssueTypeFieldsUrl(getIssueTypeFieldsUrl, issueTypeId), + logger, + proxySettings, + }); + + const fields = res.data.values.reduce( + (acc: { [x: string]: {} }, value: { fieldId: string }) => ({ + ...acc, + [value.fieldId]: { ...value }, + }), + {} + ); + return normalizeFields(fields); + } + } catch (error) { + throw new Error( + getErrorMessage( + i18n.NAME, + `Unable to get fields. Error: ${error.message}. Reason: ${createErrorMessage( + error.response?.data?.errors ?? {} + )}` ) ); } @@ -163,5 +383,8 @@ export const createExternalService = ( createIncident, updateIncident, createComment, + getCapabilities, + getIssueTypes, + getFieldsByIssueType, }; }; diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/translations.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/translations.ts index dae0d75952e11..0e71de813eb5d 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/translations.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/translations.ts @@ -9,3 +9,19 @@ import { i18n } from '@kbn/i18n'; export const NAME = i18n.translate('xpack.actions.builtin.case.jiraTitle', { defaultMessage: 'Jira', }); + +export const ALLOWED_HOSTS_ERROR = (message: string) => + i18n.translate('xpack.actions.builtin.jira.configuration.apiAllowedHostsError', { + defaultMessage: 'error configuring connector action: {message}', + values: { + message, + }, + }); + +// TODO: remove when Case mappings will be removed +export const MAPPING_EMPTY = i18n.translate( + 'xpack.actions.builtin.jira.configuration.emptyMapping', + { + defaultMessage: '[incidentConfiguration.mapping]: expected non-empty but got empty', + } +); diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/types.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/types.ts index 8d9c6b92abb3b..5e97f5309f8ee 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/types.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/types.ts @@ -4,29 +4,169 @@ * you may not use this file except in compliance with the Elastic License. */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + import { TypeOf } from '@kbn/config-schema'; -import { JiraPublicConfigurationSchema, JiraSecretConfigurationSchema } from './schema'; +import { + ExternalIncidentServiceConfigurationSchema, + ExternalIncidentServiceSecretConfigurationSchema, + ExecutorParamsSchema, + ExecutorSubActionPushParamsSchema, + ExecutorSubActionGetIncidentParamsSchema, + ExecutorSubActionHandshakeParamsSchema, + ExecutorSubActionGetCapabilitiesParamsSchema, + ExecutorSubActionGetIssueTypesParamsSchema, + ExecutorSubActionGetFieldsByIssueTypeParamsSchema, +} from './schema'; +import { ActionsConfigurationUtilities } from '../../actions_config'; +import { IncidentConfigurationSchema } from '../case/common_schema'; +import { Comment } from '../case/common_types'; +import { Logger } from '../../../../../../src/core/server'; + +export type JiraPublicConfigurationType = TypeOf; +export type JiraSecretConfigurationType = TypeOf< + typeof ExternalIncidentServiceSecretConfigurationSchema +>; + +export type ExecutorParams = TypeOf; +export type ExecutorSubActionPushParams = TypeOf; + +export type IncidentConfiguration = TypeOf; + +export interface ExternalServiceCredentials { + config: Record; + secrets: Record; +} + +export interface ExternalServiceValidation { + config: (configurationUtilities: ActionsConfigurationUtilities, configObject: any) => void; + secrets: (configurationUtilities: ActionsConfigurationUtilities, secrets: any) => void; +} + +export interface ExternalServiceIncidentResponse { + id: string; + title: string; + url: string; + pushedDate: string; +} + +export interface ExternalServiceCommentResponse { + commentId: string; + pushedDate: string; + externalCommentId?: string; +} + +export type ExternalServiceParams = Record; + +export type Incident = Pick< + ExecutorSubActionPushParams, + 'description' | 'priority' | 'labels' | 'issueType' +> & { summary: string }; + +export interface CreateIncidentParams { + incident: Incident; +} + +export interface UpdateIncidentParams { + incidentId: string; + incident: Incident; +} + +export interface CreateCommentParams { + incidentId: string; + comment: Comment; +} -export type JiraPublicConfigurationType = TypeOf; -export type JiraSecretConfigurationType = TypeOf; +export type GetIssueTypesResponse = Array<{ id: string; name: string }>; +export type GetFieldsByIssueTypeResponse = Record< + string, + { allowedValues: Array<{}>; defaultValue: {} } +>; -interface CreateIncidentBasicRequestArgs { - summary: string; - description: string; +export interface ExternalService { + getIncident: (id: string) => Promise; + createIncident: (params: CreateIncidentParams) => Promise; + updateIncident: (params: UpdateIncidentParams) => Promise; + createComment: (params: CreateCommentParams) => Promise; + getCapabilities: () => Promise; + getIssueTypes: () => Promise; + getFieldsByIssueType: (issueTypeId: string) => Promise; } -interface CreateIncidentRequestArgs extends CreateIncidentBasicRequestArgs { - project: { key: string }; - issuetype: { name: string }; + +export interface PushToServiceApiParams extends ExecutorSubActionPushParams { + externalObject: Record; +} + +export type ExecutorSubActionGetIncidentParams = TypeOf< + typeof ExecutorSubActionGetIncidentParamsSchema +>; + +export type ExecutorSubActionHandshakeParams = TypeOf< + typeof ExecutorSubActionHandshakeParamsSchema +>; + +export type ExecutorSubActionGetCapabilitiesParams = TypeOf< + typeof ExecutorSubActionGetCapabilitiesParamsSchema +>; + +export type ExecutorSubActionGetIssueTypesParams = TypeOf< + typeof ExecutorSubActionGetIssueTypesParamsSchema +>; + +export type ExecutorSubActionGetFieldsByIssueTypeParams = TypeOf< + typeof ExecutorSubActionGetFieldsByIssueTypeParamsSchema +>; + +export interface ExternalServiceApiHandlerArgs { + externalService: ExternalService; + mapping: Map | null; +} + +export interface PushToServiceApiHandlerArgs extends ExternalServiceApiHandlerArgs { + params: PushToServiceApiParams; + logger: Logger; } -export interface CreateIncidentRequest { - fields: CreateIncidentRequestArgs; +export interface GetIncidentApiHandlerArgs extends ExternalServiceApiHandlerArgs { + params: ExecutorSubActionGetIncidentParams; } -export interface UpdateIncidentRequest { - fields: Partial; +export interface HandshakeApiHandlerArgs extends ExternalServiceApiHandlerArgs { + params: ExecutorSubActionHandshakeParams; } -export interface CreateCommentRequest { - body: string; +export interface GetIssueTypesHandlerArgs { + externalService: ExternalService; + params: ExecutorSubActionGetIssueTypesParams; +} + +export interface GetFieldsByIssueTypeHandlerArgs { + externalService: ExternalService; + params: ExecutorSubActionGetFieldsByIssueTypeParams; +} + +export interface PushToServiceResponse extends ExternalServiceIncidentResponse { + comments?: ExternalServiceCommentResponse[]; +} + +export interface ExternalServiceApi { + handshake: (args: HandshakeApiHandlerArgs) => Promise; + pushToService: (args: PushToServiceApiHandlerArgs) => Promise; + getIncident: (args: GetIncidentApiHandlerArgs) => Promise; + issueTypes: (args: GetIssueTypesHandlerArgs) => Promise; + fieldsByIssueType: ( + args: GetFieldsByIssueTypeHandlerArgs + ) => Promise; +} + +export type JiraExecutorResultData = + | PushToServiceResponse + | GetIssueTypesResponse + | GetFieldsByIssueTypeResponse; + +export interface Fields { + [key: string]: string | string[] | { name: string } | { key: string } | { id: string }; +} +export interface ResponseError { + [k: string]: string; } diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/validators.ts b/x-pack/plugins/actions/server/builtin_action_types/jira/validators.ts index 7226071392bc6..58a3e27247fae 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/validators.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/jira/validators.ts @@ -4,8 +4,38 @@ * you may not use this file except in compliance with the Elastic License. */ -import { validateCommonConfig, validateCommonSecrets } from '../case/validators'; -import { ExternalServiceValidation } from '../case/types'; +import { isEmpty } from 'lodash'; +import { ActionsConfigurationUtilities } from '../../actions_config'; +import { + JiraPublicConfigurationType, + JiraSecretConfigurationType, + ExternalServiceValidation, +} from './types'; + +import * as i18n from './translations'; + +export const validateCommonConfig = ( + configurationUtilities: ActionsConfigurationUtilities, + configObject: JiraPublicConfigurationType +) => { + if ( + configObject.incidentConfiguration !== null && + isEmpty(configObject.incidentConfiguration.mapping) + ) { + return i18n.MAPPING_EMPTY; + } + + try { + configurationUtilities.ensureUriAllowed(configObject.apiUrl); + } catch (allowedListError) { + return i18n.ALLOWED_HOSTS_ERROR(allowedListError.message); + } +}; + +export const validateCommonSecrets = ( + configurationUtilities: ActionsConfigurationUtilities, + secrets: JiraSecretConfigurationType +) => {}; export const validate: ExternalServiceValidation = { config: validateCommonConfig, diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.test.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.test.ts index 0bb096ecd0f62..7a68781bb9a75 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.test.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.test.ts @@ -91,7 +91,7 @@ describe('api', () => { expect(externalService.updateIncident).not.toHaveBeenCalled(); }); - test('it calls updateIncident correctly', async () => { + test('it calls updateIncident correctly when creating an incident and having comments', async () => { const params = { ...apiParams, externalId: null }; await api.pushToService({ externalService, @@ -103,7 +103,7 @@ describe('api', () => { expect(externalService.updateIncident).toHaveBeenCalledTimes(2); expect(externalService.updateIncident).toHaveBeenNthCalledWith(1, { incident: { - comments: 'A comment', + comments: 'A comment (added at 2020-03-13T08:34:53.450Z by Elastic User)', description: 'Incident description (created at 2020-03-13T08:34:53.450Z by Elastic User)', short_description: @@ -114,7 +114,7 @@ describe('api', () => { expect(externalService.updateIncident).toHaveBeenNthCalledWith(2, { incident: { - comments: 'Another comment', + comments: 'Another comment (added at 2020-03-13T08:34:53.450Z by Elastic User)', description: 'Incident description (created at 2020-03-13T08:34:53.450Z by Elastic User)', short_description: @@ -215,7 +215,7 @@ describe('api', () => { expect(externalService.updateIncident).toHaveBeenNthCalledWith(2, { incident: { - comments: 'A comment', + comments: 'A comment (added at 2020-03-13T08:34:53.450Z by Elastic User)', description: 'Incident description (updated at 2020-03-13T08:34:53.450Z by Elastic User)', short_description: diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.ts index 3281832941558..c8e6147ecef46 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/api.ts @@ -10,11 +10,13 @@ import { HandshakeApiHandlerArgs, GetIncidentApiHandlerArgs, ExternalServiceApi, + PushToServiceApiParams, + PushToServiceResponse, } from './types'; // TODO: to remove, need to support Case import { transformers } from '../case/transformers'; -import { PushToServiceResponse, TransformFieldsArgs } from './case_types'; +import { TransformFieldsArgs, Comment, EntityInformation } from '../case/common_types'; import { prepareFieldsForTransformation } from '../case/utils'; const handshakeHandler = async ({ @@ -92,9 +94,10 @@ const pushToServiceHandler = async ({ mapping.get('comments')?.actionType !== 'nothing' ) { res.comments = []; + const commentsTransformed = transformComments(comments, ['informationAdded']); const fieldsKey = mapping.get('comments')?.target ?? 'comments'; - for (const currentComment of comments) { + for (const currentComment of commentsTransformed) { await externalService.updateIncident({ incidentId: res.id, incident: { @@ -118,7 +121,7 @@ export const transformFields = ({ params, fields, currentIncident, -}: TransformFieldsArgs): Record => { +}: TransformFieldsArgs): Record => { return fields.reduce((prev, cur) => { const transform = flow(...cur.pipes.map((p) => transformers[p])); return { @@ -126,20 +129,35 @@ export const transformFields = ({ [cur.key]: transform({ value: cur.value, date: params.updatedAt ?? params.createdAt, - user: - (params.updatedBy != null - ? params.updatedBy.fullName - ? params.updatedBy.fullName - : params.updatedBy.username - : params.createdBy.fullName - ? params.createdBy.fullName - : params.createdBy.username) ?? '', + user: getEntity(params), previousValue: currentIncident ? currentIncident[cur.key] : '', }).value, }; }, {}); }; +export const transformComments = (comments: Comment[], pipes: string[]): Comment[] => { + return comments.map((c) => ({ + ...c, + comment: flow(...pipes.map((p) => transformers[p]))({ + value: c.comment, + date: c.updatedAt ?? c.createdAt, + user: getEntity(c), + }).value, + })); +}; + +export const getEntity = (entity: EntityInformation): string => + (entity.updatedBy != null + ? entity.updatedBy.fullName + ? entity.updatedBy.fullName + : entity.updatedBy.username + : entity.createdBy != null + ? entity.createdBy.fullName + ? entity.createdBy.fullName + : entity.createdBy.username + : '') ?? ''; + export const api: ExternalServiceApi = { handshake: handshakeHandler, pushToService: pushToServiceHandler, diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/index.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/index.ts index 3addbe7c54dac..41a577918b18e 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/index.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/index.ts @@ -24,11 +24,11 @@ import { ExecutorSubActionPushParams, ServiceNowPublicConfigurationType, ServiceNowSecretConfigurationType, + PushToServiceResponse, } from './types'; // TODO: to remove, need to support Case import { buildMap, mapParams } from '../case/utils'; -import { PushToServiceResponse } from './case_types'; interface GetActionTypeParams { logger: Logger; diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/mocks.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/mocks.ts index 5f22fcd4fdc85..55a14e4528acf 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/mocks.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/mocks.ts @@ -5,7 +5,7 @@ */ import { ExternalService, PushToServiceApiParams, ExecutorSubActionPushParams } from './types'; -import { MapRecord } from './case_types'; +import { MapRecord } from '../case/common_types'; const createMock = (): jest.Mocked => { const service = { diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/schema.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/schema.ts index 82afebaaee445..921de42adfcaf 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/schema.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/schema.ts @@ -5,7 +5,11 @@ */ import { schema } from '@kbn/config-schema'; -import { CommentSchema, EntityInformation, IncidentConfigurationSchema } from './case_shema'; +import { + CommentSchema, + EntityInformation, + IncidentConfigurationSchema, +} from '../case/common_schema'; export const ExternalIncidentServiceConfiguration = { apiUrl: schema.string(), diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/translations.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/translations.ts index 05c7d805a1852..7cc97a241c4bc 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/translations.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/translations.ts @@ -10,8 +10,8 @@ export const NAME = i18n.translate('xpack.actions.builtin.servicenowTitle', { defaultMessage: 'ServiceNow', }); -export const WHITE_LISTED_ERROR = (message: string) => - i18n.translate('xpack.actions.builtin.configuration.apiWhitelistError', { +export const ALLOWED_HOSTS_ERROR = (message: string) => + i18n.translate('xpack.actions.builtin.configuration.apiAllowedHostsError', { defaultMessage: 'error configuring connector action: {message}', values: { message, diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/types.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/types.ts index 0db9b6642ea5c..e8fcfac45d789 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/types.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/types.ts @@ -16,8 +16,8 @@ import { ExecutorSubActionHandshakeParamsSchema, } from './schema'; import { ActionsConfigurationUtilities } from '../../actions_config'; -import { IncidentConfigurationSchema } from './case_shema'; -import { PushToServiceResponse } from './case_types'; +import { ExternalServiceCommentResponse } from '../case/common_types'; +import { IncidentConfigurationSchema } from '../case/common_schema'; import { Logger } from '../../../../../../src/core/server'; export type ServiceNowPublicConfigurationType = TypeOf< @@ -52,6 +52,9 @@ export interface ExternalServiceIncidentResponse { url: string; pushedDate: string; } +export interface PushToServiceResponse extends ExternalServiceIncidentResponse { + comments?: ExternalServiceCommentResponse[]; +} export type ExternalServiceParams = Record; diff --git a/x-pack/plugins/actions/server/builtin_action_types/servicenow/validators.ts b/x-pack/plugins/actions/server/builtin_action_types/servicenow/validators.ts index 6eec3b8d63b86..87bbfd9c7ea95 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/servicenow/validators.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/servicenow/validators.ts @@ -27,8 +27,8 @@ export const validateCommonConfig = ( try { configurationUtilities.ensureUriAllowed(configObject.apiUrl); - } catch (allowListError) { - return i18n.WHITE_LISTED_ERROR(allowListError.message); + } catch (allowedListError) { + return i18n.ALLOWED_HOSTS_ERROR(allowedListError.message); } }; diff --git a/x-pack/plugins/case/common/constants.ts b/x-pack/plugins/case/common/constants.ts index bd12c258a5388..15a318002390f 100644 --- a/x-pack/plugins/case/common/constants.ts +++ b/x-pack/plugins/case/common/constants.ts @@ -28,5 +28,11 @@ export const CASE_USER_ACTIONS_URL = `${CASE_DETAILS_URL}/user_actions`; export const ACTION_URL = '/api/actions'; export const ACTION_TYPES_URL = '/api/actions/list_action_types'; export const SERVICENOW_ACTION_TYPE_ID = '.servicenow'; +export const JIRA_ACTION_TYPE_ID = '.jira'; +export const RESILIENT_ACTION_TYPE_ID = '.resilient'; -export const SUPPORTED_CONNECTORS = ['.servicenow', '.jira', '.resilient']; +export const SUPPORTED_CONNECTORS = [ + SERVICENOW_ACTION_TYPE_ID, + JIRA_ACTION_TYPE_ID, + RESILIENT_ACTION_TYPE_ID, +]; diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.ts b/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.ts index 28e75dd2f8c32..a22d7ae5cea21 100644 --- a/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.ts +++ b/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.ts @@ -12,6 +12,7 @@ import { CASE_CONFIGURE_CONNECTORS_URL, SUPPORTED_CONNECTORS, SERVICENOW_ACTION_TYPE_ID, + JIRA_ACTION_TYPE_ID, } from '../../../../../common/constants'; /* @@ -36,8 +37,9 @@ export function initCaseConfigureGetActionConnector({ caseService, router }: Rou (action) => SUPPORTED_CONNECTORS.includes(action.actionTypeId) && // Need this filtering temporary to display only Case owned ServiceNow connectors - (action.actionTypeId !== SERVICENOW_ACTION_TYPE_ID || - (action.actionTypeId === SERVICENOW_ACTION_TYPE_ID && action.config!.isCaseOwned)) + (![SERVICENOW_ACTION_TYPE_ID, JIRA_ACTION_TYPE_ID].includes(action.actionTypeId) || + ([SERVICENOW_ACTION_TYPE_ID, JIRA_ACTION_TYPE_ID].includes(action.actionTypeId) && + action.config?.isCaseOwned === true)) ); return response.ok({ body: results }); } catch (error) { diff --git a/x-pack/plugins/security_solution/public/common/lib/connectors/config.ts b/x-pack/plugins/security_solution/public/common/lib/connectors/config.ts index 833f85712b5fa..9e6982ea20301 100644 --- a/x-pack/plugins/security_solution/public/common/lib/connectors/config.ts +++ b/x-pack/plugins/security_solution/public/common/lib/connectors/config.ts @@ -4,14 +4,17 @@ * you may not use this file except in compliance with the Elastic License. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ServiceNowConnectorConfiguration } from '../../../../../triggers_actions_ui/public/common'; -import { connector as jiraConnectorConfig } from './jira/config'; +/* eslint-disable @kbn/eslint/no-restricted-paths */ + +import { + ServiceNowConnectorConfiguration, + JiraConnectorConfiguration, +} from '../../../../../triggers_actions_ui/public/common'; import { connector as resilientConnectorConfig } from './resilient/config'; import { ConnectorConfiguration } from './types'; export const connectorsConfiguration: Record = { '.servicenow': ServiceNowConnectorConfiguration as ConnectorConfiguration, - '.jira': jiraConnectorConfig, + '.jira': JiraConnectorConfiguration as ConnectorConfiguration, '.resilient': resilientConnectorConfig, }; diff --git a/x-pack/plugins/security_solution/public/common/lib/connectors/index.ts b/x-pack/plugins/security_solution/public/common/lib/connectors/index.ts index f32e1e0df184e..33afa82c84f34 100644 --- a/x-pack/plugins/security_solution/public/common/lib/connectors/index.ts +++ b/x-pack/plugins/security_solution/public/common/lib/connectors/index.ts @@ -4,5 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { getActionType as jiraActionType } from './jira'; export { getActionType as resilientActionType } from './resilient'; diff --git a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/flyout.tsx b/x-pack/plugins/security_solution/public/common/lib/connectors/jira/flyout.tsx deleted file mode 100644 index 0737db3cd08eb..0000000000000 --- a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/flyout.tsx +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import React from 'react'; -import { - EuiFieldText, - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiFieldPassword, - EuiSpacer, -} from '@elastic/eui'; - -import * as i18n from './translations'; -import { ConnectorFlyoutFormProps } from '../types'; -import { JiraActionConnector } from './types'; -import { withConnectorFlyout } from '../components/connector_flyout'; - -const JiraConnectorForm: React.FC> = ({ - errors, - action, - onChangeSecret, - onBlurSecret, - onChangeConfig, - onBlurConfig, -}) => { - const { projectKey } = action.config; - const { email, apiToken } = action.secrets; - const isProjectKeyInvalid: boolean = errors.projectKey.length > 0 && projectKey != null; - const isEmailInvalid: boolean = errors.email.length > 0 && email != null; - const isApiTokenInvalid: boolean = errors.apiToken.length > 0 && apiToken != null; - - return ( - <> - - - - onChangeConfig('projectKey', evt.target.value)} - onBlur={() => onBlurConfig('projectKey')} - /> - - - - - - - - onChangeSecret('email', evt.target.value)} - onBlur={() => onBlurSecret('email')} - /> - - - - - - - - onChangeSecret('apiToken', evt.target.value)} - onBlur={() => onBlurSecret('apiToken')} - /> - - - - - ); -}; - -export const JiraConnectorFlyout = withConnectorFlyout({ - ConnectorFormComponent: JiraConnectorForm, - secretKeys: ['email', 'apiToken'], - configKeys: ['projectKey'], - connectorActionTypeId: '.jira', -}); - -// eslint-disable-next-line import/no-default-export -export { JiraConnectorFlyout as default }; diff --git a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/index.tsx b/x-pack/plugins/security_solution/public/common/lib/connectors/jira/index.tsx deleted file mode 100644 index cead392010dc7..0000000000000 --- a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/index.tsx +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { lazy } from 'react'; -import { - ValidationResult, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../triggers_actions_ui/public/types'; - -import { connector } from './config'; -import { createActionType } from '../utils'; -import logo from './logo.svg'; -import { JiraActionConnector } from './types'; -import * as i18n from './translations'; - -interface Errors { - projectKey: string[]; - email: string[]; - apiToken: string[]; -} - -const validateConnector = (action: JiraActionConnector): ValidationResult => { - const errors: Errors = { - projectKey: [], - email: [], - apiToken: [], - }; - - if (!action.config.projectKey) { - errors.projectKey = [...errors.projectKey, i18n.JIRA_PROJECT_KEY_REQUIRED]; - } - - if (!action.secrets.email) { - errors.email = [...errors.email, i18n.JIRA_EMAIL_REQUIRED]; - } - - if (!action.secrets.apiToken) { - errors.apiToken = [...errors.apiToken, i18n.JIRA_API_TOKEN_REQUIRED]; - } - - return { errors }; -}; - -export const getActionType = createActionType({ - id: connector.id, - iconClass: logo, - selectMessage: i18n.JIRA_DESC, - actionTypeTitle: connector.name, - validateConnector, - actionConnectorFields: lazy(() => import('./flyout')), -}); diff --git a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/translations.ts b/x-pack/plugins/security_solution/public/common/lib/connectors/jira/translations.ts deleted file mode 100644 index d7abf77a58d4c..0000000000000 --- a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/translations.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { i18n } from '@kbn/i18n'; - -export * from '../translations'; - -export const JIRA_DESC = i18n.translate( - 'xpack.securitySolution.case.connectors.jira.selectMessageText', - { - defaultMessage: 'Push or update Security case data to a new issue in Jira', - } -); - -export const JIRA_TITLE = i18n.translate( - 'xpack.securitySolution.case.connectors.jira.actionTypeTitle', - { - defaultMessage: 'Jira', - } -); - -export const JIRA_PROJECT_KEY_LABEL = i18n.translate( - 'xpack.securitySolution.case.connectors.jira.projectKey', - { - defaultMessage: 'Project key', - } -); - -export const JIRA_PROJECT_KEY_REQUIRED = i18n.translate( - 'xpack.securitySolution.case.connectors.jira.requiredProjectKeyTextField', - { - defaultMessage: 'Project key is required', - } -); - -export const JIRA_EMAIL_LABEL = i18n.translate( - 'xpack.securitySolution.case.connectors.jira.emailTextFieldLabel', - { - defaultMessage: 'Email or Username', - } -); - -export const JIRA_EMAIL_REQUIRED = i18n.translate( - 'xpack.securitySolution.case.connectors.jira.requiredEmailTextField', - { - defaultMessage: 'Email or Username is required', - } -); - -export const JIRA_API_TOKEN_LABEL = i18n.translate( - 'xpack.securitySolution.case.connectors.jira.apiTokenTextFieldLabel', - { - defaultMessage: 'API token or Password', - } -); - -export const JIRA_API_TOKEN_REQUIRED = i18n.translate( - 'xpack.securitySolution.case.connectors.jira.requiredApiTokenTextField', - { - defaultMessage: 'API token or Password is required', - } -); - -export const MAPPING_FIELD_SUMMARY = i18n.translate( - 'xpack.securitySolution.case.configureCases.mappingFieldSummary', - { - defaultMessage: 'Summary', - } -); diff --git a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/types.ts b/x-pack/plugins/security_solution/public/common/lib/connectors/jira/types.ts deleted file mode 100644 index fafb4a0d41fb3..0000000000000 --- a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/types.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -/* eslint-disable no-restricted-imports */ -/* eslint-disable @kbn/eslint/no-restricted-paths */ - -import { - JiraPublicConfigurationType, - JiraSecretConfigurationType, -} from '../../../../../../actions/server/builtin_action_types/jira/types'; - -export { JiraFieldsType } from '../../../../../../case/common/api/connectors'; - -export * from '../types'; - -export interface JiraActionConnector { - config: JiraPublicConfigurationType; - secrets: JiraSecretConfigurationType; -} diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index 1017cbb6a2c61..10bbbbfa72719 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -21,7 +21,7 @@ import { import { Storage } from '../../../../src/plugins/kibana_utils/public'; import { initTelemetry } from './common/lib/telemetry'; import { KibanaServices } from './common/lib/kibana/services'; -import { jiraActionType, resilientActionType } from './common/lib/connectors'; +import { resilientActionType } from './common/lib/connectors'; import { PluginSetup, PluginStart, @@ -96,7 +96,6 @@ export class Plugin implements IPlugin { diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 89d400f92bce9..f753e0ec87064 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -4445,7 +4445,6 @@ "xpack.actions.builtin.case.connectorApiNullError": "コネクター[apiUrl]が必要です", "xpack.actions.builtin.case.jiraTitle": "Jira", "xpack.actions.builtin.case.resilientTitle": "IBM Resilient", - "xpack.actions.builtin.configuration.apiWhitelistError": "コネクターアクションの構成エラー:{message}", "xpack.actions.builtin.email.errorSendingErrorMessage": "エラー送信メールアドレス", "xpack.actions.builtin.emailTitle": "メール", "xpack.actions.builtin.esIndex.errorIndexingErrorMessage": "エラーインデックス作成ドキュメント", @@ -15114,7 +15113,6 @@ "xpack.securitySolution.case.configureCases.mappingFieldDescription": "説明", "xpack.securitySolution.case.configureCases.mappingFieldName": "名前", "xpack.securitySolution.case.configureCases.mappingFieldNotMapped": "マップされません", - "xpack.securitySolution.case.configureCases.mappingFieldSummary": "まとめ", "xpack.securitySolution.case.configureCases.noConnector": "コネクターを選択していません", "xpack.securitySolution.case.configureCases.updateConnector": "コネクターを更新", "xpack.securitySolution.case.configureCases.updateSelectedConnector": "{ connectorName }を更新", @@ -15138,14 +15136,6 @@ "xpack.securitySolution.case.connectors.common.requiredPasswordTextField": "パスワードが必要です", "xpack.securitySolution.case.connectors.common.requiredUsernameTextField": "ユーザー名が必要です", "xpack.securitySolution.case.connectors.common.usernameTextFieldLabel": "ユーザー名", - "xpack.securitySolution.case.connectors.jira.actionTypeTitle": "Jira", - "xpack.securitySolution.case.connectors.jira.apiTokenTextFieldLabel": "APIトークンまたはパスワード", - "xpack.securitySolution.case.connectors.jira.emailTextFieldLabel": "電子メールアドレスまたはユーザー名", - "xpack.securitySolution.case.connectors.jira.projectKey": "プロジェクトキー", - "xpack.securitySolution.case.connectors.jira.requiredApiTokenTextField": "APIトークンまたはパスワードが必要です", - "xpack.securitySolution.case.connectors.jira.requiredEmailTextField": "電子メールアドレスまたはユーザー名が必要です", - "xpack.securitySolution.case.connectors.jira.requiredProjectKeyTextField": "プロジェクトキーが必要です", - "xpack.securitySolution.case.connectors.jira.selectMessageText": "Jiraでセキュリティケースデータを更新するか、新しいインシデントにプッシュ", "xpack.securitySolution.case.connectors.resilient.actionTypeTitle": "IBM Resilient", "xpack.securitySolution.case.connectors.resilient.apiKeyId": "APIキーID", "xpack.securitySolution.case.connectors.resilient.apiKeySecret": "APIキーシークレット", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 4fa6544caf191..8841db0be8d95 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -4446,7 +4446,6 @@ "xpack.actions.builtin.case.connectorApiNullError": "需要指定连接器 [apiUrl]", "xpack.actions.builtin.case.jiraTitle": "Jira", "xpack.actions.builtin.case.resilientTitle": "IBM Resilient", - "xpack.actions.builtin.configuration.apiWhitelistError": "配置连接器操作时出错:{message}", "xpack.actions.builtin.email.errorSendingErrorMessage": "发送电子邮件时出错", "xpack.actions.builtin.emailTitle": "电子邮件", "xpack.actions.builtin.esIndex.errorIndexingErrorMessage": "索引文档时出错", @@ -15123,7 +15122,6 @@ "xpack.securitySolution.case.configureCases.mappingFieldDescription": "描述", "xpack.securitySolution.case.configureCases.mappingFieldName": "名称", "xpack.securitySolution.case.configureCases.mappingFieldNotMapped": "未映射", - "xpack.securitySolution.case.configureCases.mappingFieldSummary": "摘要", "xpack.securitySolution.case.configureCases.noConnector": "未选择连接器", "xpack.securitySolution.case.configureCases.updateConnector": "更新连接器", "xpack.securitySolution.case.configureCases.updateSelectedConnector": "更新 { connectorName }", @@ -15147,14 +15145,6 @@ "xpack.securitySolution.case.connectors.common.requiredPasswordTextField": "“密码”必填", "xpack.securitySolution.case.connectors.common.requiredUsernameTextField": "“用户名”必填", "xpack.securitySolution.case.connectors.common.usernameTextFieldLabel": "用户名", - "xpack.securitySolution.case.connectors.jira.actionTypeTitle": "Jira", - "xpack.securitySolution.case.connectors.jira.apiTokenTextFieldLabel": "API 令牌或密码", - "xpack.securitySolution.case.connectors.jira.emailTextFieldLabel": "电子邮件或用户名", - "xpack.securitySolution.case.connectors.jira.projectKey": "项目键", - "xpack.securitySolution.case.connectors.jira.requiredApiTokenTextField": "“API 令牌或密码”必填", - "xpack.securitySolution.case.connectors.jira.requiredEmailTextField": "“电子邮件或用户名”必填", - "xpack.securitySolution.case.connectors.jira.requiredProjectKeyTextField": "“项目键”必填", - "xpack.securitySolution.case.connectors.jira.selectMessageText": "将 Security 案例数据推送或更新到 Jira 中的新问题", "xpack.securitySolution.case.connectors.resilient.actionTypeTitle": "IBM Resilient", "xpack.securitySolution.case.connectors.resilient.apiKeyId": "API 密钥 ID", "xpack.securitySolution.case.connectors.resilient.apiKeySecret": "API 密钥密码", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/field_mapping.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/field_mapping.tsx similarity index 95% rename from x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/field_mapping.tsx rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/field_mapping.tsx index 52b881a1eb75f..a3382513d2bcb 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/field_mapping.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/field_mapping.tsx @@ -13,9 +13,8 @@ import * as i18n from './translations'; import { setActionTypeToMapping, setThirdPartyToMapping } from './utils'; import { ThirdPartyField as ConnectorConfigurationThirdPartyField } from './types'; -import { CasesConfigurationMapping } from '../types'; -import { connectorConfiguration } from '../config'; -import { createDefaultMapping } from '../servicenow_connectors'; +import { CasesConfigurationMapping } from './types'; +import { createDefaultMapping } from './utils'; const FieldRowWrapper = styled.div` margin-top: 8px; @@ -70,15 +69,15 @@ const getThirdPartyOptions = ( export interface FieldMappingProps { disabled: boolean; mapping: CasesConfigurationMapping[] | null; - connectorActionTypeId: string; onChangeMapping: (newMapping: CasesConfigurationMapping[]) => void; + connectorConfiguration: Record; } const FieldMappingComponent: React.FC = ({ disabled, mapping, onChangeMapping, - connectorActionTypeId, + connectorConfiguration, }) => { const onChangeActionType = useCallback( (caseField: string, newActionType: string) => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/field_mapping_row.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/field_mapping_row.tsx similarity index 100% rename from x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/field_mapping_row.tsx rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/field_mapping_row.tsx diff --git a/x-pack/plugins/actions/server/builtin_action_types/jira/config.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/index.ts similarity index 51% rename from x-pack/plugins/actions/server/builtin_action_types/jira/config.ts rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/index.ts index 54f28e447010a..2de9b87ead3fe 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/jira/config.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/index.ts @@ -4,11 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ExternalServiceConfiguration } from '../case/types'; -import * as i18n from './translations'; - -export const config: ExternalServiceConfiguration = { - id: '.jira', - name: i18n.NAME, - minimumLicenseRequired: 'gold', -}; +export * from './types'; +export * from './field_mapping'; +export * from './field_mapping_row'; +export * from './utils'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/translations.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/translations.ts similarity index 100% rename from x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/translations.ts rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/translations.ts diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/types.ts similarity index 72% rename from x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/types.ts rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/types.ts index 6cd2200e1dc74..3571db39b596a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/types.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ActionType } from '../../../../../types'; +import { ActionType } from '../../../../types'; export { ActionType }; @@ -14,3 +14,8 @@ export interface ThirdPartyField { defaultSourceField: string; defaultActionType: string; } +export interface CasesConfigurationMapping { + source: string; + target: string; + actionType: string; +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/utils.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/utils.ts similarity index 76% rename from x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/utils.ts rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/utils.ts index a173d90515302..b14b1b76427c6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/case_mappings/utils.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/case_mappings/utils.ts @@ -3,7 +3,7 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { CasesConfigurationMapping } from '../types'; +import { CasesConfigurationMapping } from './types'; export const setActionTypeToMapping = ( caseField: string, @@ -36,3 +36,13 @@ export const setThirdPartyToMapping = ( } return item; }); + +export const createDefaultMapping = (fields: Record): CasesConfigurationMapping[] => + Object.keys(fields).map( + (key) => + ({ + source: fields[key].defaultSourceField, + target: key, + actionType: fields[key].defaultActionType, + } as CasesConfigurationMapping) + ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.test.tsx index ecdfefa109f58..be3e8a31820c4 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.test.tsx @@ -17,6 +17,7 @@ describe('EmailParamsFields renders', () => { subject: 'test', message: 'test message', }; + const wrapper = mountWithIntl( > { + return await http.post(`${BASE_ACTION_API_PATH}/action/${connectorId}/_execute`, { + body: JSON.stringify({ + params: { subAction: 'issueTypes', subActionParams: {} }, + }), + signal, + }); +} + +export async function getFieldsByIssueType({ + http, + signal, + connectorId, + id, +}: { + http: HttpSetup; + signal: AbortSignal; + connectorId: string; + id: string; +}): Promise> { + return await http.post(`${BASE_ACTION_API_PATH}/action/${connectorId}/_execute`, { + body: JSON.stringify({ + params: { subAction: 'fieldsByIssueType', subActionParams: { id } }, + }), + signal, + }); +} diff --git a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/config.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/config.ts similarity index 87% rename from x-pack/plugins/security_solution/public/common/lib/connectors/jira/config.ts rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/config.ts index e6151a54bff74..628600ee91c8e 100644 --- a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/config.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/config.ts @@ -4,19 +4,17 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ConnectorConfiguration } from './types'; - import * as i18n from './translations'; import logo from './logo.svg'; -export const connector: ConnectorConfiguration = { +export const connectorConfiguration = { id: '.jira', name: i18n.JIRA_TITLE, logo, enabled: true, enabledInConfig: true, enabledInLicense: true, - minimumLicenseRequired: 'platinum', + minimumLicenseRequired: 'gold', fields: { summary: { label: i18n.MAPPING_FIELD_SUMMARY, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/index.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/index.ts new file mode 100644 index 0000000000000..a0170f9d84e9b --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { getActionType as getJiraActionType } from './jira'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira.test.tsx new file mode 100644 index 0000000000000..61923d8f78b51 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira.test.tsx @@ -0,0 +1,100 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { TypeRegistry } from '../../../type_registry'; +import { registerBuiltInActionTypes } from '.././index'; +import { ActionTypeModel } from '../../../../types'; +import { JiraActionConnector } from './types'; + +const ACTION_TYPE_ID = '.jira'; +let actionTypeModel: ActionTypeModel; + +beforeAll(() => { + const actionTypeRegistry = new TypeRegistry(); + registerBuiltInActionTypes({ actionTypeRegistry }); + const getResult = actionTypeRegistry.get(ACTION_TYPE_ID); + if (getResult !== null) { + actionTypeModel = getResult; + } +}); + +describe('actionTypeRegistry.get() works', () => { + test('action type static data is as expected', () => { + expect(actionTypeModel.id).toEqual(ACTION_TYPE_ID); + }); +}); + +describe('jira connector validation', () => { + test('connector validation succeeds when connector config is valid', () => { + const actionConnector = { + secrets: { + email: 'email', + apiToken: 'apiToken', + }, + id: 'test', + actionTypeId: '.jira', + name: 'jira', + isPreconfigured: false, + config: { + apiUrl: 'https://siem-kibana.atlassian.net', + projectKey: 'CK', + }, + } as JiraActionConnector; + + expect(actionTypeModel.validateConnector(actionConnector)).toEqual({ + errors: { + apiUrl: [], + email: [], + apiToken: [], + projectKey: [], + }, + }); + }); + + test('connector validation fails when connector config is not valid', () => { + const actionConnector = ({ + secrets: { + email: 'user', + }, + id: '.jira', + actionTypeId: '.jira', + name: 'jira', + config: {}, + } as unknown) as JiraActionConnector; + + expect(actionTypeModel.validateConnector(actionConnector)).toEqual({ + errors: { + apiUrl: ['URL is required.'], + email: [], + apiToken: ['API token or Password is required'], + projectKey: ['Project key is required'], + }, + }); + }); +}); + +describe('jira action params validation', () => { + test('action params validation succeeds when action params is valid', () => { + const actionParams = { + subActionParams: { title: 'some title {{test}}' }, + }; + + expect(actionTypeModel.validateParams(actionParams)).toEqual({ + errors: { title: [] }, + }); + }); + + test('params validation fails when body is not valid', () => { + const actionParams = { + subActionParams: { title: '' }, + }; + + expect(actionTypeModel.validateParams(actionParams)).toEqual({ + errors: { + title: ['Title is required.'], + }, + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira.tsx new file mode 100644 index 0000000000000..fd36bd6aeab0a --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira.tsx @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { lazy } from 'react'; +import { ValidationResult, ActionTypeModel } from '../../../../types'; +import { connectorConfiguration } from './config'; +import logo from './logo.svg'; +import { JiraActionConnector, JiraActionParams } from './types'; +import * as i18n from './translations'; +import { isValidUrl } from '../../../lib/value_validators'; + +const validateConnector = (action: JiraActionConnector): ValidationResult => { + const validationResult = { errors: {} }; + const errors = { + apiUrl: new Array(), + projectKey: new Array(), + email: new Array(), + apiToken: new Array(), + }; + validationResult.errors = errors; + + if (!action.config.apiUrl) { + errors.apiUrl = [...errors.apiUrl, i18n.API_URL_REQUIRED]; + } + + if (action.config.apiUrl && !isValidUrl(action.config.apiUrl, 'https:')) { + errors.apiUrl = [...errors.apiUrl, i18n.API_URL_INVALID]; + } + + if (!action.config.projectKey) { + errors.projectKey = [...errors.projectKey, i18n.JIRA_PROJECT_KEY_REQUIRED]; + } + + if (!action.secrets.email) { + errors.email = [...errors.email, i18n.JIRA_EMAIL_REQUIRED]; + } + + if (!action.secrets.apiToken) { + errors.apiToken = [...errors.apiToken, i18n.JIRA_API_TOKEN_REQUIRED]; + } + + return validationResult; +}; + +export function getActionType(): ActionTypeModel { + return { + id: connectorConfiguration.id, + iconClass: logo, + selectMessage: i18n.JIRA_DESC, + actionTypeTitle: connectorConfiguration.name, + validateConnector, + actionConnectorFields: lazy(() => import('./jira_connectors')), + validateParams: (actionParams: JiraActionParams): ValidationResult => { + const validationResult = { errors: {} }; + const errors = { + title: new Array(), + }; + validationResult.errors = errors; + if (actionParams.subActionParams && !actionParams.subActionParams.title?.length) { + errors.title.push(i18n.TITLE_REQUIRED); + } + return validationResult; + }, + actionParamsFields: lazy(() => import('./jira_params')), + }; +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_connectors.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_connectors.test.tsx new file mode 100644 index 0000000000000..2cac1819d552d --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_connectors.test.tsx @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import { mountWithIntl } from 'test_utils/enzyme_helpers'; +import { DocLinksStart } from 'kibana/public'; +import JiraConnectorFields from './jira_connectors'; +import { JiraActionConnector } from './types'; + +describe('JiraActionConnectorFields renders', () => { + test('alerting Jira connector fields is rendered', () => { + const actionConnector = { + secrets: { + email: 'email', + apiToken: 'token', + }, + id: 'test', + actionTypeId: '.jira', + isPreconfigured: false, + name: 'jira', + config: { + apiUrl: 'https://test/', + projectKey: 'CK', + }, + } as JiraActionConnector; + const deps = { + docLinks: { ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart, + }; + const wrapper = mountWithIntl( + {}} + editActionSecrets={() => {}} + docLinks={deps!.docLinks} + readOnly={false} + /> + ); + + expect(wrapper.find('[data-test-subj="apiUrlFromInput"]').length > 0).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="connector-jira-project-key-form-input"]').length > 0 + ).toBeTruthy(); + + expect( + wrapper.find('[data-test-subj="connector-jira-email-form-input"]').length > 0 + ).toBeTruthy(); + + expect( + wrapper.find('[data-test-subj="connector-jira-apiToken-form-input"]').length > 0 + ).toBeTruthy(); + }); + + test('case specific Jira connector fields is rendered', () => { + const actionConnector = { + secrets: { + email: 'email', + apiToken: 'token', + }, + id: 'test', + actionTypeId: '.jira', + isPreconfigured: false, + name: 'jira', + config: { + apiUrl: 'https://test/', + projectKey: 'CK', + }, + } as JiraActionConnector; + const deps = { + docLinks: { ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart, + }; + const wrapper = mountWithIntl( + {}} + editActionSecrets={() => {}} + docLinks={deps!.docLinks} + readOnly={false} + consumer={'case'} + /> + ); + expect(wrapper.find('[data-test-subj="case-jira-mappings"]').length > 0).toBeTruthy(); + expect(wrapper.find('[data-test-subj="apiUrlFromInput"]').length > 0).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="connector-jira-project-key-form-input"]').length > 0 + ).toBeTruthy(); + + expect( + wrapper.find('[data-test-subj="connector-jira-email-form-input"]').length > 0 + ).toBeTruthy(); + + expect( + wrapper.find('[data-test-subj="connector-jira-apiToken-form-input"]').length > 0 + ).toBeTruthy(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_connectors.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_connectors.tsx new file mode 100644 index 0000000000000..2ab9843c143b9 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_connectors.tsx @@ -0,0 +1,209 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React, { useCallback } from 'react'; + +import { + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiFieldPassword, + EuiSpacer, +} from '@elastic/eui'; + +import { isEmpty } from 'lodash'; +import { ActionConnectorFieldsProps } from '../../../../types'; +import { CasesConfigurationMapping, FieldMapping, createDefaultMapping } from '../case_mappings'; + +import * as i18n from './translations'; +import { JiraActionConnector } from './types'; +import { connectorConfiguration } from './config'; + +const JiraConnectorFields: React.FC> = ({ + action, + editActionSecrets, + editActionConfig, + errors, + consumer, + readOnly, + docLinks, +}) => { + // TODO: remove incidentConfiguration later, when Case Jira will move their fields to the level of action execution + const { apiUrl, projectKey, incidentConfiguration, isCaseOwned } = action.config; + const mapping = incidentConfiguration ? incidentConfiguration.mapping : []; + + const isApiUrlInvalid: boolean = errors.apiUrl.length > 0 && apiUrl != null; + + const { email, apiToken } = action.secrets; + + const isProjectKeyInvalid: boolean = errors.projectKey.length > 0 && projectKey != null; + const isEmailInvalid: boolean = errors.email.length > 0 && email != null; + const isApiTokenInvalid: boolean = errors.apiToken.length > 0 && apiToken != null; + + // TODO: remove this block later, when Case ServiceNow will move their fields to the level of action execution + if (consumer === 'case') { + if (isEmpty(mapping)) { + editActionConfig('incidentConfiguration', { + mapping: createDefaultMapping(connectorConfiguration.fields as any), + }); + } + if (!isCaseOwned) { + editActionConfig('isCaseOwned', true); + } + } + + const handleOnChangeActionConfig = useCallback( + (key: string, value: string) => editActionConfig(key, value), + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + + const handleOnChangeSecretConfig = useCallback( + (key: string, value: string) => editActionSecrets(key, value), + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + + const handleOnChangeMappingConfig = useCallback( + (newMapping: CasesConfigurationMapping[]) => + editActionConfig('incidentConfiguration', { + ...action.config.incidentConfiguration, + mapping: newMapping, + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [action.config] + ); + + return ( + <> + + + + handleOnChangeActionConfig('apiUrl', evt.target.value)} + onBlur={() => { + if (!apiUrl) { + editActionConfig('apiUrl', ''); + } + }} + /> + + + + + + + + handleOnChangeActionConfig('projectKey', evt.target.value)} + onBlur={() => { + if (!projectKey) { + editActionConfig('projectKey', ''); + } + }} + /> + + + + + + + + handleOnChangeSecretConfig('email', evt.target.value)} + onBlur={() => { + if (!email) { + editActionSecrets('email', ''); + } + }} + /> + + + + + + + + handleOnChangeSecretConfig('apiToken', evt.target.value)} + onBlur={() => { + if (!apiToken) { + editActionSecrets('apiToken', ''); + } + }} + /> + + + + {consumer === 'case' && ( // TODO: remove this block later, when Case Jira will move their fields to the level of action execution + <> + + + + + + + + )} + + ); +}; + +// eslint-disable-next-line import/no-default-export +export { JiraConnectorFields as default }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.test.tsx new file mode 100644 index 0000000000000..26d358310741c --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.test.tsx @@ -0,0 +1,233 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import { mountWithIntl } from 'test_utils/enzyme_helpers'; +import JiraParamsFields from './jira_params'; +import { DocLinksStart } from 'kibana/public'; + +import { useGetIssueTypes } from './use_get_issue_types'; +import { useGetFieldsByIssueType } from './use_get_fields_by_issue_type'; + +jest.mock('../../../app_context', () => { + const post = jest.fn(); + return { + useAppDependencies: jest.fn(() => ({ http: { post } })), + }; +}); + +jest.mock('./use_get_issue_types'); +jest.mock('./use_get_fields_by_issue_type'); + +const useGetIssueTypesMock = useGetIssueTypes as jest.Mock; +const useGetFieldsByIssueTypeMock = useGetFieldsByIssueType as jest.Mock; + +const actionParams = { + subAction: 'pushToService', + subActionParams: { + title: 'sn title', + description: 'some description', + comments: [{ commentId: '1', comment: 'comment for jira' }], + issueType: '10006', + labels: ['kibana'], + priority: 'High', + savedObjectId: '123', + externalId: null, + }, +}; +const connector = { + secrets: {}, + config: {}, + id: 'test', + actionTypeId: '.test', + name: 'Test', + isPreconfigured: false, +}; + +describe('JiraParamsFields renders', () => { + const useGetIssueTypesResponse = { + isLoading: false, + issueTypes: [ + { + id: '10006', + name: 'Task', + }, + { + id: '10007', + name: 'Bug', + }, + ], + }; + + const useGetFieldsByIssueTypeResponse = { + isLoading: false, + fields: { + summary: { allowedValues: [], defaultValue: {} }, + labels: { allowedValues: [], defaultValue: {} }, + description: { allowedValues: [], defaultValue: {} }, + priority: { + allowedValues: [ + { + name: 'Medium', + id: '3', + }, + ], + defaultValue: { name: 'Medium', id: '3' }, + }, + }, + }; + + beforeEach(() => { + useGetIssueTypesMock.mockReturnValue(useGetIssueTypesResponse); + useGetFieldsByIssueTypeMock.mockReturnValue(useGetFieldsByIssueTypeResponse); + }); + + test('all params fields are rendered', () => { + const wrapper = mountWithIntl( + {}} + index={0} + messageVariables={[]} + docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + actionConnector={connector} + /> + ); + expect(wrapper.find('[data-test-subj="issueTypeSelect"]').first().prop('value')).toStrictEqual( + '10006' + ); + expect(wrapper.find('[data-test-subj="prioritySelect"]').first().prop('value')).toStrictEqual( + 'High' + ); + expect(wrapper.find('[data-test-subj="titleInput"]').length > 0).toBeTruthy(); + expect(wrapper.find('[data-test-subj="descriptionTextArea"]').length > 0).toBeTruthy(); + expect(wrapper.find('[data-test-subj="labelsComboBox"]').length > 0).toBeTruthy(); + expect(wrapper.find('[data-test-subj="commentsTextArea"]').length > 0).toBeTruthy(); + }); + + test('it shows loading when loading issue types', () => { + useGetIssueTypesMock.mockReturnValue({ ...useGetIssueTypesResponse, isLoading: true }); + const wrapper = mountWithIntl( + {}} + index={0} + messageVariables={[]} + docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + actionConnector={connector} + /> + ); + + expect( + wrapper.find('[data-test-subj="issueTypeSelect"]').first().prop('isLoading') + ).toBeTruthy(); + }); + + test('it shows loading when loading fields', () => { + useGetFieldsByIssueTypeMock.mockReturnValue({ + ...useGetFieldsByIssueTypeResponse, + isLoading: true, + }); + + const wrapper = mountWithIntl( + {}} + index={0} + messageVariables={[]} + docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + actionConnector={connector} + /> + ); + + expect( + wrapper.find('[data-test-subj="prioritySelect"]').first().prop('isLoading') + ).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="labelsComboBox"]').first().prop('isLoading') + ).toBeTruthy(); + }); + + test('it disabled the fields when loading issue types', () => { + useGetIssueTypesMock.mockReturnValue({ ...useGetIssueTypesResponse, isLoading: true }); + + const wrapper = mountWithIntl( + {}} + index={0} + messageVariables={[]} + docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + actionConnector={connector} + /> + ); + + expect( + wrapper.find('[data-test-subj="issueTypeSelect"]').first().prop('disabled') + ).toBeTruthy(); + expect(wrapper.find('[data-test-subj="prioritySelect"]').first().prop('disabled')).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="labelsComboBox"]').first().prop('isDisabled') + ).toBeTruthy(); + }); + + test('it disabled the fields when loading fields', () => { + useGetFieldsByIssueTypeMock.mockReturnValue({ + ...useGetFieldsByIssueTypeResponse, + isLoading: true, + }); + + const wrapper = mountWithIntl( + {}} + index={0} + messageVariables={[]} + docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + actionConnector={connector} + /> + ); + + expect( + wrapper.find('[data-test-subj="issueTypeSelect"]').first().prop('disabled') + ).toBeTruthy(); + expect(wrapper.find('[data-test-subj="prioritySelect"]').first().prop('disabled')).toBeTruthy(); + expect( + wrapper.find('[data-test-subj="labelsComboBox"]').first().prop('isDisabled') + ).toBeTruthy(); + }); + + test('hide unsupported fields', () => { + useGetIssueTypesMock.mockReturnValue(useGetIssueTypesResponse); + useGetFieldsByIssueTypeMock.mockReturnValue({ + ...useGetFieldsByIssueTypeResponse, + fields: {}, + }); + const wrapper = mountWithIntl( + {}} + index={0} + messageVariables={[]} + docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + actionConnector={connector} + /> + ); + + expect(wrapper.find('[data-test-subj="issueTypeSelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="titleInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="commentsTextArea"]').exists()).toBeTruthy(); + + expect(wrapper.find('[data-test-subj="prioritySelect"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="descriptionTextArea"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="labelsComboBox"]').exists()).toBeFalsy(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.tsx new file mode 100644 index 0000000000000..bde3d67ffd65f --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.tsx @@ -0,0 +1,319 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { Fragment, useEffect, useState, useMemo } from 'react'; +import { map } from 'lodash/fp'; +import { EuiFormRow, EuiComboBox, EuiSelectOption, EuiHorizontalRule } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { EuiSelect } from '@elastic/eui'; +import { EuiFlexGroup } from '@elastic/eui'; +import { EuiFlexItem } from '@elastic/eui'; +import { EuiSpacer } from '@elastic/eui'; + +import { useAppDependencies } from '../../../app_context'; +import { ActionParamsProps } from '../../../../types'; +import { TextAreaWithMessageVariables } from '../../text_area_with_message_variables'; +import { TextFieldWithMessageVariables } from '../../text_field_with_message_variables'; +import { JiraActionParams } from './types'; +import { useGetIssueTypes } from './use_get_issue_types'; +import { useGetFieldsByIssueType } from './use_get_fields_by_issue_type'; + +const JiraParamsFields: React.FunctionComponent> = ({ + actionParams, + editAction, + index, + errors, + messageVariables, + actionConnector, +}) => { + const { title, description, comments, issueType, priority, labels, savedObjectId } = + actionParams.subActionParams || {}; + + const [issueTypesSelectOptions, setIssueTypesSelectOptions] = useState([]); + const [firstLoad, setFirstLoad] = useState(false); + const [prioritiesSelectOptions, setPrioritiesSelectOptions] = useState([]); + const { http, toastNotifications } = useAppDependencies(); + + useEffect(() => { + setFirstLoad(true); + }, []); + + const { isLoading: isLoadingIssueTypes, issueTypes } = useGetIssueTypes({ + http, + toastNotifications, + actionConnector, + }); + + const { isLoading: isLoadingFields, fields } = useGetFieldsByIssueType({ + http, + toastNotifications, + actionConnector, + issueType, + }); + + const hasLabels = useMemo(() => Object.prototype.hasOwnProperty.call(fields, 'labels'), [fields]); + const hasDescription = useMemo( + () => Object.prototype.hasOwnProperty.call(fields, 'description'), + [fields] + ); + const hasPriority = useMemo(() => Object.prototype.hasOwnProperty.call(fields, 'priority'), [ + fields, + ]); + + useEffect(() => { + const options = issueTypes.map((type) => ({ + value: type.id ?? '', + text: type.name ?? '', + })); + + setIssueTypesSelectOptions(options); + }, [issueTypes]); + + useEffect(() => { + if (issueType != null && fields != null) { + const priorities = fields.priority?.allowedValues ?? []; + const options = map( + (p) => ({ + value: p.name, + text: p.name, + }), + priorities + ); + setPrioritiesSelectOptions(options); + } + }, [fields, issueType]); + + const labelOptions = useMemo(() => (labels ? labels.map((label: string) => ({ label })) : []), [ + labels, + ]); + + const editSubActionProperty = (key: string, value: any) => { + const newProps = { ...actionParams.subActionParams, [key]: value }; + editAction('subActionParams', newProps, index); + }; + + // Reset parameters when changing connector + useEffect(() => { + if (!firstLoad) { + return; + } + + setIssueTypesSelectOptions([]); + editAction('subActionParams', { title, comments, description: '', savedObjectId }, index); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [actionConnector]); + + // Reset fields when changing connector or issue type + useEffect(() => { + if (!firstLoad) { + return; + } + + setPrioritiesSelectOptions([]); + editAction( + 'subActionParams', + { title, issueType, comments, description: '', savedObjectId }, + index + ); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [issueType, savedObjectId]); + + useEffect(() => { + if (!actionParams.subAction) { + editAction('subAction', 'pushToService', index); + } + if (!savedObjectId && messageVariables?.find((variable) => variable.name === 'alertId')) { + editSubActionProperty('savedObjectId', '{{alertId}}'); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + actionConnector, + actionParams.subAction, + index, + savedObjectId, + issueTypesSelectOptions, + issueType, + ]); + + // Set default issue type + useEffect(() => { + if (!issueType && issueTypesSelectOptions.length > 0) { + editSubActionProperty('issueType', issueTypesSelectOptions[0].value as string); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [issueTypes, issueTypesSelectOptions]); + + // Set default priority + useEffect(() => { + if (!priority && prioritiesSelectOptions.length > 0) { + editSubActionProperty('priority', prioritiesSelectOptions[0].value as string); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [actionConnector, issueType, prioritiesSelectOptions]); + + return ( + + <> + + { + editSubActionProperty('issueType', e.target.value); + }} + /> + + + <> + {hasPriority && ( + <> + + + + { + editSubActionProperty('priority', e.target.value); + }} + /> + + + + + + )} + 0 && title !== undefined} + label={i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.titleFieldLabel', + { + defaultMessage: 'Summary', + } + )} + > + + + + {hasLabels && ( + <> + + + + { + const newOptions = [...labelOptions, { label: searchValue }]; + editSubActionProperty( + 'labels', + newOptions.map((newOption) => newOption.label) + ); + }} + onChange={(selectedOptions: Array<{ label: string }>) => { + editSubActionProperty( + 'labels', + selectedOptions.map((selectedOption) => selectedOption.label) + ); + }} + onBlur={() => { + if (!labels) { + editSubActionProperty('labels', []); + } + }} + isClearable={true} + data-test-subj="labelsComboBox" + /> + + + + + + )} + {hasDescription && ( + + )} + { + editSubActionProperty(key, [{ commentId: '1', comment: value }]); + }} + messageVariables={messageVariables} + paramsProperty={'comments'} + inputTargetValue={comments && comments.length > 0 ? comments[0].comment : ''} + label={i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.commentsTextAreaFieldLabel', + { + defaultMessage: 'Additional comments (optional)', + } + )} + errors={errors.comments as string[]} + /> + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export { JiraParamsFields as default }; diff --git a/x-pack/plugins/security_solution/public/common/lib/connectors/jira/logo.svg b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/logo.svg similarity index 100% rename from x-pack/plugins/security_solution/public/common/lib/connectors/jira/logo.svg rename to x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/logo.svg diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/translations.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/translations.ts new file mode 100644 index 0000000000000..bfcb72d1cb977 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/translations.ts @@ -0,0 +1,133 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; + +export const JIRA_DESC = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.selectMessageText', + { + defaultMessage: 'Push or update data to a new issue in Jira', + } +); + +export const JIRA_TITLE = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.actionTypeTitle', + { + defaultMessage: 'Jira', + } +); + +export const API_URL_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.apiUrlTextFieldLabel', + { + defaultMessage: 'URL', + } +); + +export const API_URL_REQUIRED = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.requiredApiUrlTextField', + { + defaultMessage: 'URL is required.', + } +); + +export const API_URL_INVALID = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.invalidApiUrlTextField', + { + defaultMessage: 'URL is invalid.', + } +); + +export const JIRA_PROJECT_KEY_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.projectKey', + { + defaultMessage: 'Project key', + } +); + +export const JIRA_PROJECT_KEY_REQUIRED = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.requiredProjectKeyTextField', + { + defaultMessage: 'Project key is required', + } +); + +export const JIRA_EMAIL_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.emailTextFieldLabel', + { + defaultMessage: 'Email or Username', + } +); + +export const JIRA_EMAIL_REQUIRED = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.requiredEmailTextField', + { + defaultMessage: 'Email or Username is required', + } +); + +export const JIRA_API_TOKEN_LABEL = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.apiTokenTextFieldLabel', + { + defaultMessage: 'API token or Password', + } +); + +export const JIRA_API_TOKEN_REQUIRED = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.requiredApiTokenTextField', + { + defaultMessage: 'API token or Password is required', + } +); + +export const MAPPING_FIELD_SUMMARY = i18n.translate( + 'xpack.triggersActionsUI.case.configureCases.mappingFieldSummary', + { + defaultMessage: 'Summary', + } +); + +export const DESCRIPTION_REQUIRED = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.requiredDescriptionTextField', + { + defaultMessage: 'Description is required.', + } +); + +export const TITLE_REQUIRED = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.requiredTitleTextField', + { + defaultMessage: 'Title is required.', + } +); + +export const MAPPING_FIELD_DESC = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.mappingFieldDescription', + { + defaultMessage: 'Description', + } +); + +export const MAPPING_FIELD_COMMENTS = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.mappingFieldComments', + { + defaultMessage: 'Comments', + } +); + +export const ISSUE_TYPES_API_ERROR = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.unableToGetIssueTypesMessage', + { + defaultMessage: 'Unable to get issue types', + } +); + +export const FIELDS_API_ERROR = i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.jira.unableToGetFieldsMessage', + { + defaultMessage: 'Unable to get fields', + } +); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/types.ts new file mode 100644 index 0000000000000..ff11199f35fea --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/types.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { CasesConfigurationMapping } from '../case_mappings'; + +export interface JiraActionConnector { + config: JiraConfig; + secrets: JiraSecrets; +} + +export interface JiraActionParams { + subAction: string; + subActionParams: { + savedObjectId: string; + title: string; + description: string; + comments: Array<{ commentId: string; comment: string }>; + externalId: string | null; + issueType: string; + priority: string; + labels: string[]; + }; +} + +interface IncidentConfiguration { + mapping: CasesConfigurationMapping[]; +} + +interface JiraConfig { + apiUrl: string; + projectKey: string; + incidentConfiguration?: IncidentConfiguration; + isCaseOwned?: boolean; +} + +interface JiraSecrets { + email: string; + apiToken: string; +} + +// to remove diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/use_get_fields_by_issue_type.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/use_get_fields_by_issue_type.tsx new file mode 100644 index 0000000000000..08715822e5277 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/use_get_fields_by_issue_type.tsx @@ -0,0 +1,97 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useState, useEffect, useRef } from 'react'; +import { HttpSetup, ToastsApi } from 'kibana/public'; +import { ActionConnector } from '../../../../types'; +import { getFieldsByIssueType } from './api'; +import * as i18n from './translations'; + +interface Fields { + [key: string]: { + allowedValues: Array<{ name: string; id: string }> | []; + defaultValue: { name: string; id: string } | {}; + }; +} + +interface Props { + http: HttpSetup; + toastNotifications: Pick< + ToastsApi, + 'get$' | 'add' | 'remove' | 'addSuccess' | 'addWarning' | 'addDanger' | 'addError' + >; + issueType: string; + actionConnector?: ActionConnector; +} + +export interface UseGetFieldsByIssueType { + fields: Fields; + isLoading: boolean; +} + +export const useGetFieldsByIssueType = ({ + http, + toastNotifications, + actionConnector, + issueType, +}: Props): UseGetFieldsByIssueType => { + const [isLoading, setIsLoading] = useState(true); + const [fields, setFields] = useState({}); + const abortCtrl = useRef(new AbortController()); + + useEffect(() => { + let didCancel = false; + const fetchData = async () => { + if (!actionConnector || !issueType) { + setIsLoading(false); + return; + } + + abortCtrl.current = new AbortController(); + setIsLoading(true); + try { + const res = await getFieldsByIssueType({ + http, + signal: abortCtrl.current.signal, + connectorId: actionConnector.id, + id: issueType, + }); + + if (!didCancel) { + setIsLoading(false); + setFields(res.data ?? {}); + if (res.status && res.status === 'error') { + toastNotifications.addDanger({ + title: i18n.FIELDS_API_ERROR, + text: `${res.serviceMessage ?? res.message}`, + }); + } + } + } catch (error) { + if (!didCancel) { + toastNotifications.addDanger({ + title: i18n.FIELDS_API_ERROR, + text: error.message, + }); + } + } + }; + + abortCtrl.current.abort(); + fetchData(); + + return () => { + didCancel = true; + setIsLoading(false); + abortCtrl.current.abort(); + }; + }, [http, actionConnector, issueType, toastNotifications]); + + return { + isLoading, + fields, + }; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/use_get_issue_types.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/use_get_issue_types.tsx new file mode 100644 index 0000000000000..9ebaf5882d9b9 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/use_get_issue_types.tsx @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useState, useEffect, useRef } from 'react'; +import { HttpSetup, ToastsApi } from 'kibana/public'; +import { ActionConnector } from '../../../../types'; +import { getIssueTypes } from './api'; +import * as i18n from './translations'; + +type IssueTypes = Array<{ id: string; name: string }>; + +interface Props { + http: HttpSetup; + toastNotifications: Pick< + ToastsApi, + 'get$' | 'add' | 'remove' | 'addSuccess' | 'addWarning' | 'addDanger' | 'addError' + >; + actionConnector?: ActionConnector; +} + +export interface UseGetIssueTypes { + issueTypes: IssueTypes; + isLoading: boolean; +} + +export const useGetIssueTypes = ({ + http, + actionConnector, + toastNotifications, +}: Props): UseGetIssueTypes => { + const [isLoading, setIsLoading] = useState(true); + const [issueTypes, setIssueTypes] = useState([]); + const abortCtrl = useRef(new AbortController()); + + useEffect(() => { + let didCancel = false; + const fetchData = async () => { + if (!actionConnector) { + setIsLoading(false); + return; + } + + abortCtrl.current = new AbortController(); + setIsLoading(true); + + try { + const res = await getIssueTypes({ + http, + signal: abortCtrl.current.signal, + connectorId: actionConnector.id, + }); + + if (!didCancel) { + setIsLoading(false); + setIssueTypes(res.data ?? []); + if (res.status && res.status === 'error') { + toastNotifications.addDanger({ + title: i18n.ISSUE_TYPES_API_ERROR, + text: `${res.serviceMessage ?? res.message}`, + }); + } + } + } catch (error) { + if (!didCancel) { + toastNotifications.addDanger({ + title: i18n.ISSUE_TYPES_API_ERROR, + text: error.message, + }); + } + } + }; + + abortCtrl.current.abort(); + fetchData(); + + return () => { + didCancel = true; + setIsLoading(false); + abortCtrl.current.abort(); + }; + }, [http, actionConnector, toastNotifications]); + + return { + issueTypes, + isLoading, + }; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_connectors.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_connectors.tsx index f99a276305d75..a8f1ed8d55447 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_connectors.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_connectors.tsx @@ -18,10 +18,11 @@ import { import { isEmpty } from 'lodash'; import { FormattedMessage } from '@kbn/i18n/react'; import { ActionConnectorFieldsProps } from '../../../../types'; +import { CasesConfigurationMapping, FieldMapping, createDefaultMapping } from '../case_mappings'; + import * as i18n from './translations'; -import { ServiceNowActionConnector, CasesConfigurationMapping } from './types'; +import { ServiceNowActionConnector } from './types'; import { connectorConfiguration } from './config'; -import { FieldMapping } from './case_mappings/field_mapping'; const ServiceNowConnectorFields: React.FC @@ -184,15 +185,5 @@ const ServiceNowConnectorFields: React.FC): CasesConfigurationMapping[] => - Object.keys(fields).map( - (key) => - ({ - source: fields[key].defaultSourceField, - target: key, - actionType: fields[key].defaultActionType, - } as CasesConfigurationMapping) - ); - // eslint-disable-next-line import/no-default-export export { ServiceNowConnectorFields as default }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.tsx index 2a29018d83ff4..2a2efdfbe35b1 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.tsx @@ -79,7 +79,14 @@ const ServiceNowParamsFields: React.FunctionComponent -

Incident

+

+ {i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.serviceNow.title', + { + defaultMessage: 'Incident', + } + )} +

) : null} diff --git a/x-pack/plugins/triggers_actions_ui/public/common/index.ts b/x-pack/plugins/triggers_actions_ui/public/common/index.ts index 9dd3fd787f860..8b728b5e178b5 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/common/index.ts @@ -7,3 +7,4 @@ export * from './expression_items'; export { connectorConfiguration as ServiceNowConnectorConfiguration } from '../application/components/builtin_action_types/servicenow/config'; +export { connectorConfiguration as JiraConnectorConfiguration } from '../application/components/builtin_action_types/jira/config'; diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 762f41ba3691c..109d473c56e66 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -54,6 +54,7 @@ export interface ActionParamsProps { messageVariables?: ActionVariable[]; defaultMessage?: string; docLinks: DocLinksStart; + actionConnector?: ActionConnector; } export interface Pagination { diff --git a/x-pack/test/alerting_api_integration/basic/tests/actions/builtin_action_types/jira.ts b/x-pack/test/alerting_api_integration/basic/tests/actions/builtin_action_types/jira.ts new file mode 100644 index 0000000000000..025fd558ee1ca --- /dev/null +++ b/x-pack/test/alerting_api_integration/basic/tests/actions/builtin_action_types/jira.ts @@ -0,0 +1,97 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; + +import { + getExternalServiceSimulatorPath, + ExternalServiceSimulator, +} from '../../../../common/fixtures/plugins/actions_simulators/server/plugin'; + +// node ../scripts/functional_test_runner.js --grep "Actions.servicenddd" --config=test/alerting_api_integration/security_and_spaces/config.ts + +const mapping = [ + { + source: 'title', + target: 'summary', + actionType: 'nothing', + }, + { + source: 'description', + target: 'description', + actionType: 'nothing', + }, + { + source: 'comments', + target: 'comments', + actionType: 'nothing', + }, +]; + +// eslint-disable-next-line import/no-default-export +export default function jiraTest({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const kibanaServer = getService('kibanaServer'); + const mockJira = { + config: { + apiUrl: 'www.jiraisinkibanaactions.com', + incidentConfiguration: { mapping: [...mapping] }, + isCaseOwned: true, + }, + secrets: { + email: 'elastic', + apiToken: 'changeme', + }, + params: { + savedObjectId: '123', + title: 'a title', + description: 'a description', + labels: ['kibana'], + issueType: '10006', + priority: 'High', + externalId: null, + comments: [ + { + commentId: '456', + comment: 'first comment', + }, + ], + }, + }; + describe('jira', () => { + let jiraSimulatorURL: string = ''; + + // need to wait for kibanaServer to settle ... + before(() => { + jiraSimulatorURL = kibanaServer.resolveUrl( + getExternalServiceSimulatorPath(ExternalServiceSimulator.JIRA) + ); + }); + + it('should return 403 when creating a jira action', async () => { + await supertest + .post('/api/actions/action') + .set('kbn-xsrf', 'foo') + .send({ + name: 'A jira action', + actionTypeId: '.jira', + config: { + apiUrl: jiraSimulatorURL, + projectKey: 'CK', + incidentConfiguration: { ...mockJira.config.incidentConfiguration }, + isCaseOwned: true, + }, + secrets: mockJira.secrets, + }) + .expect(403, { + statusCode: 403, + error: 'Forbidden', + message: + 'Action type .jira is disabled because your basic license does not support it. Please upgrade your license.', + }); + }); + }); +} diff --git a/x-pack/test/alerting_api_integration/basic/tests/actions/index.ts b/x-pack/test/alerting_api_integration/basic/tests/actions/index.ts index 1788a12afebf2..8f31e7f96b562 100644 --- a/x-pack/test/alerting_api_integration/basic/tests/actions/index.ts +++ b/x-pack/test/alerting_api_integration/basic/tests/actions/index.ts @@ -11,6 +11,7 @@ export default function actionsTests({ loadTestFile }: FtrProviderContext) { describe('Actions', () => { loadTestFile(require.resolve('./builtin_action_types/email')); loadTestFile(require.resolve('./builtin_action_types/es_index')); + loadTestFile(require.resolve('./builtin_action_types/jira')); loadTestFile(require.resolve('./builtin_action_types/pagerduty')); loadTestFile(require.resolve('./builtin_action_types/server_log')); loadTestFile(require.resolve('./builtin_action_types/servicenow')); diff --git a/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/jira_simulation.ts b/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/jira_simulation.ts index 4b65b7a8f2636..6041251dc28a4 100644 --- a/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/jira_simulation.ts +++ b/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/jira_simulation.ts @@ -105,6 +105,57 @@ export function initPlugin(router: IRouter, path: string) { }); } ); + + router.get( + { + path: `${path}/rest/capabilities`, + options: { + authRequired: false, + }, + validate: {}, + }, + async function ( + context: RequestHandlerContext, + req: KibanaRequest, + res: KibanaResponseFactory + ): Promise> { + return jsonResponse(res, 200, { + capabilities: {}, + }); + } + ); + + router.get( + { + path: `${path}/rest/api/2/issue/createmeta`, + options: { + authRequired: false, + }, + validate: {}, + }, + async function ( + context: RequestHandlerContext, + req: KibanaRequest, + res: KibanaResponseFactory + ): Promise> { + return jsonResponse(res, 200, { + projects: [ + { + issuetypes: [ + { + id: '10006', + name: 'Task', + }, + { + id: '10007', + name: 'Sub-task', + }, + ], + }, + ], + }); + } + ); } function jsonResponse( diff --git a/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/plugin.ts b/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/plugin.ts index 0f7acf5ead1a1..88f0f02794c9b 100644 --- a/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/plugin.ts +++ b/x-pack/test/alerting_api_integration/common/fixtures/plugins/actions_simulators/server/plugin.ts @@ -38,6 +38,7 @@ export function getAllExternalServiceSimulatorPaths(): string[] { ); allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.SERVICENOW}/api/now/v2/table/incident`); allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.JIRA}/rest/api/2/issue`); + allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.JIRA}/rest/api/2/createmeta`); allPaths.push(`/api/_${NAME}/${ExternalServiceSimulator.RESILIENT}/rest/orgs/201/incidents`); return allPaths; } diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/jira.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/jira.ts index 3ffd58b945ddb..84fad699525a9 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/jira.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/jira.ts @@ -43,7 +43,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { apiUrl: 'www.jiraisinkibanaactions.com', projectKey: 'CK', - casesConfiguration: { mapping }, + incidentConfiguration: { mapping }, }, secrets: { apiToken: 'elastic', @@ -94,6 +94,8 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { ...mockJira.config, apiUrl: jiraSimulatorURL, + incidentConfiguration: mockJira.config.incidentConfiguration, + isCaseOwned: true, }, secrets: mockJira.secrets, }) @@ -107,7 +109,8 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { apiUrl: jiraSimulatorURL, projectKey: mockJira.config.projectKey, - casesConfiguration: mockJira.config.casesConfiguration, + incidentConfiguration: mockJira.config.incidentConfiguration, + isCaseOwned: true, }, }); @@ -123,7 +126,8 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { apiUrl: jiraSimulatorURL, projectKey: mockJira.config.projectKey, - casesConfiguration: mockJira.config.casesConfiguration, + incidentConfiguration: mockJira.config.incidentConfiguration, + isCaseOwned: true, }, }); }); @@ -178,7 +182,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { apiUrl: 'http://jira.mynonexistent.com', projectKey: mockJira.config.projectKey, - casesConfiguration: mockJira.config.casesConfiguration, + incidentConfiguration: mockJira.config.incidentConfiguration, }, secrets: mockJira.secrets, }) @@ -203,7 +207,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { apiUrl: jiraSimulatorURL, projectKey: mockJira.config.projectKey, - casesConfiguration: mockJira.config.casesConfiguration, + incidentConfiguration: mockJira.config.incidentConfiguration, }, }) .expect(400) @@ -217,30 +221,6 @@ export default function jiraTest({ getService }: FtrProviderContext) { }); }); - it('should respond with a 400 Bad Request when creating a jira action without casesConfiguration', async () => { - await supertest - .post('/api/actions/action') - .set('kbn-xsrf', 'foo') - .send({ - name: 'A jira action', - actionTypeId: '.jira', - config: { - apiUrl: jiraSimulatorURL, - projectKey: mockJira.config.projectKey, - }, - secrets: mockJira.secrets, - }) - .expect(400) - .then((resp: any) => { - expect(resp.body).to.eql({ - statusCode: 400, - error: 'Bad Request', - message: - 'error validating action type config: [casesConfiguration.mapping]: expected value of type [array] but got [undefined]', - }); - }); - }); - it('should respond with a 400 Bad Request when creating a jira action with empty mapping', async () => { await supertest .post('/api/actions/action') @@ -251,7 +231,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { apiUrl: jiraSimulatorURL, projectKey: mockJira.config.projectKey, - casesConfiguration: { mapping: [] }, + incidentConfiguration: { mapping: [] }, }, secrets: mockJira.secrets, }) @@ -261,7 +241,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { statusCode: 400, error: 'Bad Request', message: - 'error validating action type config: [casesConfiguration.mapping]: expected non-empty but got empty', + 'error validating action type config: [incidentConfiguration.mapping]: expected non-empty but got empty', }); }); }); @@ -276,7 +256,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { apiUrl: jiraSimulatorURL, projectKey: mockJira.config.projectKey, - casesConfiguration: { + incidentConfiguration: { mapping: [ { source: 'title', @@ -307,7 +287,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { config: { apiUrl: jiraSimulatorURL, projectKey: mockJira.config.projectKey, - casesConfiguration: mockJira.config.casesConfiguration, + incidentConfiguration: mockJira.config.incidentConfiguration, }, secrets: mockJira.secrets, }); @@ -353,7 +333,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subAction]: expected value to equal [pushToService]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subAction]: expected value to equal [pushToService]\n- [3.subAction]: expected value to equal [issueTypes]\n- [4.subAction]: expected value to equal [fieldsByIssueType]', }); }); }); @@ -371,7 +351,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.savedObjectId]: expected value of type [string] but got [undefined]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.savedObjectId]: expected value of type [string] but got [undefined]\n- [3.subAction]: expected value to equal [issueTypes]\n- [4.subAction]: expected value to equal [fieldsByIssueType]', }); }); }); @@ -389,7 +369,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.savedObjectId]: expected value of type [string] but got [undefined]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.savedObjectId]: expected value of type [string] but got [undefined]\n- [3.subAction]: expected value to equal [issueTypes]\n- [4.subAction]: expected value to equal [fieldsByIssueType]', }); }); }); @@ -412,31 +392,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.title]: expected value of type [string] but got [undefined]', - }); - }); - }); - - it('should handle failing with a simulated success without createdAt', async () => { - await supertest - .post(`/api/actions/action/${simulatedActionId}/_execute`) - .set('kbn-xsrf', 'foo') - .send({ - params: { - ...mockJira.params, - subActionParams: { - savedObjectId: 'success', - title: 'success', - }, - }, - }) - .then((resp: any) => { - expect(resp.body).to.eql({ - actionId: simulatedActionId, - status: 'error', - retry: false, - message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.createdAt]: expected value of type [string] but got [undefined]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.title]: expected value of type [string] but got [undefined]\n- [3.subAction]: expected value to equal [issueTypes]\n- [4.subAction]: expected value to equal [fieldsByIssueType]', }); }); }); @@ -464,7 +420,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.commentId]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [3.subAction]: expected value to equal [issueTypes]\n- [4.subAction]: expected value to equal [fieldsByIssueType]', }); }); }); @@ -492,35 +448,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { status: 'error', retry: false, message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]', - }); - }); - }); - - it('should handle failing with a simulated success without comment.createdAt', async () => { - await supertest - .post(`/api/actions/action/${simulatedActionId}/_execute`) - .set('kbn-xsrf', 'foo') - .send({ - params: { - ...mockJira.params, - subActionParams: { - ...mockJira.params.subActionParams, - savedObjectId: 'success', - title: 'success', - createdAt: 'success', - createdBy: { username: 'elastic' }, - comments: [{ commentId: 'success', comment: 'success' }], - }, - }, - }) - .then((resp: any) => { - expect(resp.body).to.eql({ - actionId: simulatedActionId, - status: 'error', - retry: false, - message: - 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.createdAt]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]', + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getIncident]\n- [1.subAction]: expected value to equal [handshake]\n- [2.subActionParams.comments]: types that failed validation:\n - [subActionParams.comments.0.0.comment]: expected value of type [string] but got [undefined]\n - [subActionParams.comments.1]: expected value to equal [null]\n- [3.subAction]: expected value to equal [issueTypes]\n- [4.subAction]: expected value to equal [fieldsByIssueType]', }); }); }); @@ -537,6 +465,7 @@ export default function jiraTest({ getService }: FtrProviderContext) { subActionParams: { ...mockJira.params.subActionParams, comments: [], + issueType: '10006', }, }, }) diff --git a/x-pack/test/case_api_integration/common/lib/utils.ts b/x-pack/test/case_api_integration/common/lib/utils.ts index fb6f4fce3c29a..c23df53c4feef 100644 --- a/x-pack/test/case_api_integration/common/lib/utils.ts +++ b/x-pack/test/case_api_integration/common/lib/utils.ts @@ -66,7 +66,7 @@ export const getJiraConnector = () => ({ config: { apiUrl: 'http://some.non.existent.com', projectKey: 'pkey', - casesConfiguration: { + incidentConfiguration: { mapping: [ { source: 'title', @@ -85,6 +85,7 @@ export const getJiraConnector = () => ({ }, ], }, + isCaseOwned: true, }, }); From bd384822f22dbb3b17699d22305bd31c1426f075 Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Wed, 9 Sep 2020 08:26:39 -0500 Subject: [PATCH 58/58] Upgrade elastic charts to 21.1.2 (#76939) --- package.json | 2 +- packages/kbn-ui-shared-deps/package.json | 2 +- yarn.lock | 31 +++--------------------- 3 files changed, 6 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index ff487510f7a32..95a6de337f62a 100644 --- a/package.json +++ b/package.json @@ -231,7 +231,7 @@ "@babel/parser": "^7.11.2", "@babel/types": "^7.11.0", "@elastic/apm-rum": "^5.5.0", - "@elastic/charts": "21.0.1", + "@elastic/charts": "21.1.2", "@elastic/ems-client": "7.9.3", "@elastic/eslint-config-kibana": "0.15.0", "@elastic/eslint-plugin-eui": "0.0.2", diff --git a/packages/kbn-ui-shared-deps/package.json b/packages/kbn-ui-shared-deps/package.json index 4b2e88d155245..bbe7b1bc2e8da 100644 --- a/packages/kbn-ui-shared-deps/package.json +++ b/packages/kbn-ui-shared-deps/package.json @@ -9,7 +9,7 @@ "kbn:watch": "node scripts/build --dev --watch" }, "dependencies": { - "@elastic/charts": "21.0.1", + "@elastic/charts": "21.1.2", "@elastic/eui": "28.2.0", "@elastic/numeral": "^2.5.0", "@kbn/i18n": "1.0.0", diff --git a/yarn.lock b/yarn.lock index bb3f8baea9692..ddb83b3cf1532 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1144,10 +1144,10 @@ dependencies: "@elastic/apm-rum-core" "^5.6.0" -"@elastic/charts@21.0.1": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@elastic/charts/-/charts-21.0.1.tgz#1e8be5303d0c7d53d7ccfcfa121ef68164ae200f" - integrity sha512-KMJE2JNwoy021Rvhgu1wiga0FVCa0u4NlFVUSR+h+G010KLarc+c9yUKBTG8v/nZ6ijBtuOLCjjU9OCWXYfxvA== +"@elastic/charts@21.1.2": + version "21.1.2" + resolved "https://registry.yarnpkg.com/@elastic/charts/-/charts-21.1.2.tgz#da7e9c1025bf730a738b6ac6d7024d97dd2b5aa2" + integrity sha512-Uri+Xolgii7/mRSarfXTfA6X2JC76ILIxTPO8RlYdI44gzprJfUO7Aw5s8vVQke3x6Cu39a+9B0s6TY4GAaApQ== dependencies: "@popperjs/core" "^2.4.0" chroma-js "^2.1.0" @@ -1168,9 +1168,6 @@ ts-debounce "^1.0.0" utility-types "^3.10.0" uuid "^3.3.2" - optionalDependencies: - redux-immutable-state-invariant "^2.1.0" - redux-logger "^3.0.6" "@elastic/elasticsearch@7.9.0-rc.1": version "7.9.0-rc.1" @@ -10394,11 +10391,6 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-diff@^0.3.5: - version "0.3.8" - resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" - integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= - deep-eql@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" @@ -24450,21 +24442,6 @@ redux-devtools-extension@^2.13.8: resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz#37b982688626e5e4993ff87220c9bbb7cd2d96e1" integrity sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg== -redux-immutable-state-invariant@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/redux-immutable-state-invariant/-/redux-immutable-state-invariant-2.1.0.tgz#308fd3cc7415a0e7f11f51ec997b6379c7055ce1" - integrity sha512-3czbDKs35FwiBRsx/3KabUk5zSOoTXC+cgVofGkpBNv3jQcqIe5JrHcF5AmVt7B/4hyJ8MijBIpCJ8cife6yJg== - dependencies: - invariant "^2.1.0" - json-stringify-safe "^5.0.1" - -redux-logger@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf" - integrity sha1-91VZZvMJjzyIYExEnPC69XeCdL8= - dependencies: - deep-diff "^0.3.5" - redux-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/redux-observable/-/redux-observable-1.2.0.tgz#ff51b6c6be2598e9b5e89fc36639186bb0e669c7"