From 1a6b234d42c87086e0cb6504116c248d03d66a22 Mon Sep 17 00:00:00 2001 From: "Lucas F. da Costa" Date: Wed, 13 Apr 2022 09:35:15 +0100 Subject: [PATCH 001/305] [Uptime] remove latency limit warnings when using monitor management (#129597) --- .../monitor_management/locations.ts | 4 -- .../browser/throttling_fields.test.tsx | 49 ------------------- .../browser/throttling_fields.tsx | 29 ++++------- .../get_service_locations.test.ts | 2 - .../get_service_locations.ts | 3 +- 5 files changed, 11 insertions(+), 76 deletions(-) diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/locations.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/locations.ts index ab9a6f90de0a0..8ee664bda1ebf 100644 --- a/x-pack/plugins/uptime/common/runtime_types/monitor_management/locations.ts +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/locations.ts @@ -12,19 +12,16 @@ import { tEnum } from '../../utils/t_enum'; export enum BandwidthLimitKey { DOWNLOAD = 'download', UPLOAD = 'upload', - LATENCY = 'latency', } export const DEFAULT_BANDWIDTH_LIMIT = { [BandwidthLimitKey.DOWNLOAD]: 100, [BandwidthLimitKey.UPLOAD]: 30, - [BandwidthLimitKey.LATENCY]: 1000, }; export const DEFAULT_THROTTLING = { [BandwidthLimitKey.DOWNLOAD]: DEFAULT_BANDWIDTH_LIMIT[BandwidthLimitKey.DOWNLOAD], [BandwidthLimitKey.UPLOAD]: DEFAULT_BANDWIDTH_LIMIT[BandwidthLimitKey.UPLOAD], - [BandwidthLimitKey.LATENCY]: DEFAULT_BANDWIDTH_LIMIT[BandwidthLimitKey.LATENCY], }; export const BandwidthLimitKeyCodec = tEnum( @@ -107,7 +104,6 @@ export const isServiceLocationInvalid = (location: MonitorServiceLocation) => export const ThrottlingOptionsCodec = t.interface({ [BandwidthLimitKey.DOWNLOAD]: t.number, [BandwidthLimitKey.UPLOAD]: t.number, - [BandwidthLimitKey.LATENCY]: t.number, }); export const ServiceLocationsApiResponseCodec = t.interface({ diff --git a/x-pack/plugins/uptime/public/components/fleet_package/browser/throttling_fields.test.tsx b/x-pack/plugins/uptime/public/components/fleet_package/browser/throttling_fields.test.tsx index f817f1ff9a805..dc74717ec2c98 100644 --- a/x-pack/plugins/uptime/public/components/fleet_package/browser/throttling_fields.test.tsx +++ b/x-pack/plugins/uptime/public/components/fleet_package/browser/throttling_fields.test.tsx @@ -214,7 +214,6 @@ describe('', () => { const throttling = { [BandwidthLimitKey.DOWNLOAD]: 100, [BandwidthLimitKey.UPLOAD]: 50, - [BandwidthLimitKey.LATENCY]: 25, }; const defaultLocations = [defaultLocation]; @@ -339,54 +338,6 @@ describe('', () => { ) ).not.toBeInTheDocument(); }); - - it("shows latency warnings when exceeding the node's latency limits", () => { - const { getByLabelText, queryByText } = render( - - ); - - const latencyLimit = throttling[BandwidthLimitKey.LATENCY]; - - const latency = getByLabelText('Latency') as HTMLInputElement; - userEvent.clear(latency); - userEvent.type(latency, String(latencyLimit + 1)); - - expect( - queryByText( - `You have exceeded the latency limit for Synthetic Nodes. The latency value can't be larger than ${latencyLimit}ms.` - ) - ).toBeInTheDocument(); - - expect( - queryByText("You've exceeded the Synthetics Node bandwidth limits") - ).toBeInTheDocument(); - - expect( - queryByText( - 'When using throttling values larger than a Synthetics Node bandwidth limit, your monitor will still have its bandwidth capped.' - ) - ).toBeInTheDocument(); - - userEvent.clear(latency); - userEvent.type(latency, String(latencyLimit - 1)); - expect( - queryByText( - `You have exceeded the latency limit for Synthetic Nodes. The latency value can't be larger than ${latencyLimit}ms.` - ) - ).not.toBeInTheDocument(); - - expect( - queryByText("You've exceeded the Synthetics Node bandwidth limits") - ).not.toBeInTheDocument(); - - expect( - queryByText( - 'When using throttling values larger than a Synthetics Node bandwidth limit, your monitor will still have its bandwidth capped.' - ) - ).not.toBeInTheDocument(); - }); }); it('only displays download, upload, and latency fields with throttling is on', () => { diff --git a/x-pack/plugins/uptime/public/components/fleet_package/browser/throttling_fields.tsx b/x-pack/plugins/uptime/public/components/fleet_package/browser/throttling_fields.tsx index 683bc1e79e386..f7fc15887e721 100644 --- a/x-pack/plugins/uptime/public/components/fleet_package/browser/throttling_fields.tsx +++ b/x-pack/plugins/uptime/public/components/fleet_package/browser/throttling_fields.tsx @@ -76,17 +76,15 @@ export const ThrottlingExceededCallout = () => { export const ThrottlingExceededMessage = ({ throttlingField, limit, - unit, }: { throttlingField: string; limit: number; - unit: string; }) => { return ( ); }; @@ -97,7 +95,6 @@ export const ThrottlingFields = memo(({ validate, minColumnWidth, onField const maxDownload = throttling[BandwidthLimitKey.DOWNLOAD]; const maxUpload = throttling[BandwidthLimitKey.UPLOAD]; - const maxLatency = throttling[BandwidthLimitKey.LATENCY]; const handleInputChange = useCallback( ({ value, configKey }: { value: unknown; configKey: ThrottlingConfigs }) => { @@ -110,7 +107,6 @@ export const ThrottlingFields = memo(({ validate, minColumnWidth, onField runsOnService && parseFloat(fields[ConfigKey.DOWNLOAD_SPEED]) > maxDownload; const exceedsUploadLimits = runsOnService && parseFloat(fields[ConfigKey.UPLOAD_SPEED]) > maxUpload; - const exceedsLatencyLimits = runsOnService && parseFloat(fields[ConfigKey.LATENCY]) > maxLatency; const isThrottlingEnabled = fields[ConfigKey.IS_THROTTLING_ENABLED]; const throttlingInputs = isThrottlingEnabled ? ( @@ -127,7 +123,7 @@ export const ThrottlingFields = memo(({ validate, minColumnWidth, onField isInvalid={!!validate[ConfigKey.DOWNLOAD_SPEED]?.(fields) || exceedsDownloadLimits} error={ exceedsDownloadLimits ? ( - + ) : ( (({ validate, minColumnWidth, onField isInvalid={!!validate[ConfigKey.UPLOAD_SPEED]?.(fields) || exceedsUploadLimits} error={ exceedsUploadLimits ? ( - + ) : ( (({ validate, minColumnWidth, onField /> } labelAppend={} - isInvalid={!!validate[ConfigKey.LATENCY]?.(fields) || exceedsLatencyLimits} + isInvalid={!!validate[ConfigKey.LATENCY]?.(fields)} error={ - exceedsLatencyLimits ? ( - - ) : ( - - ) + } > (({ validate, minColumnWidth, onField } onBlur={() => onFieldBlur?.(ConfigKey.IS_THROTTLING_ENABLED)} /> - {isThrottlingEnabled && - (exceedsDownloadLimits || exceedsUploadLimits || exceedsLatencyLimits) ? ( + {isThrottlingEnabled && (exceedsDownloadLimits || exceedsUploadLimits) ? ( <> diff --git a/x-pack/plugins/uptime/server/lib/synthetics_service/get_service_locations.test.ts b/x-pack/plugins/uptime/server/lib/synthetics_service/get_service_locations.test.ts index 82fe06f36d533..9151a1dcac6ad 100644 --- a/x-pack/plugins/uptime/server/lib/synthetics_service/get_service_locations.test.ts +++ b/x-pack/plugins/uptime/server/lib/synthetics_service/get_service_locations.test.ts @@ -18,7 +18,6 @@ describe('getServiceLocations', function () { throttling: { [BandwidthLimitKey.DOWNLOAD]: 100, [BandwidthLimitKey.UPLOAD]: 50, - [BandwidthLimitKey.LATENCY]: 20, }, locations: { us_central: { @@ -50,7 +49,6 @@ describe('getServiceLocations', function () { throttling: { [BandwidthLimitKey.DOWNLOAD]: 100, [BandwidthLimitKey.UPLOAD]: 50, - [BandwidthLimitKey.LATENCY]: 20, }, locations: [ { diff --git a/x-pack/plugins/uptime/server/lib/synthetics_service/get_service_locations.ts b/x-pack/plugins/uptime/server/lib/synthetics_service/get_service_locations.ts index 50ecfe38d20dd..45dd0ded1438d 100644 --- a/x-pack/plugins/uptime/server/lib/synthetics_service/get_service_locations.ts +++ b/x-pack/plugins/uptime/server/lib/synthetics_service/get_service_locations.ts @@ -54,8 +54,7 @@ export async function getServiceLocations(server: UptimeServerSetup) { const throttling = pick( data.throttling, BandwidthLimitKey.DOWNLOAD, - BandwidthLimitKey.UPLOAD, - BandwidthLimitKey.LATENCY + BandwidthLimitKey.UPLOAD ) as ThrottlingOptions; return { throttling, locations }; From 04acd494967400767774233c6afa4e122a58f25f Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Wed, 13 Apr 2022 11:02:36 +0200 Subject: [PATCH 002/305] [Discover] Update refreshOnClick flaky test (#130001) --- .../apps/discover/_search_on_page_load.ts | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/test/functional/apps/discover/_search_on_page_load.ts b/test/functional/apps/discover/_search_on_page_load.ts index 3df6ce1c13c43..91943b28c6db0 100644 --- a/test/functional/apps/discover/_search_on_page_load.ts +++ b/test/functional/apps/discover/_search_on_page_load.ts @@ -18,6 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); const testSubjects = getService('testSubjects'); + const refreshButtonSelector = 'refreshDataButton'; const defaultSettings = { defaultIndex: 'logstash-*', @@ -58,63 +59,57 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); }); - // FLAKY: https://github.com/elastic/kibana/issues/118432 - describe.skip(`when it's false`, () => { + describe(`when it's false`, () => { beforeEach(async () => await initSearchOnPageLoad(false)); it('should not fetch data from ES initially', async function () { - expect(await testSubjects.exists('refreshDataButton')).to.be(true); + expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); }); it('should not fetch on indexPattern change', async function () { - expect(await testSubjects.exists('refreshDataButton')).to.be(true); + expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); await PageObjects.discover.selectIndexPattern('date-nested'); - expect(await testSubjects.exists('refreshDataButton')).to.be(true); + expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); }); it('should fetch data from ES after refreshDataButton click', async function () { - expect(await testSubjects.exists('refreshDataButton')).to.be(true); + expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - /** - * We should wait for debounce timeout expired 100 ms, - * otherwise click event will be skipped. See getFetch$ implementation. - */ - await PageObjects.common.sleep(100); - await testSubjects.click('refreshDataButton'); + await testSubjects.click(refreshButtonSelector); + await testSubjects.missingOrFail(refreshButtonSelector); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await testSubjects.exists('refreshDataButton')).to.be(false); }); it('should fetch data from ES after submit query', async function () { - expect(await testSubjects.exists('refreshDataButton')).to.be(true); + expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); await queryBar.submitQuery(); + await testSubjects.missingOrFail(refreshButtonSelector); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await testSubjects.exists('refreshDataButton')).to.be(false); }); it('should fetch data from ES after choosing commonly used time range', async function () { await PageObjects.discover.selectIndexPattern('logstash-*'); - expect(await testSubjects.exists('refreshDataButton')).to.be(true); + expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); await PageObjects.timePicker.setCommonlyUsedTime('This_week'); + await testSubjects.missingOrFail(refreshButtonSelector); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await testSubjects.exists('refreshDataButton')).to.be(false); }); }); - it(`when it's false should fetch data from ES initially`, async function () { + it(`when it's true should fetch data from ES initially`, async function () { await initSearchOnPageLoad(true); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); }); From 35d575c2aed4e3d11a432e34c7c37e58c575b8f7 Mon Sep 17 00:00:00 2001 From: Muhammad Ibragimov <53621505+mibragimov@users.noreply.github.com> Date: Wed, 13 Apr 2022 14:33:12 +0500 Subject: [PATCH 003/305] [Console] Add option to disable keyboard shortcuts (#128887) * Get editor instance to settings modal * Add disable keyboard shortcuts feature * Update editor.test.tsx * Refactor * Address comments Co-authored-by: Muhammad Ibragimov --- .../application/components/help_panel.tsx | 7 ++ .../application/components/settings_modal.tsx | 53 ++++++++++++-- .../application/containers/editor/editor.tsx | 9 ++- .../legacy/console_editor/editor.test.tsx | 2 +- .../editor/legacy/console_editor/editor.tsx | 26 +++++-- .../console_editor/keyboard_shortcuts.ts | 41 +++++++++-- .../application/containers/main/main.tsx | 9 ++- .../application/containers/settings.tsx | 5 +- .../use_send_current_request_to_es.ts | 6 +- .../legacy_core_editor/legacy_core_editor.ts | 5 ++ .../console/public/services/settings.ts | 70 +++++++++++++------ .../console/public/types/core_editor.ts | 8 ++- 12 files changed, 191 insertions(+), 50 deletions(-) diff --git a/src/plugins/console/public/application/components/help_panel.tsx b/src/plugins/console/public/application/components/help_panel.tsx index 50238006f6ce2..ed57d3178df4b 100644 --- a/src/plugins/console/public/application/components/help_panel.tsx +++ b/src/plugins/console/public/application/components/help_panel.tsx @@ -140,6 +140,13 @@ export function HelpPanel(props: Props) { defaultMessage="Select the currently selected or the top most term in auto-complete menu" /> +
Ctrl/Cmd + L
+
+ +
Esc
void; refreshAutocompleteSettings: (selectedSettings: DevToolsSettings['autocomplete']) => void; settings: DevToolsSettings; + editorInstance: SenseEditor | null; } export function DevToolsSettingsModal(props: Props) { @@ -74,7 +77,10 @@ export function DevToolsSettingsModal(props: Props) { const [polling, setPolling] = useState(props.settings.polling); const [pollInterval, setPollInterval] = useState(props.settings.pollInterval); const [tripleQuotes, setTripleQuotes] = useState(props.settings.tripleQuotes); - const [historyDisabled, setHistoryDisabled] = useState(props.settings.historyDisabled); + const [isHistoryDisabled, setIsHistoryDisabled] = useState(props.settings.isHistoryDisabled); + const [isKeyboardShortcutsDisabled, setIsKeyboardShortcutsDisabled] = useState( + props.settings.isKeyboardShortcutsDisabled + ); const autoCompleteCheckboxes = [ { @@ -134,7 +140,8 @@ export function DevToolsSettingsModal(props: Props) { polling, pollInterval, tripleQuotes, - historyDisabled, + isHistoryDisabled, + isKeyboardShortcutsDisabled, }); } @@ -145,6 +152,21 @@ export function DevToolsSettingsModal(props: Props) { setPollInterval(sanitizedValue); }, []); + const toggleKeyboardShortcuts = useCallback( + (isDisabled: boolean) => { + if (props.editorInstance) { + unregisterCommands(props.editorInstance); + setIsKeyboardShortcutsDisabled(isDisabled); + } + }, + [props.editorInstance] + ); + + const toggleSavingToHistory = useCallback( + (isDisabled: boolean) => setIsHistoryDisabled(isDisabled), + [] + ); + // It only makes sense to show polling options if the user needs to fetch any data. const pollingFields = fields || indices || templates ? ( @@ -160,7 +182,7 @@ export function DevToolsSettingsModal(props: Props) { } > @@ -267,15 +289,34 @@ export function DevToolsSettingsModal(props: Props) { } > } - onChange={(e) => setHistoryDisabled(e.target.checked)} + onChange={(e) => toggleSavingToHistory(e.target.checked)} + /> + + + + } + > + + } + onChange={(e) => toggleKeyboardShortcuts(e.target.checked)} /> diff --git a/src/plugins/console/public/application/containers/editor/editor.tsx b/src/plugins/console/public/application/containers/editor/editor.tsx index df017250664e4..4931648c07df7 100644 --- a/src/plugins/console/public/application/containers/editor/editor.tsx +++ b/src/plugins/console/public/application/containers/editor/editor.tsx @@ -15,15 +15,17 @@ import { Panel, PanelsContainer } from '../../containers'; import { Editor as EditorUI, EditorOutput } from './legacy/console_editor'; import { StorageKeys } from '../../../services'; import { useEditorReadContext, useServicesContext, useRequestReadContext } from '../../contexts'; +import type { SenseEditor } from '../../models'; const INITIAL_PANEL_WIDTH = 50; const PANEL_MIN_WIDTH = '100px'; interface Props { loading: boolean; + setEditorInstance: (instance: SenseEditor) => void; } -export const Editor = memo(({ loading }: Props) => { +export const Editor = memo(({ loading, setEditorInstance }: Props) => { const { services: { storage }, } = useServicesContext(); @@ -61,7 +63,10 @@ export const Editor = memo(({ loading }: Props) => { {loading ? ( ) : ( - + )} { - + {}} /> diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx index 9105d86f9e2ec..9a879b4a72916 100644 --- a/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx @@ -34,11 +34,13 @@ import { autoIndent, getDocumentation } from '../console_menu_actions'; import { subscribeResizeChecker } from '../subscribe_console_resize_checker'; import { applyCurrentSettings } from './apply_editor_settings'; import { registerCommands } from './keyboard_shortcuts'; +import type { SenseEditor } from '../../../../models/sense_editor'; const { useUIAceKeyboardMode } = ace; export interface EditorProps { initialTextValue: string; + setEditorInstance: (instance: SenseEditor) => void; } interface QueryParams { @@ -62,7 +64,7 @@ const DEFAULT_INPUT_VALUE = `GET _search const inputId = 'ConAppInputTextarea'; -function EditorUI({ initialTextValue }: EditorProps) { +function EditorUI({ initialTextValue, setEditorInstance }: EditorProps) { const { services: { history, notifications, settings: settingsService, esHostService, http }, docLinkVersion, @@ -225,12 +227,22 @@ function EditorUI({ initialTextValue }: EditorProps) { }, [settings]); useEffect(() => { - registerCommands({ - senseEditor: editorInstanceRef.current!, - sendCurrentRequestToES, - openDocumentation, - }); - }, [sendCurrentRequestToES, openDocumentation]); + const { isKeyboardShortcutsDisabled } = settings; + if (!isKeyboardShortcutsDisabled) { + registerCommands({ + senseEditor: editorInstanceRef.current!, + sendCurrentRequestToES, + openDocumentation, + }); + } + }, [sendCurrentRequestToES, openDocumentation, settings]); + + useEffect(() => { + const { current: editor } = editorInstanceRef; + if (editor) { + setEditorInstance(editor); + } + }, [setEditorInstance]); return (
diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts b/src/plugins/console/public/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts index 4f09a49f3ac96..3d100ef0a5528 100644 --- a/src/plugins/console/public/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts @@ -15,6 +15,15 @@ interface Actions { openDocumentation: () => void; } +const COMMANDS = { + SEND_TO_ELASTICSEARCH: 'send to Elasticsearch', + OPEN_DOCUMENTATION: 'open documentation', + AUTO_INDENT_REQUEST: 'auto indent request', + MOVE_TO_PREVIOUS_REQUEST: 'move to previous request start or end', + MOVE_TO_NEXT_REQUEST: 'move to next request start or end', + GO_TO_LINE: 'gotoline', +}; + export function registerCommands({ senseEditor, sendCurrentRequestToES, @@ -28,12 +37,14 @@ export function registerCommands({ coreEditor.registerKeyboardShortcut({ keys: { win: 'Ctrl-Enter', mac: 'Command-Enter' }, - name: 'send to Elasticsearch', - fn: () => sendCurrentRequestToES(), + name: COMMANDS.SEND_TO_ELASTICSEARCH, + fn: () => { + sendCurrentRequestToES(); + }, }); coreEditor.registerKeyboardShortcut({ - name: 'open documentation', + name: COMMANDS.OPEN_DOCUMENTATION, keys: { win: 'Ctrl-/', mac: 'Command-/' }, fn: () => { openDocumentation(); @@ -41,7 +52,7 @@ export function registerCommands({ }); coreEditor.registerKeyboardShortcut({ - name: 'auto indent request', + name: COMMANDS.AUTO_INDENT_REQUEST, keys: { win: 'Ctrl-I', mac: 'Command-I' }, fn: () => { throttledAutoIndent(); @@ -49,7 +60,7 @@ export function registerCommands({ }); coreEditor.registerKeyboardShortcut({ - name: 'move to previous request start or end', + name: COMMANDS.MOVE_TO_PREVIOUS_REQUEST, keys: { win: 'Ctrl-Up', mac: 'Command-Up' }, fn: () => { senseEditor.moveToPreviousRequestEdge(); @@ -57,10 +68,28 @@ export function registerCommands({ }); coreEditor.registerKeyboardShortcut({ - name: 'move to next request start or end', + name: COMMANDS.MOVE_TO_NEXT_REQUEST, keys: { win: 'Ctrl-Down', mac: 'Command-Down' }, fn: () => { senseEditor.moveToNextRequestEdge(false); }, }); + + coreEditor.registerKeyboardShortcut({ + name: COMMANDS.GO_TO_LINE, + keys: { win: 'Ctrl-L', mac: 'Command-L' }, + fn: (editor) => { + const line = parseInt(prompt('Enter line number') ?? '', 10); + if (!isNaN(line)) { + editor.gotoLine(line); + } + }, + }); +} + +export function unregisterCommands(senseEditor: SenseEditor) { + const coreEditor = senseEditor.getCoreEditor(); + Object.values(COMMANDS).forEach((command) => { + coreEditor.unregisterKeyboardShortcut(command); + }); } diff --git a/src/plugins/console/public/application/containers/main/main.tsx b/src/plugins/console/public/application/containers/main/main.tsx index 30bf23d94a327..5895b919f9842 100644 --- a/src/plugins/console/public/application/containers/main/main.tsx +++ b/src/plugins/console/public/application/containers/main/main.tsx @@ -25,6 +25,7 @@ import { useServicesContext, useEditorReadContext, useRequestReadContext } from import { useDataInit } from '../../hooks'; import { getTopNavConfig } from './get_top_nav'; +import type { SenseEditor } from '../../models/sense_editor'; export function Main() { const { @@ -46,6 +47,8 @@ export function Main() { const [showSettings, setShowSettings] = useState(false); const [showHelp, setShowHelp] = useState(false); + const [editorInstance, setEditorInstance] = useState(null); + const renderConsoleHistory = () => { return editorsReady ? setShowHistory(false)} /> : null; }; @@ -108,7 +111,7 @@ export function Main() { {showingHistory ? {renderConsoleHistory()} : null} - + @@ -121,7 +124,9 @@ export function Main() { /> ) : null} - {showSettings ? setShowSettings(false)} /> : null} + {showSettings ? ( + setShowSettings(false)} editorInstance={editorInstance} /> + ) : null} {showHelp ? setShowHelp(false)} /> : null}
diff --git a/src/plugins/console/public/application/containers/settings.tsx b/src/plugins/console/public/application/containers/settings.tsx index f0ec64f4b13b2..c0bd1b18fff26 100644 --- a/src/plugins/console/public/application/containers/settings.tsx +++ b/src/plugins/console/public/application/containers/settings.tsx @@ -15,6 +15,7 @@ import { AutocompleteOptions, DevToolsSettingsModal } from '../components'; import { retrieveAutoCompleteInfo } from '../../lib/mappings/mappings'; import { useServicesContext, useEditorActionContext } from '../contexts'; import { DevToolsSettings, Settings as SettingsService } from '../../services'; +import type { SenseEditor } from '../models'; const getAutocompleteDiff = ( newSettings: DevToolsSettings, @@ -70,9 +71,10 @@ const fetchAutocompleteSettingsIfNeeded = ( export interface Props { onClose: () => void; + editorInstance: SenseEditor | null; } -export function Settings({ onClose }: Props) { +export function Settings({ onClose, editorInstance }: Props) { const { services: { settings, http }, } = useServicesContext(); @@ -102,6 +104,7 @@ export function Settings({ onClose }: Props) { refreshAutocompleteSettings(http, settings, selectedSettings) } settings={settings.toJSON()} + editorInstance={editorInstance} /> ); } diff --git a/src/plugins/console/public/application/hooks/use_send_current_request_to_es/use_send_current_request_to_es.ts b/src/plugins/console/public/application/hooks/use_send_current_request_to_es/use_send_current_request_to_es.ts index f53a9dadbe108..e7c436c9806b3 100644 --- a/src/plugins/console/public/application/hooks/use_send_current_request_to_es/use_send_current_request_to_es.ts +++ b/src/plugins/console/public/application/hooks/use_send_current_request_to_es/use_send_current_request_to_es.ts @@ -49,9 +49,9 @@ export const useSendCurrentRequestToES = () => { const results = await sendRequestToES({ http, requests }); let saveToHistoryError: undefined | Error; - const { historyDisabled } = settings.toJSON(); + const { isHistoryDisabled } = settings.toJSON(); - if (!historyDisabled) { + if (!isHistoryDisabled) { results.forEach(({ request: { path, method, data } }) => { try { history.addToHistory(path, method, data); @@ -81,7 +81,7 @@ export const useSendCurrentRequestToES = () => { notifications.toasts.remove(toast); }, onDisableSavingToHistory: () => { - settings.setHistoryDisabled(true); + settings.setIsHistoryDisabled(true); notifications.toasts.remove(toast); }, }), diff --git a/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts b/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts index 7a90dbe138f17..f13597e933bb2 100644 --- a/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts +++ b/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts @@ -297,6 +297,11 @@ export class LegacyCoreEditor implements CoreEditor { }); } + unregisterKeyboardShortcut(command: string) { + // @ts-ignore + this.editor.commands.removeCommand(command); + } + legacyUpdateUI(range: Range) { if (!this.$actions) { return; diff --git a/src/plugins/console/public/services/settings.ts b/src/plugins/console/public/services/settings.ts index 1a7eff3e7ca54..6757631a7d7c5 100644 --- a/src/plugins/console/public/services/settings.ts +++ b/src/plugins/console/public/services/settings.ts @@ -15,7 +15,8 @@ export const DEFAULT_SETTINGS = Object.freeze({ tripleQuotes: true, wrapMode: true, autocomplete: Object.freeze({ fields: true, indices: true, templates: true, dataStreams: true }), - historyDisabled: false, + isHistoryDisabled: false, + isKeyboardShortcutsDisabled: false, }); export interface DevToolsSettings { @@ -30,72 +31,96 @@ export interface DevToolsSettings { polling: boolean; pollInterval: number; tripleQuotes: boolean; - historyDisabled: boolean; + isHistoryDisabled: boolean; + isKeyboardShortcutsDisabled: boolean; +} + +enum SettingKeys { + FONT_SIZE = 'font_size', + WRAP_MODE = 'wrap_mode', + TRIPLE_QUOTES = 'triple_quotes', + AUTOCOMPLETE_SETTINGS = 'autocomplete_settings', + CONSOLE_POLLING = 'console_polling', + POLL_INTERVAL = 'poll_interval', + IS_HISTORY_DISABLED = 'is_history_disabled', + IS_KEYBOARD_SHORTCUTS_DISABLED = 'is_keyboard_shortcuts_disabled', } export class Settings { constructor(private readonly storage: Storage) {} getFontSize() { - return this.storage.get('font_size', DEFAULT_SETTINGS.fontSize); + return this.storage.get(SettingKeys.FONT_SIZE, DEFAULT_SETTINGS.fontSize); } setFontSize(size: number) { - this.storage.set('font_size', size); + this.storage.set(SettingKeys.FONT_SIZE, size); return true; } getWrapMode() { - return this.storage.get('wrap_mode', DEFAULT_SETTINGS.wrapMode); + return this.storage.get(SettingKeys.WRAP_MODE, DEFAULT_SETTINGS.wrapMode); } setWrapMode(mode: boolean) { - this.storage.set('wrap_mode', mode); + this.storage.set(SettingKeys.WRAP_MODE, mode); return true; } setTripleQuotes(tripleQuotes: boolean) { - this.storage.set('triple_quotes', tripleQuotes); + this.storage.set(SettingKeys.TRIPLE_QUOTES, tripleQuotes); return true; } getTripleQuotes() { - return this.storage.get('triple_quotes', DEFAULT_SETTINGS.tripleQuotes); + return this.storage.get(SettingKeys.TRIPLE_QUOTES, DEFAULT_SETTINGS.tripleQuotes); } getAutocomplete() { - return this.storage.get('autocomplete_settings', DEFAULT_SETTINGS.autocomplete); + return this.storage.get(SettingKeys.AUTOCOMPLETE_SETTINGS, DEFAULT_SETTINGS.autocomplete); } setAutocomplete(settings: object) { - this.storage.set('autocomplete_settings', settings); + this.storage.set(SettingKeys.AUTOCOMPLETE_SETTINGS, settings); return true; } getPolling() { - return this.storage.get('console_polling', DEFAULT_SETTINGS.polling); + return this.storage.get(SettingKeys.CONSOLE_POLLING, DEFAULT_SETTINGS.polling); } setPolling(polling: boolean) { - this.storage.set('console_polling', polling); + this.storage.set(SettingKeys.CONSOLE_POLLING, polling); return true; } - setHistoryDisabled(disable: boolean) { - this.storage.set('disable_history', disable); + setIsHistoryDisabled(isDisabled: boolean) { + this.storage.set(SettingKeys.IS_HISTORY_DISABLED, isDisabled); return true; } - getHistoryDisabled() { - return this.storage.get('disable_history', DEFAULT_SETTINGS.historyDisabled); + getIsHistoryDisabled() { + return this.storage.get(SettingKeys.IS_HISTORY_DISABLED, DEFAULT_SETTINGS.isHistoryDisabled); } setPollInterval(interval: number) { - this.storage.set('poll_interval', interval); + this.storage.set(SettingKeys.POLL_INTERVAL, interval); } getPollInterval() { - return this.storage.get('poll_interval', DEFAULT_SETTINGS.pollInterval); + return this.storage.get(SettingKeys.POLL_INTERVAL, DEFAULT_SETTINGS.pollInterval); + } + + setIsKeyboardShortcutsDisabled(disable: boolean) { + this.storage.set(SettingKeys.IS_KEYBOARD_SHORTCUTS_DISABLED, disable); + return true; + } + + getIsKeyboardShortcutsDisabled() { + return this.storage.get( + SettingKeys.IS_KEYBOARD_SHORTCUTS_DISABLED, + DEFAULT_SETTINGS.isKeyboardShortcutsDisabled + ); } toJSON(): DevToolsSettings { @@ -106,7 +131,8 @@ export class Settings { fontSize: parseFloat(this.getFontSize()), polling: Boolean(this.getPolling()), pollInterval: this.getPollInterval(), - historyDisabled: Boolean(this.getHistoryDisabled()), + isHistoryDisabled: Boolean(this.getIsHistoryDisabled()), + isKeyboardShortcutsDisabled: Boolean(this.getIsKeyboardShortcutsDisabled()), }; } @@ -117,7 +143,8 @@ export class Settings { autocomplete, polling, pollInterval, - historyDisabled, + isHistoryDisabled, + isKeyboardShortcutsDisabled, }: DevToolsSettings) { this.setFontSize(fontSize); this.setWrapMode(wrapMode); @@ -125,7 +152,8 @@ export class Settings { this.setAutocomplete(autocomplete); this.setPolling(polling); this.setPollInterval(pollInterval); - this.setHistoryDisabled(historyDisabled); + this.setIsHistoryDisabled(isHistoryDisabled); + this.setIsKeyboardShortcutsDisabled(isKeyboardShortcutsDisabled); } } diff --git a/src/plugins/console/public/types/core_editor.ts b/src/plugins/console/public/types/core_editor.ts index cc344d6bcc881..db8010afe762b 100644 --- a/src/plugins/console/public/types/core_editor.ts +++ b/src/plugins/console/public/types/core_editor.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import type { Editor } from 'brace'; import { TokensProvider } from './tokens_provider'; import { Token } from './token'; @@ -252,10 +253,15 @@ export interface CoreEditor { */ registerKeyboardShortcut(opts: { keys: string | { win?: string; mac?: string }; - fn: () => void; + fn: (editor: Editor) => void; name: string; }): void; + /** + * Unregister a keyboard shortcut and provide a command name + */ + unregisterKeyboardShortcut(command: string): void; + /** * Register a completions function that will be called when the editor * detects a change From 3877763e118b9e20b88eb9f89eb083d4581679fc Mon Sep 17 00:00:00 2001 From: Pablo Machado Date: Wed, 13 Apr 2022 11:43:12 +0200 Subject: [PATCH 004/305] Fix explore tables don't display data when a global filter is applied (#130024) --- .../common/components/search_bar/index.tsx | 46 +++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx b/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx index d5624421c0006..48b4acbf4d008 100644 --- a/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx @@ -8,7 +8,7 @@ import { set } from '@elastic/safer-lodash-set/fp'; import { getOr } from 'lodash/fp'; import React, { memo, useEffect, useCallback, useMemo } from 'react'; -import { connect, ConnectedProps } from 'react-redux'; +import { connect, ConnectedProps, useDispatch } from 'react-redux'; import { Dispatch } from 'redux'; import { Subscription } from 'rxjs'; import styled from 'styled-components'; @@ -35,10 +35,11 @@ import { startSelector, toStrSelector, } from './selectors'; -import { hostsActions } from '../../../hosts/store'; -import { networkActions } from '../../../network/store'; import { timelineActions } from '../../../timelines/store/timeline'; import { useKibana } from '../../lib/kibana'; +import { usersActions } from '../../../users/store'; +import { hostsActions } from '../../../hosts/store'; +import { networkActions } from '../../../network/store'; const APP_STATE_STORAGE_KEY = 'securitySolution.searchBar.appState'; @@ -91,16 +92,25 @@ export const SearchBarComponent = memo( }, } = useKibana().services; + const dispatch = useDispatch(); + const setTablesActivePageToZero = useCallback(() => { + dispatch(usersActions.setUsersTablesActivePageToZero()); + dispatch(hostsActions.setHostTablesActivePageToZero()); + dispatch(networkActions.setNetworkTablesActivePageToZero()); + }, [dispatch]); + useEffect(() => { if (fromStr != null && toStr != null) { timefilter.setTime({ from: fromStr, to: toStr }); } else if (start != null && end != null) { + setTablesActivePageToZero(); + timefilter.setTime({ from: new Date(start).toISOString(), to: new Date(end).toISOString(), }); } - }, [end, fromStr, start, timefilter, toStr]); + }, [end, fromStr, start, timefilter, toStr, setTablesActivePageToZero]); const onQuerySubmit = useCallback( (payload: { dateRange: TimeRange; query?: Query }) => { @@ -119,6 +129,7 @@ export const SearchBarComponent = memo( isQuickSelection, updateTime: false, filterManager, + setTablesActivePageToZero, }; let isStateUpdated = false; @@ -164,6 +175,7 @@ export const SearchBarComponent = memo( filterQuery, queries, updateSearch, + setTablesActivePageToZero, ] ); @@ -178,12 +190,13 @@ export const SearchBarComponent = memo( isQuickSelection: true, updateTime: true, filterManager, + setTablesActivePageToZero, }); } else { queries.forEach((q) => q.refetch && (q.refetch as inputsModel.Refetch)()); } }, - [updateSearch, id, filterManager, queries] + [updateSearch, id, filterManager, queries, setTablesActivePageToZero] ); const onSaved = useCallback( @@ -209,6 +222,7 @@ export const SearchBarComponent = memo( isQuickSelection, updateTime: false, filterManager, + setTablesActivePageToZero, }; if (savedQueryUpdated.attributes.timefilter) { @@ -226,7 +240,7 @@ export const SearchBarComponent = memo( updateSearch(updateSearchBar); }, - [id, toStr, end, fromStr, start, filterManager, updateSearch] + [id, toStr, end, fromStr, start, filterManager, updateSearch, setTablesActivePageToZero] ); const onClearSavedQuery = useCallback(() => { @@ -246,9 +260,20 @@ export const SearchBarComponent = memo( resetSavedQuery: true, savedQuery: undefined, filterManager, + setTablesActivePageToZero, }); } - }, [savedQuery, updateSearch, id, toStr, end, fromStr, start, filterManager]); + }, [ + savedQuery, + updateSearch, + id, + toStr, + end, + fromStr, + start, + filterManager, + setTablesActivePageToZero, + ]); const saveAppStateToStorage = useCallback( (filters: Filter[]) => storage.set(APP_STATE_STORAGE_KEY, filters), @@ -273,6 +298,8 @@ export const SearchBarComponent = memo( id, filters: filterManager.getFilters(), }); + + setTablesActivePageToZero(); } }, }) @@ -369,6 +396,7 @@ interface UpdateReduxSearchBar extends OnTimeChangeProps { resetSavedQuery?: boolean; timelineId?: string; updateTime: boolean; + setTablesActivePageToZero: () => void; } export const dispatchUpdateSearch = @@ -385,6 +413,7 @@ export const dispatchUpdateSearch = timelineId, filterManager, updateTime = false, + setTablesActivePageToZero, }: UpdateReduxSearchBar): void => { if (updateTime) { const fromDate = formatDate(start); @@ -446,8 +475,7 @@ export const dispatchUpdateSearch = dispatch(inputsActions.setSavedQuery({ id, savedQuery })); } - dispatch(hostsActions.setHostTablesActivePageToZero()); - dispatch(networkActions.setNetworkTablesActivePageToZero()); + setTablesActivePageToZero(); }; const mapDispatchToProps = (dispatch: Dispatch) => ({ From f8dbb31e4733ff0c111a35a8ef5b53c98ad21ef9 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Wed, 13 Apr 2022 11:48:13 +0200 Subject: [PATCH 005/305] [Lens] Hide disabled toolbar entries (#129994) * hide toolbar entries * remove unused stuff * remove unnecessary test Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../lens/public/pie_visualization/toolbar.tsx | 5 +- .../columns_number_setting.test.tsx | 19 -- .../columns_number_setting.tsx | 47 ++-- .../legend_location_settings.test.tsx | 16 +- .../legend_location_settings.tsx | 126 ++++------ .../legend_settings_popover.test.tsx | 12 +- .../legend_settings_popover.tsx | 215 +++++++----------- .../legend_size_settings.tsx | 34 +-- .../axis_settings_popover.test.tsx | 6 +- .../xy_config_panel/axis_settings_popover.tsx | 31 +-- .../translations/translations/fr-FR.json | 3 - .../translations/translations/ja-JP.json | 4 - .../translations/translations/zh-CN.json | 4 - 13 files changed, 175 insertions(+), 347 deletions(-) delete mode 100644 x-pack/plugins/lens/public/shared_components/columns_number_setting.test.tsx diff --git a/x-pack/plugins/lens/public/pie_visualization/toolbar.tsx b/x-pack/plugins/lens/public/pie_visualization/toolbar.tsx index dac889fc99df6..766edf6b0dbc0 100644 --- a/x-pack/plugins/lens/public/pie_visualization/toolbar.tsx +++ b/x-pack/plugins/lens/public/pie_visualization/toolbar.tsx @@ -183,7 +183,7 @@ export function PieToolbar(props: VisualizationToolbarProps ) : null} - {numberOptions.length ? ( + {numberOptions.length && layer.categoryDisplay !== 'hide' ? ( diff --git a/x-pack/plugins/lens/public/shared_components/columns_number_setting.test.tsx b/x-pack/plugins/lens/public/shared_components/columns_number_setting.test.tsx deleted file mode 100644 index 50f2dc2fb93dc..0000000000000 --- a/x-pack/plugins/lens/public/shared_components/columns_number_setting.test.tsx +++ /dev/null @@ -1,19 +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 - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { mountWithIntl as mount } from '@kbn/test-jest-helpers'; -import { ColumnsNumberSetting } from './columns_number_setting'; - -describe('Columns Number Setting', () => { - it('should have default the columns input to 1 when no value is given', () => { - const component = mount(); - expect( - component.find('[data-test-subj="lens-legend-location-columns-input"]').at(0).prop('value') - ).toEqual(1); - }); -}); diff --git a/x-pack/plugins/lens/public/shared_components/columns_number_setting.tsx b/x-pack/plugins/lens/public/shared_components/columns_number_setting.tsx index 6a1d1ec6d0306..3cfd03d53c51d 100644 --- a/x-pack/plugins/lens/public/shared_components/columns_number_setting.tsx +++ b/x-pack/plugins/lens/public/shared_components/columns_number_setting.tsx @@ -9,7 +9,6 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiFieldNumber, EuiFormRow } from '@elastic/eui'; import { useDebouncedValue } from './debounced_value'; -import { TooltipWrapper } from './tooltip_wrapper'; export const DEFAULT_FLOATING_COLUMNS = 1; @@ -22,10 +21,6 @@ interface ColumnsNumberSettingProps { * Callback on horizontal alignment option change */ onFloatingColumnsChange?: (value: number) => void; - /** - * Flag to disable the location settings - */ - isDisabled: boolean; /** * Indicates if legend is located outside */ @@ -35,7 +30,6 @@ interface ColumnsNumberSettingProps { export const ColumnsNumberSetting = ({ floatingColumns, onFloatingColumnsChange = () => {}, - isDisabled, isLegendOutside, }: ColumnsNumberSettingProps) => { const { inputValue, handleInputChange } = useDebouncedValue({ @@ -43,6 +37,8 @@ export const ColumnsNumberSetting = ({ onChange: onFloatingColumnsChange, }); + if (isLegendOutside) return null; + return ( - - { - handleInputChange(Number(e.target.value)); - }} - step={1} - /> - + { + handleInputChange(Number(e.target.value)); + }} + step={1} + /> ); }; diff --git a/x-pack/plugins/lens/public/shared_components/legend_location_settings.test.tsx b/x-pack/plugins/lens/public/shared_components/legend_location_settings.test.tsx index f4b5ced490663..d318a19014928 100644 --- a/x-pack/plugins/lens/public/shared_components/legend_location_settings.test.tsx +++ b/x-pack/plugins/lens/public/shared_components/legend_location_settings.test.tsx @@ -32,11 +32,9 @@ describe('Legend Location Settings', () => { expect(props.onPositionChange).toHaveBeenCalled(); }); - it('should disable the position group if isDisabled prop is true', () => { + it('should hide the position group if isDisabled prop is true', () => { const component = shallow(); - expect( - component.find('[data-test-subj="lens-legend-position-btn"]').prop('isDisabled') - ).toEqual(true); + expect(component.exists('[data-test-subj="lens-legend-position-btn"]')).toEqual(false); }); it('should hide the position button group if location inside is given', () => { @@ -104,18 +102,14 @@ describe('Legend Location Settings', () => { expect(newProps.onAlignmentChange).toHaveBeenCalled(); }); - it('should disable the components when is Disabled is true', () => { + it('should hide the components when is Disabled is true', () => { const newProps = { ...props, location: 'inside', isDisabled: true, } as LegendLocationSettingsProps; const component = shallow(); - expect( - component.find('[data-test-subj="lens-legend-location-btn"]').prop('isDisabled') - ).toEqual(true); - expect( - component.find('[data-test-subj="lens-legend-inside-alignment-btn"]').prop('isDisabled') - ).toEqual(true); + expect(component.exists('[data-test-subj="lens-legend-location-btn"]')).toEqual(false); + expect(component.exists('[data-test-subj="lens-legend-inside-alignment-btn"]')).toEqual(false); }); }); diff --git a/x-pack/plugins/lens/public/shared_components/legend_location_settings.tsx b/x-pack/plugins/lens/public/shared_components/legend_location_settings.tsx index f3ac54ab00a05..7372b727268bd 100644 --- a/x-pack/plugins/lens/public/shared_components/legend_location_settings.tsx +++ b/x-pack/plugins/lens/public/shared_components/legend_location_settings.tsx @@ -9,7 +9,6 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiFormRow, EuiButtonGroup } from '@elastic/eui'; import { VerticalAlignment, HorizontalAlignment, Position } from '@elastic/charts'; -import { TooltipWrapper } from './tooltip_wrapper'; export interface LegendLocationSettingsProps { /** @@ -151,6 +150,7 @@ export const LegendLocationSettings: React.FunctionComponent {location && ( @@ -160,32 +160,22 @@ export const LegendLocationSettings: React.FunctionComponent - - value === location)!.id} - onChange={(optionId) => { - const newLocation = locationOptions.find(({ id }) => id === optionId)!.value; - onLocationChange(newLocation); - }} - /> - + data-test-subj="lens-legend-location-btn" + name="legendLocation" + buttonSize="compressed" + options={locationOptions} + isDisabled={isDisabled} + idSelected={locationOptions.find(({ value }) => value === location)!.id} + onChange={(optionId) => { + const newLocation = locationOptions.find(({ id }) => id === optionId)!.value; + onLocationChange(newLocation); + }} + /> )} <> {(!location || location === 'outside') && ( - - - + isDisabled={isDisabled} + data-test-subj="lens-legend-position-btn" + name="legendPosition" + buttonSize="compressed" + options={toggleButtonsIcons} + idSelected={position || Position.Right} + onChange={onPositionChange} + isIconOnly + /> )} {location === 'inside' && ( - - value === alignment)!.id - } - onChange={(optionId) => { - const newAlignment = locationAlignmentButtonsIcons.find( - ({ id }) => id === optionId - )!.value; - onAlignmentChange(newAlignment); - }} - isIconOnly - /> - + type="single" + data-test-subj="lens-legend-inside-alignment-btn" + name="legendInsideAlignment" + buttonSize="compressed" + isDisabled={isDisabled} + options={locationAlignmentButtonsIcons} + idSelected={ + locationAlignmentButtonsIcons.find(({ value }) => value === alignment)!.id + } + onChange={(optionId) => { + const newAlignment = locationAlignmentButtonsIcons.find( + ({ id }) => id === optionId + )!.value; + onAlignmentChange(newAlignment); + }} + isIconOnly + /> )} diff --git a/x-pack/plugins/lens/public/shared_components/legend_settings_popover.test.tsx b/x-pack/plugins/lens/public/shared_components/legend_settings_popover.test.tsx index e76426515548f..9bf9a1885e6ac 100644 --- a/x-pack/plugins/lens/public/shared_components/legend_settings_popover.test.tsx +++ b/x-pack/plugins/lens/public/shared_components/legend_settings_popover.test.tsx @@ -56,7 +56,7 @@ describe('Legend Settings', () => { }); it('should have default the max lines input to 1 when no value is given', () => { - const component = shallow(); + const component = shallow(); expect(component.find(MaxLinesInput).prop('value')).toEqual(1); }); @@ -74,9 +74,9 @@ describe('Legend Settings', () => { ).toEqual(false); }); - it('should have disabled the max lines input when truncate is set to false', () => { + it('should hide the max lines input when truncate is set to false', () => { const component = shallow(); - expect(component.find(MaxLinesInput).prop('isDisabled')).toEqual(true); + expect(component.exists(MaxLinesInput)).toEqual(false); }); it('should have called the onTruncateLegendChange function on truncate switch change', () => { @@ -115,12 +115,10 @@ describe('Legend Settings', () => { expect(nestedProps.onNestedLegendChange).toHaveBeenCalled(); }); - it('should disable switch group on hide mode', () => { + it('should hide switch group on hide mode', () => { const component = shallow( ); - expect(component.find('[data-test-subj="lens-legend-nested-switch"]').prop('disabled')).toEqual( - true - ); + expect(component.exists('[data-test-subj="lens-legend-nested-switch"]')).toEqual(false); }); }); diff --git a/x-pack/plugins/lens/public/shared_components/legend_settings_popover.tsx b/x-pack/plugins/lens/public/shared_components/legend_settings_popover.tsx index 481c38815d43d..b7bc79c1446e9 100644 --- a/x-pack/plugins/lens/public/shared_components/legend_settings_popover.tsx +++ b/x-pack/plugins/lens/public/shared_components/legend_settings_popover.tsx @@ -20,7 +20,6 @@ import { LegendLocationSettings } from './legend_location_settings'; import { ColumnsNumberSetting } from './columns_number_setting'; import { LegendSizeSettings } from './legend_size_settings'; import { ToolbarButtonProps } from '../../../../../src/plugins/kibana_react/public'; -import { TooltipWrapper } from './tooltip_wrapper'; import { useDebouncedValue } from './debounced_value'; export interface LegendSettingsPopoverProps { @@ -137,11 +136,9 @@ const MIN_TRUNCATE_LINES = 1; export const MaxLinesInput = ({ value, setValue, - isDisabled, }: { value: number; setValue: (value: number) => void; - isDisabled: boolean; }) => { const { inputValue, handleInputChange } = useDebouncedValue({ value, onChange: setValue }); return ( @@ -152,7 +149,6 @@ export const MaxLinesInput = ({ max={MAX_TRUNCATE_LINES} step={1} compressed - disabled={isDisabled} onChange={(e) => { const val = Number(e.target.value); // we want to automatically change the values to the limits @@ -218,146 +214,101 @@ export const LegendSettingsPopover: React.FunctionComponent - - - {location && ( - - )} - - - + - - - - - - - - {renderNestedLegendSwitch && ( - - + )} + - - - )} - {renderValueInLegendSwitch && ( - - - + {shouldTruncate && ( + + + + )} + {renderNestedLegendSwitch && ( + + + + )} + {renderValueInLegendSwitch && ( + - - + > + + + )} + )} ); diff --git a/x-pack/plugins/lens/public/shared_components/legend_size_settings.tsx b/x-pack/plugins/lens/public/shared_components/legend_size_settings.tsx index a596bb7189571..53da283de0b68 100644 --- a/x-pack/plugins/lens/public/shared_components/legend_size_settings.tsx +++ b/x-pack/plugins/lens/public/shared_components/legend_size_settings.tsx @@ -8,7 +8,6 @@ import React, { useEffect, useCallback } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiFormRow, EuiSuperSelect } from '@elastic/eui'; -import { TooltipWrapper } from './tooltip_wrapper'; export enum LegendSizes { AUTO = '0', @@ -22,7 +21,6 @@ interface LegendSizeSettingsProps { legendSize: number | undefined; onLegendSizeChange: (size?: number) => void; isVerticalLegend: boolean; - isDisabled: boolean; } const legendSizeOptions: Array<{ value: LegendSizes; inputDisplay: string }> = [ @@ -65,7 +63,6 @@ export const LegendSizeSettings = ({ legendSize, onLegendSizeChange, isVerticalLegend, - isDisabled, }: LegendSizeSettingsProps) => { useEffect(() => { if (legendSize && !isVerticalLegend) { @@ -78,6 +75,8 @@ export const LegendSizeSettings = ({ [onLegendSizeChange] ); + if (!isVerticalLegend) return null; + return ( - - - + ); }; diff --git a/x-pack/plugins/lens/public/xy_visualization/xy_config_panel/axis_settings_popover.test.tsx b/x-pack/plugins/lens/public/xy_visualization/xy_config_panel/axis_settings_popover.test.tsx index 87ccf41e91143..b5c45cd517432 100644 --- a/x-pack/plugins/lens/public/xy_visualization/xy_config_panel/axis_settings_popover.test.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/xy_config_panel/axis_settings_popover.test.tsx @@ -89,11 +89,9 @@ describe('Axes Settings', () => { expect(props.setOrientation).toHaveBeenCalled(); }); - it('should disable the orientation group if the tickLabels are set to not visible', () => { + it('should hide the orientation group if the tickLabels are set to not visible', () => { const component = shallow(); - expect( - component.find('[data-test-subj="lnsXY_axisOrientation_groups"]').prop('isDisabled') - ).toEqual(true); + expect(component.exists('[data-test-subj="lnsXY_axisOrientation_groups"]')).toEqual(false); }); it('hides the endzone visibility flag if no setter is passed in', () => { diff --git a/x-pack/plugins/lens/public/xy_visualization/xy_config_panel/axis_settings_popover.tsx b/x-pack/plugins/lens/public/xy_visualization/xy_config_panel/axis_settings_popover.tsx index 340a9211fcdee..e9a970cb82987 100644 --- a/x-pack/plugins/lens/public/xy_visualization/xy_config_panel/axis_settings_popover.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/xy_config_panel/axis_settings_popover.tsx @@ -22,12 +22,7 @@ import { AxisExtentConfig, } from '../../../../../../src/plugins/chart_expressions/expression_xy/common'; import { XYLayerConfig } from '../types'; -import { - ToolbarPopover, - useDebouncedValue, - TooltipWrapper, - AxisTitleSettings, -} from '../../shared_components'; +import { ToolbarPopover, useDebouncedValue, AxisTitleSettings } from '../../shared_components'; import { isHorizontalChart } from '../state_helpers'; import { EuiIconAxisBottom } from '../../assets/axis_bottom'; import { EuiIconAxisLeft } from '../../assets/axis_left'; @@ -312,20 +307,13 @@ export const AxisSettingsPopover: React.FunctionComponent - - value === orientation)!.id} @@ -345,8 +332,8 @@ export const AxisSettingsPopover: React.FunctionComponent - - + + )} {setEndzoneVisibility && ( Date: Wed, 13 Apr 2022 12:52:45 +0200 Subject: [PATCH 006/305] [Lens] annotations little fixes (#129700) * correct the layer type menu * remove not used property from framePublicApi * single annotations should be placed in the exact place * add DatasourceLayers type * add dateRange to FramePublicAPI * width fix Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../__snapshots__/xy_chart.test.tsx.snap | 4 +- .../public/components/annotations.tsx | 11 ++- .../datatable_visualization/visualization.tsx | 4 +- .../editor_frame/config_panel/add_layer.tsx | 4 +- .../config_panel/config_panel.test.tsx | 1 + .../config_panel/layer_panel.scss | 2 +- .../editor_frame/expression_helpers.ts | 4 +- .../editor_frame/state_helpers.ts | 4 +- .../editor_frame/suggestion_helpers.ts | 4 +- .../editor_frame/suggestion_panel.tsx | 8 +- .../visualization.test.ts | 6 +- .../metric_visualization/visualization.tsx | 4 +- x-pack/plugins/lens/public/mocks/index.ts | 1 + .../public/pie_visualization/to_expression.ts | 12 +-- .../datasource_default_values.ts | 4 +- .../public/state_management/lens_slice.ts | 2 + .../lens/public/state_management/selectors.ts | 4 +- x-pack/plugins/lens/public/types.ts | 15 ++-- .../gauge/visualization.test.ts | 4 +- .../visualizations/gauge/visualization.tsx | 4 +- .../annotations/helpers.test.ts | 75 ++++++++++++++++--- .../xy_visualization/annotations/helpers.tsx | 23 +++--- .../reference_line_helpers.tsx | 10 +-- .../public/xy_visualization/to_expression.ts | 8 +- .../xy_visualization/visualization.test.ts | 23 +++--- .../public/xy_visualization/visualization.tsx | 2 +- .../visualization_helpers.tsx | 9 +-- 27 files changed, 161 insertions(+), 91 deletions(-) diff --git a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap index 828a62c85cce3..1725cea040f56 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap +++ b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap @@ -5,7 +5,7 @@ exports[`XYChart component annotations should render basic annotation 1`] = ` dataValues={ Array [ Object { - "dataValue": 1647591917125, + "dataValue": 1647591917140, "details": "Annotation", "header": "2022-03-18T08:25:17.140Z", }, @@ -169,7 +169,7 @@ exports[`XYChart component annotations should render simplified annotation when dataValues={ Array [ Object { - "dataValue": 1647591917125, + "dataValue": 1647591917140, "details": "Annotation", "header": "2022-03-18T08:25:17.140Z", }, diff --git a/src/plugins/chart_expressions/expression_xy/public/components/annotations.tsx b/src/plugins/chart_expressions/expression_xy/public/components/annotations.tsx index e8b99a36664df..04c9e7108ab44 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/annotations.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/components/annotations.tsx @@ -170,7 +170,12 @@ export const Annotations = ({ const header = formatter?.convert(isGrouped ? roundedTimestamp : exactTimestamp) || moment(isGrouped ? roundedTimestamp : exactTimestamp).toISOString(); - const strokeWidth = annotation.lineWidth || 1; + const strokeWidth = hide ? 1 : annotation.lineWidth || 1; + const dataValue = isGrouped + ? moment( + isBarChart && minInterval ? roundedTimestamp + minInterval / 2 : roundedTimestamp + ).valueOf() + : moment(exactTimestamp).valueOf(); return ( , + datasourceLayers: DatasourceLayers, layerId: string ) { const datasource = datasourceLayers[state.layerId]; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/add_layer.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/add_layer.tsx index dbbc6932220dc..c38a9a3493708 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/add_layer.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/add_layer.tsx @@ -64,7 +64,6 @@ export function AddLayerButton({ position="bottom" > { return { toolTipContent, @@ -143,7 +142,6 @@ export function AddLayerButton({ {label} ), className: 'lnsLayerAddButton', - width: 300, icon: icon && , ['data-test-subj']: `lnsLayerAddButton-${type}`, onClick: () => { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx index b234b18f5262f..d48c145149aaa 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx @@ -422,6 +422,7 @@ describe('ConfigPanel', () => { datasourceLayers: { a: expect.anything(), }, + dateRange: expect.anything(), }, groupId: 'a', layerId: 'newId', diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss index 343cd746ba2ac..69e2ee99460bc 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss @@ -148,4 +148,4 @@ @include passDownFocusRing('.lnsLayerPanel__triggerTextLabel'); background-color: transparent; } -} +} \ No newline at end of file diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/expression_helpers.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/expression_helpers.ts index 600341931f575..cecf75cd58676 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/expression_helpers.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/expression_helpers.ts @@ -7,7 +7,7 @@ import { Ast, AstFunction, fromExpression } from '@kbn/interpreter'; import { DatasourceStates } from '../../state_management'; -import { Visualization, DatasourcePublicAPI, DatasourceMap } from '../../types'; +import { Visualization, DatasourceMap, DatasourceLayers } from '../../types'; export function prependDatasourceExpression( visualizationExpression: Ast | string | null, @@ -74,7 +74,7 @@ export function buildExpression({ visualizationState: unknown; datasourceMap: DatasourceMap; datasourceStates: DatasourceStates; - datasourceLayers: Record; + datasourceLayers: DatasourceLayers; }): Ast | null { if (visualization === null) { return null; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts index 95626b7657e59..4b857a71be961 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts @@ -10,8 +10,8 @@ import { Ast } from '@kbn/interpreter'; import memoizeOne from 'memoize-one'; import { Datasource, + DatasourceLayers, DatasourceMap, - DatasourcePublicAPI, FramePublicAPI, InitializationOptions, Visualization, @@ -62,7 +62,7 @@ export const getDatasourceLayers = memoizeOne(function getDatasourceLayers( datasourceStates: DatasourceStates, datasourceMap: DatasourceMap ) { - const datasourceLayers: Record = {}; + const datasourceLayers: DatasourceLayers = {}; Object.keys(datasourceMap) .filter((id) => datasourceStates[id] && !datasourceStates[id].isLoading) .forEach((id) => { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts index f24158d2db501..cc1868974bbf2 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts @@ -13,11 +13,11 @@ import { Datasource, TableSuggestion, DatasourceSuggestion, - DatasourcePublicAPI, DatasourceMap, VisualizationMap, VisualizeEditorContext, Suggestion, + DatasourceLayers, } from '../../types'; import { DragDropIdentifier } from '../../drag_drop'; import { LayerType, layerTypes } from '../../../common'; @@ -261,7 +261,7 @@ export function switchToSuggestion( } export function getTopSuggestionForField( - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, visualization: VisualizationState, datasourceStates: DatasourceStates, visualizationMap: Record>, diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx index 69de606a77ca7..436ab5603a56e 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx @@ -30,9 +30,9 @@ import { Datasource, Visualization, FramePublicAPI, - DatasourcePublicAPI, DatasourceMap, VisualizationMap, + DatasourceLayers, } from '../../types'; import { getSuggestions, switchToSuggestion } from './suggestion_helpers'; import { @@ -491,7 +491,9 @@ function getPreviewExpression( return null; } - const suggestionFrameApi: FramePublicAPI = { datasourceLayers: { ...frame.datasourceLayers } }; + const suggestionFrameApi: Pick = { + datasourceLayers: { ...frame.datasourceLayers }, + }; // use current frame api and patch apis for changed datasource layers if ( @@ -501,7 +503,7 @@ function getPreviewExpression( ) { const datasource = datasources[visualizableState.datasourceId]; const datasourceState = visualizableState.datasourceState; - const updatedLayerApis: Record = pick( + const updatedLayerApis: DatasourceLayers = pick( frame.datasourceLayers, visualizableState.keptLayerIds ); diff --git a/x-pack/plugins/lens/public/heatmap_visualization/visualization.test.ts b/x-pack/plugins/lens/public/heatmap_visualization/visualization.test.ts index f181167cd8d9c..a16aa69f627f2 100644 --- a/x-pack/plugins/lens/public/heatmap_visualization/visualization.test.ts +++ b/x-pack/plugins/lens/public/heatmap_visualization/visualization.test.ts @@ -20,7 +20,7 @@ import { } from './constants'; import { Position } from '@elastic/charts'; import type { HeatmapVisualizationState } from './types'; -import type { DatasourcePublicAPI, OperationDescriptor } from '../types'; +import type { DatasourceLayers, OperationDescriptor } from '../types'; import { chartPluginMock } from 'src/plugins/charts/public/mocks'; import { layerTypes } from '../../common'; import { themeServiceMock } from '../../../../../src/core/public/mocks'; @@ -355,7 +355,7 @@ describe('heatmap', () => { }); describe('#toExpression', () => { - let datasourceLayers: Record; + let datasourceLayers: DatasourceLayers; beforeEach(() => { const mockDatasource = createMockDatasource('testDatasource'); @@ -476,7 +476,7 @@ describe('heatmap', () => { }); describe('#toPreviewExpression', () => { - let datasourceLayers: Record; + let datasourceLayers: DatasourceLayers; beforeEach(() => { const mockDatasource = createMockDatasource('testDatasource'); diff --git a/x-pack/plugins/lens/public/metric_visualization/visualization.tsx b/x-pack/plugins/lens/public/metric_visualization/visualization.tsx index 87414e20f5abd..c3bb01a96b58a 100644 --- a/x-pack/plugins/lens/public/metric_visualization/visualization.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/visualization.tsx @@ -17,7 +17,7 @@ import { KibanaThemeProvider } from '../../../../../src/plugins/kibana_react/pub import { ColorMode, CustomPaletteState } from '../../../../../src/plugins/charts/common'; import { getSuggestions } from './metric_suggestions'; import { LensIconChartMetric } from '../assets/chart_metric'; -import { Visualization, OperationMetadata, DatasourcePublicAPI } from '../types'; +import { Visualization, OperationMetadata, DatasourceLayers } from '../types'; import type { MetricState } from '../../common/types'; import { layerTypes } from '../../common'; import { MetricDimensionEditor } from './dimension_editor'; @@ -45,7 +45,7 @@ const getFontSizeAndUnit = (fontSize: string) => { const toExpression = ( paletteService: PaletteRegistry, state: MetricState, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, attributes?: Partial> ): Ast | null => { if (!state.accessor) { diff --git a/x-pack/plugins/lens/public/mocks/index.ts b/x-pack/plugins/lens/public/mocks/index.ts index 4c97fea960eac..ab6f2066e8804 100644 --- a/x-pack/plugins/lens/public/mocks/index.ts +++ b/x-pack/plugins/lens/public/mocks/index.ts @@ -31,6 +31,7 @@ export type FrameMock = jest.Mocked; export const createMockFramePublicAPI = (): FrameMock => ({ datasourceLayers: {}, + dateRange: { fromDate: 'now-7d', toDate: 'now' }, }); export type FrameDatasourceMock = jest.Mocked; diff --git a/x-pack/plugins/lens/public/pie_visualization/to_expression.ts b/x-pack/plugins/lens/public/pie_visualization/to_expression.ts index bacbc8f0720a3..ea5cb560693c4 100644 --- a/x-pack/plugins/lens/public/pie_visualization/to_expression.ts +++ b/x-pack/plugins/lens/public/pie_visualization/to_expression.ts @@ -13,7 +13,7 @@ import { buildExpression, buildExpressionFunction, } from '../../../../../src/plugins/expressions/public'; -import type { Operation, DatasourcePublicAPI } from '../types'; +import type { Operation, DatasourcePublicAPI, DatasourceLayers } from '../types'; import { DEFAULT_PERCENT_DECIMALS } from './constants'; import { shouldShowValuesInLegend } from './render_helpers'; import { @@ -43,7 +43,7 @@ type GenerateExpressionAstFunction = ( attributes: Attributes, operations: OperationColumnId[], layer: PieLayerState, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, paletteService: PaletteRegistry ) => Ast | null; @@ -52,7 +52,7 @@ type GenerateExpressionAstArguments = ( attributes: Attributes, operations: OperationColumnId[], layer: PieLayerState, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, paletteService: PaletteRegistry ) => Ast['chain'][number]['arguments']; @@ -246,7 +246,7 @@ const generateExprAst: GenerateExpressionAstFunction = (state, ...restArgs) => function expressionHelper( state: PieVisualizationState, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, paletteService: PaletteRegistry, attributes: Attributes = { isPreview: false } ): Ast | null { @@ -270,7 +270,7 @@ function expressionHelper( export function toExpression( state: PieVisualizationState, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, paletteService: PaletteRegistry, attributes: Partial<{ title: string; description: string }> = {} ) { @@ -282,7 +282,7 @@ export function toExpression( export function toPreviewExpression( state: PieVisualizationState, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, paletteService: PaletteRegistry ) { return expressionHelper(state, datasourceLayers, paletteService, { isPreview: true }); diff --git a/x-pack/plugins/lens/public/shared_components/datasource_default_values.ts b/x-pack/plugins/lens/public/shared_components/datasource_default_values.ts index 250c5614fe093..a0b6f767b287b 100644 --- a/x-pack/plugins/lens/public/shared_components/datasource_default_values.ts +++ b/x-pack/plugins/lens/public/shared_components/datasource_default_values.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { DatasourcePublicAPI } from '../types'; +import { DatasourceLayers } from '../types'; type VisState = { layers: Array<{ layerId: string }> } | { layerId: string }; @@ -28,7 +28,7 @@ function mergeValues(memo: MappedVisualValue, values: Partial export function getDefaultVisualValuesForLayer( state: VisState | undefined, - datasourceLayers: Record + datasourceLayers: DatasourceLayers ): MappedVisualValue { const defaultValues = { truncateText: true }; if (!state) { diff --git a/x-pack/plugins/lens/public/state_management/lens_slice.ts b/x-pack/plugins/lens/public/state_management/lens_slice.ts index 959db8ca006fe..61c99ef732233 100644 --- a/x-pack/plugins/lens/public/state_management/lens_slice.ts +++ b/x-pack/plugins/lens/public/state_management/lens_slice.ts @@ -632,6 +632,7 @@ export const makeLensReducer = (storeDeps: LensStoreDeps) => { ? (current(state.activeData) as TableInspectorAdapter) : undefined, datasourceLayers: getDatasourceLayers(state.datasourceStates, datasourceMap), + dateRange: current(state.resolvedDateRange), }; const activeDatasource = datasourceMap[state.activeDatasourceId]; @@ -690,6 +691,7 @@ export const makeLensReducer = (storeDeps: LensStoreDeps) => { ? (current(state.activeData) as TableInspectorAdapter) : undefined, datasourceLayers: getDatasourceLayers(state.datasourceStates, datasourceMap), + dateRange: current(state.resolvedDateRange), }, activeVisualization, activeDatasource, diff --git a/x-pack/plugins/lens/public/state_management/selectors.ts b/x-pack/plugins/lens/public/state_management/selectors.ts index 351496ca3e37b..47ce9a5b7349a 100644 --- a/x-pack/plugins/lens/public/state_management/selectors.ts +++ b/x-pack/plugins/lens/public/state_management/selectors.ts @@ -162,11 +162,13 @@ export const selectFramePublicAPI = createSelector( selectCurrentDatasourceStates, selectActiveData, selectInjectedDependencies as SelectInjectedDependenciesFunction, + selectResolvedDateRange, ], - (datasourceStates, activeData, datasourceMap) => { + (datasourceStates, activeData, datasourceMap, dateRange) => { return { datasourceLayers: getDatasourceLayers(datasourceStates, datasourceMap), activeData, + dateRange, }; } ); diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index 2143cb1704bf5..d1a12daee1bfc 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -591,7 +591,7 @@ interface VisualizationDimensionChangeProps { layerId: string; columnId: string; prevState: T; - frame: Pick; + frame: FramePublicAPI; } export interface Suggestion { visualizationId: string; @@ -683,9 +683,11 @@ export interface VisualizationSuggestion { previewIcon: IconType; } +export type DatasourceLayers = Record; + export interface FramePublicAPI { - datasourceLayers: Record; - appliedDatasourceLayers?: Record; // this is only set when auto-apply is turned off + datasourceLayers: DatasourceLayers; + dateRange: DateRange; /** * Data of the chart currently rendered in the preview. * This data might be not available (e.g. if the chart can't be rendered) or outdated and belonging to another chart. @@ -694,7 +696,6 @@ export interface FramePublicAPI { activeData?: Record; } export interface FrameDatasourceAPI extends FramePublicAPI { - dateRange: DateRange; query: Query; filters: Filter[]; } @@ -884,7 +885,7 @@ export interface Visualization { toExpression: ( state: T, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, attributes?: Partial<{ title: string; description: string }> ) => ExpressionAstExpression | string | null; /** @@ -893,7 +894,7 @@ export interface Visualization { */ toPreviewExpression?: ( state: T, - datasourceLayers: Record + datasourceLayers: DatasourceLayers ) => ExpressionAstExpression | string | null; /** * The frame will call this function on all visualizations at few stages (pre-build/build error) in order @@ -901,7 +902,7 @@ export interface Visualization { */ getErrorMessages: ( state: T, - datasourceLayers?: Record + datasourceLayers?: DatasourceLayers ) => | Array<{ shortMessage: string; diff --git a/x-pack/plugins/lens/public/visualizations/gauge/visualization.test.ts b/x-pack/plugins/lens/public/visualizations/gauge/visualization.test.ts index 58637b95fce67..6e658cd2729bb 100644 --- a/x-pack/plugins/lens/public/visualizations/gauge/visualization.test.ts +++ b/x-pack/plugins/lens/public/visualizations/gauge/visualization.test.ts @@ -9,7 +9,7 @@ import type { PaletteOutput, CustomPaletteParams } from '@kbn/coloring'; import { getGaugeVisualization, isNumericDynamicMetric, isNumericMetric } from './visualization'; import { createMockDatasource, createMockFramePublicAPI } from '../../mocks'; import { GROUP_ID } from './constants'; -import type { DatasourcePublicAPI, OperationDescriptor } from '../../types'; +import type { DatasourceLayers, OperationDescriptor } from '../../types'; import { chartPluginMock } from 'src/plugins/charts/public/mocks'; import { layerTypes } from '../../../common'; import type { GaugeVisualizationState } from './constants'; @@ -455,7 +455,7 @@ describe('gauge', () => { }); describe('#toExpression', () => { - let datasourceLayers: Record; + let datasourceLayers: DatasourceLayers; beforeEach(() => { const mockDatasource = createMockDatasource('testDatasource'); mockDatasource.publicAPIMock.getOperationForColumnId.mockReturnValue({ diff --git a/x-pack/plugins/lens/public/visualizations/gauge/visualization.tsx b/x-pack/plugins/lens/public/visualizations/gauge/visualization.tsx index 72d0db1c851b1..fff068937b470 100644 --- a/x-pack/plugins/lens/public/visualizations/gauge/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/gauge/visualization.tsx @@ -25,7 +25,7 @@ import { VerticalBulletIcon, HorizontalBulletIcon, } from '../../../../../../src/plugins/chart_expressions/expression_gauge/public'; -import type { DatasourcePublicAPI, OperationMetadata, Visualization } from '../../types'; +import type { DatasourceLayers, OperationMetadata, Visualization } from '../../types'; import { getSuggestions } from './suggestions'; import { GROUP_ID, @@ -115,7 +115,7 @@ const checkInvalidConfiguration = (row?: DatatableRow, state?: GaugeVisualizatio const toExpression = ( paletteService: PaletteRegistry, state: GaugeVisualizationState, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, attributes?: Partial> ): Ast | null => { const datasource = datasourceLayers[state.layerId]; diff --git a/x-pack/plugins/lens/public/xy_visualization/annotations/helpers.test.ts b/x-pack/plugins/lens/public/xy_visualization/annotations/helpers.test.ts index fbf13db7fa7a5..1e02f929e90ce 100644 --- a/x-pack/plugins/lens/public/xy_visualization/annotations/helpers.test.ts +++ b/x-pack/plugins/lens/public/xy_visualization/annotations/helpers.test.ts @@ -8,13 +8,17 @@ import { FramePublicAPI } from '../../types'; import { getStaticDate } from './helpers'; +const frame = { + datasourceLayers: {}, + dateRange: { fromDate: '2022-02-01T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, +}; + describe('annotations helpers', () => { describe('getStaticDate', () => { - it('should return `now` value on when nothing is configured', () => { - jest.spyOn(Date, 'now').mockReturnValue(new Date('2022-04-08T11:01:58.135Z').valueOf()); - expect(getStaticDate([], undefined)).toBe('2022-04-08T11:01:58.135Z'); + it('should return the middle of the date range on when nothing is configured', () => { + expect(getStaticDate([], frame)).toBe('2022-03-12T00:00:00.000Z'); }); - it('should return `now` value on when there is no active data', () => { + it('should return the middle of the date range value on when there is no active data', () => { expect( getStaticDate( [ @@ -26,9 +30,9 @@ describe('annotations helpers', () => { xAccessor: 'a', }, ], - undefined + frame ) - ).toBe('2022-04-08T11:01:58.135Z'); + ).toBe('2022-03-12T00:00:00.000Z'); }); it('should return timestamp value for single active data point', () => { @@ -66,11 +70,57 @@ describe('annotations helpers', () => { xAccessor: 'a', }, ], - activeData as FramePublicAPI['activeData'] + { + ...frame, + activeData: activeData as FramePublicAPI['activeData'], + } ) ).toBe('2022-02-27T23:00:00.000Z'); }); + it('should return the middle of the date range value on when there the active data lies outside of the timerange (auto apply off case)', () => { + const activeData = { + layerId: { + type: 'datatable', + rows: [ + { + a: 1642673600000, // smaller than dateRange.fromDate + b: 1050, + }, + ], + columns: [ + { + id: 'a', + name: 'order_date per week', + meta: { type: 'date' }, + }, + { + id: 'b', + name: 'Count of records', + meta: { type: 'number', params: { id: 'number' } }, + }, + ], + }, + }; + expect( + getStaticDate( + [ + { + layerId: 'layerId', + accessors: ['b'], + seriesType: 'bar_stacked', + layerType: 'data', + xAccessor: 'a', + }, + ], + { + ...frame, + activeData: activeData as FramePublicAPI['activeData'], + } + ) + ).toBe('2022-03-12T00:00:00.000Z'); + }); + it('should correctly calculate middle value for active data', () => { const activeData = { layerId: { @@ -118,7 +168,10 @@ describe('annotations helpers', () => { xAccessor: 'a', }, ], - activeData as FramePublicAPI['activeData'] + { + ...frame, + activeData: activeData as FramePublicAPI['activeData'], + } ) ).toBe('2022-03-26T05:00:00.000Z'); }); @@ -202,7 +255,11 @@ describe('annotations helpers', () => { xAccessor: 'd', }, ], - activeData as FramePublicAPI['activeData'] + { + ...frame, + dateRange: { fromDate: '2020-02-01T00:00:00.000Z', toDate: '2022-09-20T00:00:00.000Z' }, + activeData: activeData as FramePublicAPI['activeData'], + } ) ).toBe('2020-08-24T12:06:40.000Z'); }); diff --git a/x-pack/plugins/lens/public/xy_visualization/annotations/helpers.tsx b/x-pack/plugins/lens/public/xy_visualization/annotations/helpers.tsx index c7370c17c6fec..a4f1ecb540c2f 100644 --- a/x-pack/plugins/lens/public/xy_visualization/annotations/helpers.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/annotations/helpers.tsx @@ -29,13 +29,14 @@ export const defaultAnnotationLabel = i18n.translate('xpack.lens.xyChart.default defaultMessage: 'Event', }); -export function getStaticDate( - dataLayers: XYDataLayerConfig[], - activeData: FramePublicAPI['activeData'] -) { - const fallbackValue = moment().toISOString(); - +export function getStaticDate(dataLayers: XYDataLayerConfig[], frame: FramePublicAPI) { const dataLayersId = dataLayers.map(({ layerId }) => layerId); + const { activeData, dateRange } = frame; + + const dateRangeMinValue = moment(dateRange.fromDate).valueOf(); + const dateRangeMaxValue = moment(dateRange.toDate).valueOf(); + const fallbackValue = moment((dateRangeMinValue + dateRangeMaxValue) / 2).toISOString(); + if ( !activeData || Object.entries(activeData) @@ -57,7 +58,11 @@ export function getStaticDate( return lastTimestamp && lastTimestamp > acc ? lastTimestamp : acc; }, MIN_DATE); const middleDate = (minDate + maxDate) / 2; - return moment(middleDate).toISOString(); + + if (dateRangeMinValue < middleDate && dateRangeMaxValue > middleDate) { + return moment(middleDate).toISOString(); + } + return fallbackValue; } export const getAnnotationsSupportedLayer = ( @@ -124,7 +129,7 @@ export const setAnnotationsDimension: Visualization['setDimension'] = ( label: defaultAnnotationLabel, key: { type: 'point_in_time', - timestamp: getStaticDate(getDataLayers(prevState.layers), frame?.activeData), + timestamp: getStaticDate(getDataLayers(prevState.layers), frame), }, icon: 'triangle', ...previousConfig, @@ -167,7 +172,7 @@ export const getAnnotationsConfiguration = ({ layer, }: { state: XYState; - frame: FramePublicAPI; + frame: Pick; layer: XYAnnotationLayerConfig; }) => { const dataLayers = getDataLayers(state.layers); diff --git a/x-pack/plugins/lens/public/xy_visualization/reference_line_helpers.tsx b/x-pack/plugins/lens/public/xy_visualization/reference_line_helpers.tsx index af679d1354792..a53f665f7c577 100644 --- a/x-pack/plugins/lens/public/xy_visualization/reference_line_helpers.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/reference_line_helpers.tsx @@ -13,7 +13,7 @@ import type { YConfig, } from '../../../../../src/plugins/chart_expressions/expression_xy/common'; import { Datatable } from '../../../../../src/plugins/expressions/public'; -import type { DatasourcePublicAPI, FramePublicAPI, Visualization } from '../types'; +import type { DatasourceLayers, FramePublicAPI, Visualization } from '../types'; import { groupAxesByType } from './axes_configuration'; import { isHorizontalChart, isPercentageSeries, isStackedChart } from './state_helpers'; import type { XYState, XYDataLayerConfig, XYReferenceLineLayerConfig } from './types'; @@ -40,7 +40,7 @@ export interface ReferenceLineBase { export function getGroupsToShow( referenceLayers: T[], state: XYState | undefined, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, tables: Record | undefined ): Array { if (!state) { @@ -60,7 +60,7 @@ export function getGroupsToShow( referenceLayers: T[], state: XYState | undefined, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, tables: Record | undefined ): T[] { if (!state) { @@ -75,7 +75,7 @@ export function getGroupsRelatedToData( */ export function getGroupsAvailableInData( dataLayers: XYDataLayerConfig[], - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, tables: Record | undefined ) { const hasNumberHistogram = dataLayers.some( @@ -384,7 +384,7 @@ export const getReferenceConfiguration = ({ sortedAccessors, }: { state: XYState; - frame: FramePublicAPI; + frame: Pick; layer: XYReferenceLineLayerConfig; sortedAccessors: string[]; }) => { diff --git a/x-pack/plugins/lens/public/xy_visualization/to_expression.ts b/x-pack/plugins/lens/public/xy_visualization/to_expression.ts index 7f1bd96b50044..9b54fa0504e11 100644 --- a/x-pack/plugins/lens/public/xy_visualization/to_expression.ts +++ b/x-pack/plugins/lens/public/xy_visualization/to_expression.ts @@ -16,7 +16,7 @@ import { XYReferenceLineLayerConfig, XYAnnotationLayerConfig, } from './types'; -import { OperationMetadata, DatasourcePublicAPI } from '../types'; +import { OperationMetadata, DatasourcePublicAPI, DatasourceLayers } from '../types'; import { getColumnToLabelMap } from './state_helpers'; import type { ValidLayer, @@ -50,7 +50,7 @@ export const getSortedAccessors = ( export const toExpression = ( state: State, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, paletteService: PaletteRegistry, attributes: Partial<{ title: string; description: string }> = {}, eventAnnotationService: EventAnnotationServiceType @@ -107,7 +107,7 @@ const simplifiedLayerExpression = { export function toPreviewExpression( state: State, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, paletteService: PaletteRegistry, eventAnnotationService: EventAnnotationServiceType ) { @@ -158,7 +158,7 @@ export function getScaleType(metadata: OperationMetadata | null, defaultScale: S export const buildExpression = ( state: State, metadata: Record>, - datasourceLayers: Record, + datasourceLayers: DatasourceLayers, paletteService: PaletteRegistry, attributes: Partial<{ title: string; description: string }> = {}, eventAnnotationService: EventAnnotationServiceType diff --git a/x-pack/plugins/lens/public/xy_visualization/visualization.test.ts b/x-pack/plugins/lens/public/xy_visualization/visualization.test.ts index 18cd16c17b365..c2e0f314f8008 100644 --- a/x-pack/plugins/lens/public/xy_visualization/visualization.test.ts +++ b/x-pack/plugins/lens/public/xy_visualization/visualization.test.ts @@ -332,16 +332,18 @@ describe('xy_visualization', () => { { columnId: 'c', fields: [] }, ]); - frame.datasourceLayers = { - first: mockDatasource.publicAPIMock, - }; - - frame.activeData = { - first: { - type: 'datatable', - rows: [], - columns: [], + frame = { + datasourceLayers: { + first: mockDatasource.publicAPIMock, + }, + activeData: { + first: { + type: 'datatable', + rows: [], + columns: [], + }, }, + dateRange: { fromDate: '2022-04-10T00:00:00.000Z', toDate: '2022-04-20T00:00:00.000Z' }, }; }); @@ -436,7 +438,6 @@ describe('xy_visualization', () => { describe('annotations', () => { it('should add a dimension to a annotation layer', () => { - jest.spyOn(Date, 'now').mockReturnValue(new Date('2022-04-18T11:01:58.135Z').valueOf()); expect( xyVisualization.setDimension({ frame, @@ -463,7 +464,7 @@ describe('xy_visualization', () => { icon: 'triangle', id: 'newCol', key: { - timestamp: '2022-04-18T11:01:58.135Z', + timestamp: '2022-04-15T00:00:00.000Z', type: 'point_in_time', }, label: 'Event', diff --git a/x-pack/plugins/lens/public/xy_visualization/visualization.tsx b/x-pack/plugins/lens/public/xy_visualization/visualization.tsx index d8fae2657db23..13825ffc55013 100644 --- a/x-pack/plugins/lens/public/xy_visualization/visualization.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/visualization.tsx @@ -663,7 +663,7 @@ const getMappedAccessors = ({ layer, }: { accessors: string[]; - frame: FramePublicAPI; + frame: Pick; paletteService: PaletteRegistry; fieldFormats: FieldFormatsStart; state: XYState; diff --git a/x-pack/plugins/lens/public/xy_visualization/visualization_helpers.tsx b/x-pack/plugins/lens/public/xy_visualization/visualization_helpers.tsx index d680494ef8315..84e769b5e2623 100644 --- a/x-pack/plugins/lens/public/xy_visualization/visualization_helpers.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/visualization_helpers.tsx @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import { uniq } from 'lodash'; -import { DatasourcePublicAPI, OperationMetadata, VisualizationType } from '../types'; +import { DatasourceLayers, OperationMetadata, VisualizationType } from '../types'; import { State, visualizationTypes, @@ -63,10 +63,7 @@ export function getAxisName( // * 2 or more layers // * at least one with date histogram // * at least one with interval function -export function checkXAccessorCompatibility( - state: XYState, - datasourceLayers: Record -) { +export function checkXAccessorCompatibility(state: XYState, datasourceLayers: DatasourceLayers) { const dataLayers = getDataLayers(state.layers); const errors = []; const hasDateHistogramSet = dataLayers.some( @@ -116,7 +113,7 @@ export function checkXAccessorCompatibility( export function checkScaleOperation( scaleType: 'ordinal' | 'interval' | 'ratio', dataType: 'date' | 'number' | 'string' | undefined, - datasourceLayers: Record + datasourceLayers: DatasourceLayers ) { return (layer: XYDataLayerConfig) => { const datasourceAPI = datasourceLayers[layer.layerId]; From 29b63d333be4532775cddaca398117c9c5caa985 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Wed, 13 Apr 2022 15:54:25 +0500 Subject: [PATCH 007/305] [Step 2] Update @kbn/coloring imports for Canvas, Maps, Observability (#129726) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../canvas_plugin_src/functions/external/saved_lens.ts | 2 +- .../embeddable/embeddable_input_to_expression.ts | 2 +- .../renderers/embeddable/input_type_to_expression/lens.ts | 2 +- x-pack/plugins/canvas/public/functions/index.ts | 2 +- x-pack/plugins/canvas/public/functions/pie.ts | 2 +- x-pack/plugins/canvas/public/functions/plot/index.ts | 2 +- x-pack/plugins/maps/public/kibana_services.ts | 2 +- .../maps/public/lens/choropleth_chart/visualization.tsx | 2 +- .../public/components/shared/exploratory_view/types.ts | 8 ++++---- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts b/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts index 67947691f7757..26f1be5fb97bc 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts +++ b/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts @@ -6,7 +6,7 @@ */ import { ExpressionFunctionDefinition } from 'src/plugins/expressions/common'; -import { PaletteOutput } from 'src/plugins/charts/common'; +import type { PaletteOutput } from '@kbn/coloring'; import { Filter as DataFilter } from '@kbn/es-query'; import { TimeRange } from 'src/plugins/data/common'; import { getQueryFilters } from '../../../common/lib/build_embeddable_filters'; diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression.ts b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression.ts index 80830eac24021..e57f14d3884eb 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression.ts +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PaletteRegistry } from 'src/plugins/charts/public'; +import type { PaletteRegistry } from '@kbn/coloring'; import { EmbeddableTypes, EmbeddableInput } from '../../expression_types'; import { toExpression as mapToExpression } from './input_type_to_expression/map'; import { toExpression as visualizationToExpression } from './input_type_to_expression/visualization'; diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/lens.ts b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/lens.ts index 1d3a5eb9164b7..8f791668d75f9 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/lens.ts +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/lens.ts @@ -6,7 +6,7 @@ */ import { toExpression as toExpressionString } from '@kbn/interpreter'; -import { PaletteRegistry } from 'src/plugins/charts/public'; +import type { PaletteRegistry } from '@kbn/coloring'; import { SavedLensInput } from '../../../functions/external/saved_lens'; export function toExpression(input: SavedLensInput, palettes: PaletteRegistry): string { diff --git a/x-pack/plugins/canvas/public/functions/index.ts b/x-pack/plugins/canvas/public/functions/index.ts index 7a3ca9a2619bb..ad91d6b98fa7f 100644 --- a/x-pack/plugins/canvas/public/functions/index.ts +++ b/x-pack/plugins/canvas/public/functions/index.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PaletteRegistry } from 'src/plugins/charts/public'; +import type { PaletteRegistry } from '@kbn/coloring'; import { asset } from './asset'; import { filtersFunctionFactory } from './filters'; import { timelionFunctionFactory } from './timelion'; diff --git a/x-pack/plugins/canvas/public/functions/pie.ts b/x-pack/plugins/canvas/public/functions/pie.ts index 11e487273b31c..67df9d896350c 100644 --- a/x-pack/plugins/canvas/public/functions/pie.ts +++ b/x-pack/plugins/canvas/public/functions/pie.ts @@ -6,7 +6,7 @@ */ import { get, keyBy, map, groupBy } from 'lodash'; -import { PaletteOutput, PaletteRegistry } from 'src/plugins/charts/public'; +import type { PaletteRegistry, PaletteOutput } from '@kbn/coloring'; import { getLegendConfig } from '../../common/lib/get_legend_config'; import { getFunctionHelp } from '../../i18n'; import { diff --git a/x-pack/plugins/canvas/public/functions/plot/index.ts b/x-pack/plugins/canvas/public/functions/plot/index.ts index 477c704190146..6f46ed0930400 100644 --- a/x-pack/plugins/canvas/public/functions/plot/index.ts +++ b/x-pack/plugins/canvas/public/functions/plot/index.ts @@ -8,7 +8,7 @@ import { set } from '@elastic/safer-lodash-set'; import { groupBy, get, keyBy, map, sortBy } from 'lodash'; import { ExpressionFunctionDefinition, Style } from 'src/plugins/expressions'; -import { PaletteOutput, PaletteRegistry } from 'src/plugins/charts/public'; +import type { PaletteRegistry, PaletteOutput } from '@kbn/coloring'; import { getLegendConfig } from '../../../common/lib/get_legend_config'; import { getFlotAxisConfig } from './get_flot_axis_config'; import { getFontSpec } from './get_font_spec'; diff --git a/x-pack/plugins/maps/public/kibana_services.ts b/x-pack/plugins/maps/public/kibana_services.ts index 8b51fb5fbebc6..5cfd5ee43fc8c 100644 --- a/x-pack/plugins/maps/public/kibana_services.ts +++ b/x-pack/plugins/maps/public/kibana_services.ts @@ -6,10 +6,10 @@ */ import type { CoreStart } from 'kibana/public'; +import type { PaletteRegistry } from '@kbn/coloring'; import type { MapsConfigType } from '../config'; import type { MapsPluginStartDependencies } from './plugin'; import type { EMSSettings } from '../../../../src/plugins/maps_ems/common/ems_settings'; -import type { PaletteRegistry } from '../../../../src/plugins/charts/public'; import { MapsEmsPluginPublicStart } from '../../../../src/plugins/maps_ems/public'; let coreStart: CoreStart; diff --git a/x-pack/plugins/maps/public/lens/choropleth_chart/visualization.tsx b/x-pack/plugins/maps/public/lens/choropleth_chart/visualization.tsx index 93c3bec52471e..0f8e4ff705bbe 100644 --- a/x-pack/plugins/maps/public/lens/choropleth_chart/visualization.tsx +++ b/x-pack/plugins/maps/public/lens/choropleth_chart/visualization.tsx @@ -10,8 +10,8 @@ import { i18n } from '@kbn/i18n'; import { I18nProvider } from '@kbn/i18n-react'; import { render } from 'react-dom'; import type { FileLayer } from '@elastic/ems-client'; +import type { PaletteRegistry } from '@kbn/coloring'; import { ThemeServiceStart } from 'kibana/public'; -import type { PaletteRegistry } from 'src/plugins/charts/public'; import { KibanaThemeProvider } from '../../../../../../src/plugins/kibana_react/public'; import { getSuggestions } from './suggestions'; import { layerTypes } from '../../../../lens/public'; diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/types.ts b/x-pack/plugins/observability/public/components/shared/exploratory_view/types.ts index 775c989df2aec..3cb2c2e95fa43 100644 --- a/x-pack/plugins/observability/public/components/shared/exploratory_view/types.ts +++ b/x-pack/plugins/observability/public/components/shared/exploratory_view/types.ts @@ -5,9 +5,9 @@ * 2.0. */ -import { PaletteOutput } from 'src/plugins/charts/public'; -import { ExistsFilter, PhraseFilter } from '@kbn/es-query'; -import { +import type { PaletteOutput } from '@kbn/coloring'; +import type { ExistsFilter, PhraseFilter } from '@kbn/es-query'; +import type { LastValueIndexPatternColumn, DateHistogramIndexPatternColumn, FieldBasedIndexPatternColumn, @@ -16,7 +16,7 @@ import { YConfig, } from '../../../../../lens/public'; -import { PersistableFilter } from '../../../../../lens/common'; +import type { PersistableFilter } from '../../../../../lens/common'; import type { DataView } from '../../../../../../../src/plugins/data_views/common'; export const ReportViewTypes = { From f814e0fd434ec2cb1290b925b4fc63c4500dd86e Mon Sep 17 00:00:00 2001 From: Diana Derevyankina <54894989+DziyanaDzeraviankina@users.noreply.github.com> Date: Wed, 13 Apr 2022 14:08:49 +0300 Subject: [PATCH 008/305] =?UTF-8?q?Failing=20test:=20Firefox=20UI=20Functi?= =?UTF-8?q?onal=20Tests.test/functional/apps/discover/=5Ffield=5Fdata=5Fwi?= =?UTF-8?q?th=5Ffields=5Fapi=C2=B7ts=20-=20discover=20app=20discover=20tab?= =?UTF-8?q?=20with=20new=20fields=20API=20field=20data=20shows=20top-level?= =?UTF-8?q?=20object=20keys=20(#129844)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../apps/discover/_field_data_with_fields_api.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/functional/apps/discover/_field_data_with_fields_api.ts b/test/functional/apps/discover/_field_data_with_fields_api.ts index 402783694cbd5..d7912d6d0959f 100644 --- a/test/functional/apps/discover/_field_data_with_fields_api.ts +++ b/test/functional/apps/discover/_field_data_with_fields_api.ts @@ -34,8 +34,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); await PageObjects.common.navigateToApp('discover'); }); - // FLAKY: https://github.com/elastic/kibana/issues/127905 - describe.skip('field data', function () { + describe('field data', function () { it('search php should show the correct hit count', async function () { const expectedHitCount = '445'; await retry.try(async function () { @@ -92,12 +91,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hash.replace('columns:!()', 'columns:!(relatedContent)'), { useActualUrl: true } ); + + await PageObjects.header.waitUntilLoadingHasFinished(); await retry.try(async function tryingForTime() { expect(await PageObjects.discover.getDocHeader()).to.contain('relatedContent'); - }); - const field = await PageObjects.discover.getDocTableIndex(1); - expect(field).to.contain('relatedContent.url'); + const field = await PageObjects.discover.getDocTableIndex(1); + expect(field).to.contain('relatedContent.url'); + }); const marks = await PageObjects.discover.getMarks(); expect(marks.length).to.be.above(0); From dbb6b1a75b1168226b9032b5ea14261bd04d7492 Mon Sep 17 00:00:00 2001 From: CohenIdo <90558359+CohenIdo@users.noreply.github.com> Date: Wed, 13 Apr 2022 14:51:51 +0300 Subject: [PATCH 009/305] Adding post create package callback --- x-pack/plugins/fleet/server/index.ts | 1 + .../routes/package_policy/handlers.test.ts | 32 +++++++ .../server/routes/package_policy/handlers.ts | 11 ++- .../fleet/server/services/app_context.ts | 5 + .../server/services/package_policy.test.ts | 95 +++++++++++++++++++ .../fleet/server/services/package_policy.ts | 44 +++++++-- .../plugins/fleet/server/types/extensions.ts | 12 +++ .../server/types/models/package_policy.ts | 21 ++++ 8 files changed, 214 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/fleet/server/index.ts b/x-pack/plugins/fleet/server/index.ts index efeac499bf953..2db6cfa848837 100644 --- a/x-pack/plugins/fleet/server/index.ts +++ b/x-pack/plugins/fleet/server/index.ts @@ -39,6 +39,7 @@ export type { PostPackagePolicyDeleteCallback, PostPackagePolicyCreateCallback, FleetRequestHandlerContext, + PostPackagePolicyPostCreateCallback, } from './types'; export { AgentNotFoundError, FleetUnauthorizedError } from './errors'; diff --git a/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts b/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts index 25d0f5c577667..85f048669b53b 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts @@ -263,6 +263,38 @@ describe('When calling package policy', () => { }); }); }); + + describe('postCreate callback registration', () => { + it('should call to packagePolicyCreate and packagePolicyPostCreate call backs', async () => { + const request = getCreateKibanaRequest(); + await routeHandler(context, request, response); + + expect(response.ok).toHaveBeenCalled(); + expect(packagePolicyService.runExternalCallbacks).toBeCalledTimes(2); + + const firstCB = packagePolicyServiceMock.runExternalCallbacks.mock.calls[0][0]; + const secondCB = packagePolicyServiceMock.runExternalCallbacks.mock.calls[1][0]; + + expect(firstCB).toEqual('packagePolicyCreate'); + expect(secondCB).toEqual('packagePolicyPostCreate'); + }); + + it('should not call packagePolicyPostCreate call back in case of packagePolicy create failed', async () => { + const request = getCreateKibanaRequest(); + + packagePolicyServiceMock.create.mockImplementationOnce( + async (soClient, esClient, newData) => { + throw new Error('foo'); + } + ); + + await routeHandler(context, request, response); + const firstCB = packagePolicyServiceMock.runExternalCallbacks.mock.calls[0][0]; + + expect(firstCB).toEqual('packagePolicyCreate'); + expect(packagePolicyService.runExternalCallbacks).toBeCalledTimes(1); + }); + }); }); describe('update api handler', () => { diff --git a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts index de2045ff3e47c..9ee7ac02840a4 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts @@ -110,7 +110,16 @@ export const createPackagePolicyHandler: FleetRequestHandler< force, spaceId, }); - const body: CreatePackagePolicyResponse = { item: packagePolicy }; + + const enrichedPackagePolicy = await packagePolicyService.runExternalCallbacks( + 'packagePolicyPostCreate', + packagePolicy, + context, + request + ); + + const body: CreatePackagePolicyResponse = { item: enrichedPackagePolicy }; + return response.ok({ body, }); diff --git a/x-pack/plugins/fleet/server/services/app_context.ts b/x-pack/plugins/fleet/server/services/app_context.ts index 3adace700f796..20f35af8650ce 100644 --- a/x-pack/plugins/fleet/server/services/app_context.ts +++ b/x-pack/plugins/fleet/server/services/app_context.ts @@ -29,6 +29,7 @@ import type { ExternalCallbacksStorage, PostPackagePolicyCreateCallback, PostPackagePolicyDeleteCallback, + PostPackagePolicyPostCreateCallback, PutPackagePolicyUpdateCallback, } from '../types'; import type { FleetAppContext } from '../plugin'; @@ -183,6 +184,8 @@ class AppContextService { ? PostPackagePolicyCreateCallback : T extends 'postPackagePolicyDelete' ? PostPackagePolicyDeleteCallback + : T extends 'packagePolicyPostCreate' + ? PostPackagePolicyPostCreateCallback : PutPackagePolicyUpdateCallback > | undefined { @@ -192,6 +195,8 @@ class AppContextService { ? PostPackagePolicyCreateCallback : T extends 'postPackagePolicyDelete' ? PostPackagePolicyDeleteCallback + : T extends 'packagePolicyPostCreate' + ? PostPackagePolicyPostCreateCallback : PutPackagePolicyUpdateCallback >; } diff --git a/x-pack/plugins/fleet/server/services/package_policy.test.ts b/x-pack/plugins/fleet/server/services/package_policy.test.ts index 2fde004048a36..fc25f4c0ed23b 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.test.ts @@ -26,6 +26,7 @@ import type { RegistryDataStream, PackagePolicyInputStream, PackagePolicy, + PostPackagePolicyPostCreateCallback, } from '../types'; import { createPackagePolicyMock } from '../../common/mocks'; @@ -1356,6 +1357,100 @@ describe('Package policy service', () => { }); }); + describe('runPostPackagePolicyPostCreateCallback', () => { + let context: ReturnType; + let request: KibanaRequest; + const packagePolicy = { + id: '93ac25fe-0467-4fcc-a3c5-57a26a8496e2', + version: 'WzYyMzcsMV0=', + name: 'my-cis_kubernetes_benchmark', + namespace: 'default', + description: '', + package: { + name: 'cis_kubernetes_benchmark', + title: 'CIS Kubernetes Benchmark', + version: '0.0.3', + }, + enabled: true, + policy_id: '1e6d0690-b995-11ec-a355-d35391e25881', + output_id: '', + inputs: [ + { + type: 'cloudbeat', + policy_template: 'findings', + enabled: true, + streams: [ + { + enabled: true, + data_stream: { + type: 'logs', + dataset: 'cis_kubernetes_benchmark.findings', + }, + id: 'cloudbeat-cis_kubernetes_benchmark.findings-66b402b3-f24a-4018-b3d0-b88582a836ab', + compiled_stream: { + processors: [ + { + add_cluster_id: null, + }, + ], + }, + }, + ], + }, + ], + vars: { + dataYaml: { + type: 'yaml', + }, + }, + elasticsearch: undefined, + revision: 1, + created_at: '2022-04-11T12:44:43.385Z', + created_by: 'elastic', + updated_at: '2022-04-11T12:44:43.385Z', + updated_by: 'elastic', + }; + const callbackCallingOrder: string[] = []; + + beforeEach(() => { + context = xpackMocks.createRequestHandlerContext(); + request = httpServerMock.createKibanaRequest(); + appContextService.start(createAppContextStartContractMock()); + }); + + afterEach(() => { + appContextService.stop(); + jest.clearAllMocks(); + callbackCallingOrder.length = 0; + }); + + it('should execute PostPackagePolicyPostCreateCallback external callbacks', async () => { + const callbackA: PostPackagePolicyPostCreateCallback = jest.fn(async (ds) => { + callbackCallingOrder.push('a'); + return ds; + }); + + const callbackB: PostPackagePolicyPostCreateCallback = jest.fn(async (ds) => { + callbackCallingOrder.push('b'); + return ds; + }); + + appContextService.addExternalCallback('packagePolicyPostCreate', callbackA); + appContextService.addExternalCallback('packagePolicyPostCreate', callbackB); + + await packagePolicyService.runExternalCallbacks( + 'packagePolicyPostCreate', + packagePolicy, + context, + request + ); + + expect(callbackA).toHaveBeenCalledWith(packagePolicy, context, request); + expect(callbackB).toHaveBeenCalledWith(packagePolicy, context, request); + expect(callbackCallingOrder).toEqual(['a', 'b']); + }); + }); + describe('preconfigurePackageInputs', () => { describe('when variable is already defined', () => { it('override original variable value', () => { diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index a6c67ff529a85..ba3a8027dc746 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -53,13 +53,15 @@ import { PackagePolicyIneligibleForUpgradeError, PackagePolicyValidationError, } from '../errors'; -import { NewPackagePolicySchema, UpdatePackagePolicySchema } from '../types'; +import { NewPackagePolicySchema, PackagePolicySchema, UpdatePackagePolicySchema } from '../types'; import type { NewPackagePolicy, UpdatePackagePolicy, PackagePolicy, PackagePolicySOAttributes, DryRunPackagePolicy, + PostPackagePolicyCreateCallback, + PostPackagePolicyPostCreateCallback, } from '../types'; import type { ExternalCallback } from '..'; @@ -869,16 +871,24 @@ class PackagePolicyService implements PackagePolicyServiceInterface { externalCallbackType: A, packagePolicy: A extends 'postPackagePolicyDelete' ? DeletePackagePoliciesResponse + : A extends 'packagePolicyPostCreate' + ? PackagePolicy : NewPackagePolicy, context: RequestHandlerContext, request: KibanaRequest - ): Promise; + ): Promise< + A extends 'postPackagePolicyDelete' + ? void + : A extends 'packagePolicyPostCreate' + ? PackagePolicy + : NewPackagePolicy + >; public async runExternalCallbacks( externalCallbackType: ExternalCallback[0], - packagePolicy: NewPackagePolicy | DeletePackagePoliciesResponse, + packagePolicy: PackagePolicy | NewPackagePolicy | DeletePackagePoliciesResponse, context: RequestHandlerContext, request: KibanaRequest - ): Promise { + ): Promise { if (externalCallbackType === 'postPackagePolicyDelete') { return await this.runDeleteExternalCallbacks(packagePolicy as DeletePackagePoliciesResponse); } else { @@ -888,7 +898,21 @@ class PackagePolicyService implements PackagePolicyServiceInterface { if (externalCallbacks && externalCallbacks.size > 0) { let updatedNewData = newData; for (const callback of externalCallbacks) { - const result = await callback(updatedNewData, context, request); + let result; + if (externalCallbackType === 'packagePolicyPostCreate') { + result = await (callback as PostPackagePolicyPostCreateCallback)( + updatedNewData as PackagePolicy, + context, + request + ); + updatedNewData = PackagePolicySchema.validate(result); + } else { + result = await (callback as PostPackagePolicyCreateCallback)( + updatedNewData as NewPackagePolicy, + context, + request + ); + } if (externalCallbackType === 'packagePolicyCreate') { updatedNewData = NewPackagePolicySchema.validate(result); } else if (externalCallbackType === 'packagePolicyUpdate') { @@ -1276,10 +1300,18 @@ export interface PackagePolicyServiceInterface { externalCallbackType: A, packagePolicy: A extends 'postPackagePolicyDelete' ? DeletePackagePoliciesResponse + : A extends 'packagePolicyPostCreate' + ? PackagePolicy : NewPackagePolicy, context: RequestHandlerContext, request: KibanaRequest - ): Promise; + ): Promise< + A extends 'postPackagePolicyDelete' + ? void + : A extends 'packagePolicyPostCreate' + ? PackagePolicy + : NewPackagePolicy + >; runDeleteExternalCallbacks(deletedPackagePolicies: DeletePackagePoliciesResponse): Promise; diff --git a/x-pack/plugins/fleet/server/types/extensions.ts b/x-pack/plugins/fleet/server/types/extensions.ts index a7f4a422cc2ae..fefdb5e26d0fb 100644 --- a/x-pack/plugins/fleet/server/types/extensions.ts +++ b/x-pack/plugins/fleet/server/types/extensions.ts @@ -13,6 +13,7 @@ import type { DeletePackagePoliciesResponse, NewPackagePolicy, UpdatePackagePolicy, + PackagePolicy, } from '../../common'; export type PostPackagePolicyDeleteCallback = ( @@ -25,6 +26,12 @@ export type PostPackagePolicyCreateCallback = ( request: KibanaRequest ) => Promise; +export type PostPackagePolicyPostCreateCallback = ( + packagePolicy: PackagePolicy, + context: RequestHandlerContext, + request: KibanaRequest +) => Promise; + export type PutPackagePolicyUpdateCallback = ( updatePackagePolicy: UpdatePackagePolicy, context: RequestHandlerContext, @@ -32,6 +39,10 @@ export type PutPackagePolicyUpdateCallback = ( ) => Promise; export type ExternalCallbackCreate = ['packagePolicyCreate', PostPackagePolicyCreateCallback]; +export type ExternalCallbackPostCreate = [ + 'packagePolicyPostCreate', + PostPackagePolicyPostCreateCallback +]; export type ExternalCallbackDelete = ['postPackagePolicyDelete', PostPackagePolicyDeleteCallback]; export type ExternalCallbackUpdate = ['packagePolicyUpdate', PutPackagePolicyUpdateCallback]; @@ -40,6 +51,7 @@ export type ExternalCallbackUpdate = ['packagePolicyUpdate', PutPackagePolicyUpd */ export type ExternalCallback = | ExternalCallbackCreate + | ExternalCallbackPostCreate | ExternalCallbackDelete | ExternalCallbackUpdate; diff --git a/x-pack/plugins/fleet/server/types/models/package_policy.ts b/x-pack/plugins/fleet/server/types/models/package_policy.ts index 1d4dc1c1b3b65..c4f8ab2c1437e 100644 --- a/x-pack/plugins/fleet/server/types/models/package_policy.ts +++ b/x-pack/plugins/fleet/server/types/models/package_policy.ts @@ -55,6 +55,7 @@ const PackagePolicyStreamsSchema = { }) ) ), + compiled_stream: schema.maybe(schema.any()), }; const PackagePolicyInputsSchema = { @@ -150,4 +151,24 @@ export const PackagePolicySchema = schema.object({ ...PackagePolicyBaseSchema, id: schema.string(), version: schema.maybe(schema.string()), + revision: schema.number(), + updated_at: schema.string(), + updated_by: schema.string(), + created_at: schema.string(), + created_by: schema.string(), + elasticsearch: schema.maybe( + schema.object({ + privileges: schema.maybe( + schema.object({ + cluster: schema.maybe(schema.arrayOf(schema.string())), + }) + ), + }) + ), + inputs: schema.arrayOf( + schema.object({ + ...PackagePolicyInputsSchema, + compiled_input: schema.maybe(schema.any()), + }) + ), }); From 88336719a2a54480be8ed999dad949d96aeec858 Mon Sep 17 00:00:00 2001 From: Andrew Tate Date: Wed, 13 Apr 2022 07:10:47 -0500 Subject: [PATCH 010/305] [Lens] update defaults for metric vis (#129968) --- .../metric_config_panel/align_options.tsx | 4 +- .../metric_config_panel/size_options.tsx | 8 ++- .../title_position_option.tsx | 16 ++++-- .../visualization.test.ts | 14 ++--- .../metric_visualization/visualization.tsx | 13 +++-- .../make_lens_embeddable_factory.ts | 9 ++++ .../server/migrations/common_migrations.ts | 17 ++++++- .../saved_object_migrations.test.ts | 51 ++++++++++++++++++- .../migrations/saved_object_migrations.ts | 6 +++ 9 files changed, 118 insertions(+), 20 deletions(-) diff --git a/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/align_options.tsx b/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/align_options.tsx index f2b97454df9df..a400e42ac08f5 100644 --- a/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/align_options.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/align_options.tsx @@ -15,6 +15,8 @@ export interface TitlePositionProps { setState: (newState: MetricState) => void; } +export const DEFAULT_TEXT_ALIGNMENT = 'left'; + const alignButtonIcons = [ { id: `left`, @@ -46,7 +48,7 @@ export const AlignOptions: React.FC = ({ state, setState }) defaultMessage: 'Align', })} options={alignButtonIcons} - idSelected={state.textAlign ?? 'center'} + idSelected={state.textAlign ?? DEFAULT_TEXT_ALIGNMENT} onChange={(id) => { setState({ ...state, textAlign: id as MetricState['textAlign'] }); }} diff --git a/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/size_options.tsx b/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/size_options.tsx index 17142ab77ab35..5a4ca7f644956 100644 --- a/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/size_options.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/size_options.tsx @@ -15,6 +15,8 @@ export interface TitlePositionProps { setState: (newState: MetricState) => void; } +export const DEFAULT_TITLE_SIZE = 'm'; + const titleSizes = [ { id: 'xs', @@ -55,7 +57,9 @@ const titleSizes = [ ]; export const SizeOptions: React.FC = ({ state, setState }) => { - const currSizeIndex = titleSizes.findIndex((size) => size.id === (state.size || 'xl')); + const currSizeIndex = titleSizes.findIndex( + (size) => size.id === (state.size || DEFAULT_TITLE_SIZE) + ); const changeSize = (change: number) => { setState({ ...state, size: titleSizes[currSizeIndex + change].id }); @@ -86,7 +90,7 @@ export const SizeOptions: React.FC = ({ state, setState }) = inputDisplay: position.label, }; })} - valueOfSelected={state.size ?? 'xl'} + valueOfSelected={state.size ?? DEFAULT_TITLE_SIZE} onChange={(value) => { setState({ ...state, size: value }); }} diff --git a/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/title_position_option.tsx b/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/title_position_option.tsx index acaa11f477226..c58854647c1e7 100644 --- a/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/title_position_option.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/metric_config_panel/title_position_option.tsx @@ -15,9 +15,19 @@ export interface TitlePositionProps { setState: (newState: MetricState) => void; } +export const DEFAULT_TITLE_POSITION = 'top'; + const titlePositions = [ - { id: 'top', label: 'Top' }, - { id: 'bottom', label: 'Bottom' }, + { + id: 'top', + label: i18n.translate('xpack.lens.metricChart.titlePositions.top', { defaultMessage: 'Top' }), + }, + { + id: 'bottom', + label: i18n.translate('xpack.lens.metricChart.titlePositions.bottom', { + defaultMessage: 'Bottom', + }), + }, ]; export const TitlePositionOptions: React.FC = ({ state, setState }) => { @@ -38,7 +48,7 @@ export const TitlePositionOptions: React.FC = ({ state, setS data-test-subj="lnsMissingValuesSelect" legend="This is a basic group" options={titlePositions} - idSelected={state.titlePosition ?? 'bottom'} + idSelected={state.titlePosition ?? DEFAULT_TITLE_POSITION} onChange={(value) => { setState({ ...state, titlePosition: value as MetricState['titlePosition'] }); }} diff --git a/x-pack/plugins/lens/public/metric_visualization/visualization.test.ts b/x-pack/plugins/lens/public/metric_visualization/visualization.test.ts index c7e01b0c6a137..e3a70ef17f8af 100644 --- a/x-pack/plugins/lens/public/metric_visualization/visualization.test.ts +++ b/x-pack/plugins/lens/public/metric_visualization/visualization.test.ts @@ -301,13 +301,13 @@ describe('metric_visualization', () => { Object { "arguments": Object { "align": Array [ - "center", + "left", ], "lHeight": Array [ - 127.5, + 82.5, ], "size": Array [ - 85, + 55, ], "sizeUnit": Array [ "px", @@ -329,13 +329,13 @@ describe('metric_visualization', () => { Object { "arguments": Object { "align": Array [ - "center", + "left", ], "lHeight": Array [ - 40.5, + 24, ], "size": Array [ - 27, + 16, ], "sizeUnit": Array [ "px", @@ -349,7 +349,7 @@ describe('metric_visualization', () => { }, ], "labelPosition": Array [ - "bottom", + "top", ], "metric": Array [ Object { diff --git a/x-pack/plugins/lens/public/metric_visualization/visualization.tsx b/x-pack/plugins/lens/public/metric_visualization/visualization.tsx index c3bb01a96b58a..bbc8b3448618a 100644 --- a/x-pack/plugins/lens/public/metric_visualization/visualization.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/visualization.tsx @@ -22,6 +22,9 @@ import type { MetricState } from '../../common/types'; import { layerTypes } from '../../common'; import { MetricDimensionEditor } from './dimension_editor'; import { MetricToolbar } from './metric_config_panel'; +import { DEFAULT_TITLE_POSITION } from './metric_config_panel/title_position_option'; +import { DEFAULT_TITLE_SIZE } from './metric_config_panel/size_options'; +import { DEFAULT_TEXT_ALIGNMENT } from './metric_config_panel/align_options'; interface MetricConfig extends Omit { title: string; @@ -82,7 +85,7 @@ const toExpression = ( xxl: getFontSizeAndUnit(euiThemeVars.euiFontSizeXXL), }; - const labelFont = fontSizes[state?.size || 'xl']; + const labelFont = fontSizes[state?.size || DEFAULT_TITLE_SIZE]; const labelToMetricFontSizeMap: Record = { xs: fontSizes.xs.size * 2, s: fontSizes.m.size * 2.5, @@ -91,7 +94,7 @@ const toExpression = ( xl: fontSizes.xxl.size * 2.5, xxl: fontSizes.xxl.size * 3, }; - const metricFontSize = labelToMetricFontSizeMap[state?.size || 'xl']; + const metricFontSize = labelToMetricFontSizeMap[state?.size || DEFAULT_TITLE_SIZE]; return { type: 'expression', @@ -100,7 +103,7 @@ const toExpression = ( type: 'function', function: 'metricVis', arguments: { - labelPosition: [state?.titlePosition || 'bottom'], + labelPosition: [state?.titlePosition || DEFAULT_TITLE_POSITION], font: [ { type: 'expression', @@ -109,7 +112,7 @@ const toExpression = ( type: 'function', function: 'font', arguments: { - align: [state?.textAlign || 'center'], + align: [state?.textAlign || DEFAULT_TEXT_ALIGNMENT], size: [metricFontSize], weight: ['600'], lHeight: [metricFontSize * 1.5], @@ -127,7 +130,7 @@ const toExpression = ( type: 'function', function: 'font', arguments: { - align: [state?.textAlign || 'center'], + align: [state?.textAlign || DEFAULT_TEXT_ALIGNMENT], size: [labelFont.size], lHeight: [labelFont.size * 1.5], sizeUnit: [labelFont.sizeUnit], diff --git a/x-pack/plugins/lens/server/embeddable/make_lens_embeddable_factory.ts b/x-pack/plugins/lens/server/embeddable/make_lens_embeddable_factory.ts index 7b17dc9977e6d..0b7536d5cdc28 100644 --- a/x-pack/plugins/lens/server/embeddable/make_lens_embeddable_factory.ts +++ b/x-pack/plugins/lens/server/embeddable/make_lens_embeddable_factory.ts @@ -14,6 +14,7 @@ import { import { DOC_TYPE } from '../../common'; import { commonEnhanceTableRowHeight, + commonLockOldMetricVisSettings, commonMakeReversePaletteAsCustom, commonRemoveTimezoneDateHistogramParam, commonRenameFilterReferences, @@ -103,6 +104,14 @@ export const makeLensEmbeddableFactory = attributes: migratedLensState, } as unknown as SerializableRecord; }, + '8.3.0': (state) => { + const lensState = state as unknown as { attributes: LensDocShape810 }; + const migratedLensState = commonLockOldMetricVisSettings(lensState.attributes); + return { + ...lensState, + attributes: migratedLensState, + } as unknown as SerializableRecord; + }, }), getLensCustomVisualizationMigrations(customVisualizationMigrations) ), diff --git a/x-pack/plugins/lens/server/migrations/common_migrations.ts b/x-pack/plugins/lens/server/migrations/common_migrations.ts index 0a76b0a5e6b45..039da7662d84c 100644 --- a/x-pack/plugins/lens/server/migrations/common_migrations.ts +++ b/x-pack/plugins/lens/server/migrations/common_migrations.ts @@ -28,7 +28,7 @@ import { CustomVisualizationMigrations, LensDocShape810, } from './types'; -import { DOCUMENT_FIELD_NAME, layerTypes } from '../../common'; +import { DOCUMENT_FIELD_NAME, layerTypes, MetricState } from '../../common'; import { LensDocShape } from './saved_object_migrations'; export const commonRenameOperationsForFormula = ( @@ -239,6 +239,21 @@ export const commonSetIncludeEmptyRowsDateHistogram = ( return newAttributes; }; +export const commonLockOldMetricVisSettings = ( + attributes: LensDocShape810 +): LensDocShape810 => { + const newAttributes = cloneDeep(attributes); + if (newAttributes.visualizationType !== 'lnsMetric') { + return newAttributes; + } + + const visState = newAttributes.state.visualization as MetricState; + visState.textAlign = visState.textAlign ?? 'center'; + visState.titlePosition = visState.titlePosition ?? 'bottom'; + visState.size = visState.size ?? 'xl'; + return newAttributes; +}; + const getApplyCustomVisualizationMigrationToLens = (id: string, migration: MigrateFunction) => { return (savedObject: { attributes: LensDocShape }) => { if (savedObject.attributes.visualizationType !== id) return savedObject; diff --git a/x-pack/plugins/lens/server/migrations/saved_object_migrations.test.ts b/x-pack/plugins/lens/server/migrations/saved_object_migrations.test.ts index 5d93e648124b1..7c6e8345b71de 100644 --- a/x-pack/plugins/lens/server/migrations/saved_object_migrations.test.ts +++ b/x-pack/plugins/lens/server/migrations/saved_object_migrations.test.ts @@ -22,7 +22,7 @@ import { VisState810, VisState820, } from './types'; -import { layerTypes } from '../../common'; +import { layerTypes, MetricState } from '../../common'; import { Filter } from '@kbn/es-query'; describe('Lens migrations', () => { @@ -2064,4 +2064,53 @@ describe('Lens migrations', () => { expect(layer2Columns['4'].params).toHaveProperty('includeEmptyRows', true); }); }); + describe('8.3.0 old metric visualization defaults', () => { + const context = { log: { warning: () => {} } } as unknown as SavedObjectMigrationContext; + const example = { + type: 'lens', + id: 'mocked-saved-object-id', + attributes: { + savedObjectId: '1', + title: 'MyRenamedOps', + description: '', + visualizationType: 'lnsMetric', + state: { + visualization: {}, + }, + }, + } as unknown as SavedObjectUnsanitizedDoc; + + it('preserves current config for existing visualizations that are using the DEFAULTS', () => { + const result = migrations['8.3.0'](example, context) as ReturnType< + SavedObjectMigrationFn + >; + const visState = result.attributes.state.visualization as MetricState; + expect(visState.textAlign).toBe('center'); + expect(visState.titlePosition).toBe('bottom'); + expect(visState.size).toBe('xl'); + }); + + it('preserves current config for existing visualizations that are using CUSTOM settings', () => { + const result = migrations['8.3.0']( + { + ...example, + attributes: { + ...example.attributes, + state: { + visualization: { + textAlign: 'right', + titlePosition: 'top', + size: 's', + }, + }, + }, + }, + context + ) as ReturnType>; + const visState = result.attributes.state.visualization as MetricState; + expect(visState.textAlign).toBe('right'); + expect(visState.titlePosition).toBe('top'); + expect(visState.size).toBe('s'); + }); + }); }); diff --git a/x-pack/plugins/lens/server/migrations/saved_object_migrations.ts b/x-pack/plugins/lens/server/migrations/saved_object_migrations.ts index 6fb8044baf8ea..17243ae9c8723 100644 --- a/x-pack/plugins/lens/server/migrations/saved_object_migrations.ts +++ b/x-pack/plugins/lens/server/migrations/saved_object_migrations.ts @@ -44,6 +44,7 @@ import { commonSetLastValueShowArrayValues, commonEnhanceTableRowHeight, commonSetIncludeEmptyRowsDateHistogram, + commonLockOldMetricVisSettings, } from './common_migrations'; interface LensDocShapePre710 { @@ -485,6 +486,10 @@ const setIncludeEmptyRowsDateHistogram: SavedObjectMigrationFn = ( + doc +) => ({ ...doc, attributes: commonLockOldMetricVisSettings(doc.attributes) }); + const lensMigrations: SavedObjectMigrationMap = { '7.7.0': removeInvalidAccessors, // The order of these migrations matter, since the timefield migration relies on the aggConfigs @@ -504,6 +509,7 @@ const lensMigrations: SavedObjectMigrationMap = { setIncludeEmptyRowsDateHistogram, enhanceTableRowHeight ), + '8.3.0': lockOldMetricVisSettings, }; export const getAllMigrations = ( From 69e5f3edf415519709ae13ba19d4f28c40c0278d Mon Sep 17 00:00:00 2001 From: mgiota Date: Wed, 13 Apr 2022 14:17:49 +0200 Subject: [PATCH 011/305] update documentation link (#129880) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/observability/public/pages/rules/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/observability/public/pages/rules/index.tsx b/x-pack/plugins/observability/public/pages/rules/index.tsx index 02137f13e3ebd..64b8cf61da3e6 100644 --- a/x-pack/plugins/observability/public/pages/rules/index.tsx +++ b/x-pack/plugins/observability/public/pages/rules/index.tsx @@ -83,7 +83,7 @@ export function RulesPage() { application: { capabilities }, notifications: { toasts }, } = useKibana().services; - const documentationLink = docLinks.links.alerting.guide; + const documentationLink = docLinks.links.observability.createAlerts; const ruleTypeRegistry = triggersActionsUi.ruleTypeRegistry; const canExecuteActions = hasExecuteActionsCapability(capabilities); const [page, setPage] = useState({ index: 0, size: DEFAULT_SEARCH_PAGE_SIZE }); From 00247b23fb3dacd730b3210b6a50b7343cd394a9 Mon Sep 17 00:00:00 2001 From: Pablo Machado Date: Wed, 13 Apr 2022 14:24:31 +0200 Subject: [PATCH 012/305] Enable user page featue flag (#130030) --- .../security_solution/common/experimental_features.ts | 2 +- .../security_solution/public/app/deep_links/index.test.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 026cfd273905e..63a626055c7cb 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -16,7 +16,7 @@ export const allowedExperimentalValues = Object.freeze({ tGridEnabled: true, tGridEventRenderedViewEnabled: true, excludePoliciesInFilterEnabled: false, - usersEnabled: false, + usersEnabled: true, detectionResponseEnabled: false, disableIsolationUIPendingStatuses: false, riskyHostsEnabled: false, diff --git a/x-pack/plugins/security_solution/public/app/deep_links/index.test.ts b/x-pack/plugins/security_solution/public/app/deep_links/index.test.ts index 0676c516ede64..118d73cbedf1d 100644 --- a/x-pack/plugins/security_solution/public/app/deep_links/index.test.ts +++ b/x-pack/plugins/security_solution/public/app/deep_links/index.test.ts @@ -142,7 +142,11 @@ describe('deepLinks', () => { describe('experimental flags', () => { it('should return NO users link when enableExperimental.usersEnabled === false', () => { - const deepLinks = getDeepLinks(mockGlobalState.app.enableExperimental); + const deepLinks = getDeepLinks({ + ...mockGlobalState.app.enableExperimental, + usersEnabled: false, + }); + expect(findDeepLink(SecurityPageName.users, deepLinks)).toBeFalsy(); }); From 41f4ae5d87b2e71536e1c24cbd559ec93b22f806 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 13 Apr 2022 15:27:36 +0300 Subject: [PATCH 013/305] [Cloud Posture] using common values for evals (#130100) --- .../compliance_charts/cloud_posture_score_chart.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_charts/cloud_posture_score_chart.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_charts/cloud_posture_score_chart.tsx index dd872b49aec62..540402b986e5b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_charts/cloud_posture_score_chart.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_charts/cloud_posture_score_chart.tsx @@ -23,8 +23,8 @@ import { FormattedDate, FormattedTime } from '@kbn/i18n-react'; import moment from 'moment'; import { statusColors } from '../../../common/constants'; import type { PostureTrend, Stats } from '../../../../common/types'; -import * as TEXT from '../translations'; import { CompactFormattedNumber } from '../../../components/compact_formatted_number'; +import { RULE_FAILED, RULE_PASSED } from '../../../../common/constants'; interface CloudPostureScoreChartProps { trend: PostureTrend[]; @@ -41,8 +41,8 @@ const ScoreChart = ({ partitionOnElementClick, }: Omit) => { const data = [ - { label: TEXT.PASSED, value: totalPassed }, - { label: TEXT.FAILED, value: totalFailed }, + { label: RULE_PASSED, value: totalPassed }, + { label: RULE_FAILED, value: totalFailed }, ]; return ( @@ -69,7 +69,7 @@ const ScoreChart = ({ groupByRollup: (d: { label: string }) => d.label, shape: { fillColor: (d, index) => - d.dataName === 'Passed' ? statusColors.success : statusColors.danger, + d.dataName === RULE_PASSED ? statusColors.success : statusColors.danger, }, }, ]} From aa14fd08bca5287da67de6249f0c554f331a3842 Mon Sep 17 00:00:00 2001 From: Ignacio Rivas Date: Wed, 13 Apr 2022 14:32:21 +0200 Subject: [PATCH 014/305] [IndexManagement - IngestPipelines] Remove leftover axios dependencies (#130089) * Remove last axios dep from ingest pipelines * Remove last axios dep from index management * commit using @elastic.co * Fix linter errors --- .../__jest__/components/index_table.test.js | 65 ++++--------------- .../__jest__/processors/append.test.tsx | 6 +- .../__jest__/processors/bytes.test.tsx | 5 +- .../__jest__/processors/circle.test.tsx | 5 +- .../common_processor_fields.test.tsx | 5 +- .../__jest__/processors/community_id.test.tsx | 5 +- .../__jest__/processors/convert.test.tsx | 5 +- .../__jest__/processors/csv.test.tsx | 5 +- .../__jest__/processors/date.test.tsx | 5 +- .../__jest__/processors/date_index.test.tsx | 5 +- .../__jest__/processors/dot_expander.test.tsx | 5 +- .../__jest__/processors/fail.test.tsx | 5 +- .../__jest__/processors/fingerprint.test.tsx | 5 +- .../processors/network_direction.test.tsx | 5 +- .../__jest__/processors/processor.helpers.tsx | 17 ++--- .../processors/processor_form.test.tsx | 5 +- .../processors/registered_domain.test.tsx | 5 +- .../__jest__/processors/set.test.tsx | 5 +- .../__jest__/processors/uri_parts.test.tsx | 5 +- .../__jest__/processors/user_agent.test.tsx | 5 +- 20 files changed, 74 insertions(+), 99 deletions(-) diff --git a/x-pack/plugins/index_management/__jest__/components/index_table.test.js b/x-pack/plugins/index_management/__jest__/components/index_table.test.js index bf5ab6541bad8..d6d2b1da9670f 100644 --- a/x-pack/plugins/index_management/__jest__/components/index_table.test.js +++ b/x-pack/plugins/index_management/__jest__/components/index_table.test.js @@ -8,10 +8,7 @@ import React from 'react'; import { Provider } from 'react-redux'; import { MemoryRouter } from 'react-router-dom'; -import axios from 'axios'; -import sinon from 'sinon'; import { findTestSubject } from '@elastic/eui/lib/test'; -import axiosXhrAdapter from 'axios/lib/adapters/xhr'; /** * The below import is required to avoid a console error warn from brace package @@ -20,8 +17,9 @@ import axiosXhrAdapter from 'axios/lib/adapters/xhr'; at createWorker (//node_modules/brace/index.js:17992:5) */ import { mountWithIntl, stubWebWorker } from '@kbn/test-jest-helpers'; // eslint-disable-line no-unused-vars +import { init as initHttpRequests } from '../client_integration/helpers/http_requests'; -import { BASE_PATH, API_BASE_PATH } from '../../common/constants'; +import { BASE_PATH } from '../../common/constants'; import { AppWithoutRouter } from '../../public/application/app'; import { AppContextProvider } from '../../public/application/app_context'; import { loadIndicesSuccess } from '../../public/application/store/actions'; @@ -40,9 +38,6 @@ import { executionContextServiceMock, } from '../../../../../src/core/public/mocks'; -const mockHttpClient = axios.create({ adapter: axiosXhrAdapter }); - -let server = null; let store = null; const indices = []; @@ -149,6 +144,8 @@ const getActionMenuButtons = (rendered) => { .map((span) => span.text()); }; describe('index table', () => { + const { httpSetup, httpRequestsMockHelpers } = initHttpRequests(); + beforeEach(() => { // Mock initialization of services const services = { @@ -159,8 +156,7 @@ describe('index table', () => { setExtensionsService(services.extensionsService); setUiMetricService(services.uiMetricService); - // @ts-ignore - httpService.setup(mockHttpClient); + httpService.setup(httpSetup); breadcrumbService.setup(() => undefined); notificationService.setup(notificationServiceMock.createStartContract()); @@ -186,33 +182,9 @@ describe('index table', () => { ); store.dispatch(loadIndicesSuccess({ indices })); - server = sinon.fakeServer.create(); - - server.respondWith(`${API_BASE_PATH}/indices`, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify(indices), - ]); - - server.respondWith([ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify({ acknowledged: true }), - ]); - - server.respondWith(`${API_BASE_PATH}/indices/reload`, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify(indices), - ]); - - server.respondImmediately = true; - }); - afterEach(() => { - if (!server) { - return; - } - server.restore(); + + httpRequestsMockHelpers.setLoadIndicesResponse(indices); + httpRequestsMockHelpers.setReloadIndicesResponse(indices); }); test('should change pages when a pagination link is clicked on', async () => { @@ -476,22 +448,17 @@ describe('index table', () => { }); test('close index button works from context menu', async () => { - const rendered = mountWithIntl(component); - await runAllPromises(); - rendered.update(); - const modifiedIndices = indices.map((index) => { return { ...index, status: index.name === 'testy0' ? 'close' : index.status, }; }); + httpRequestsMockHelpers.setReloadIndicesResponse(modifiedIndices); - server.respondWith(`${API_BASE_PATH}/indices/reload`, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify(modifiedIndices), - ]); + const rendered = mountWithIntl(component); + await runAllPromises(); + rendered.update(); testAction(rendered, 'closeIndexMenuButton'); }); @@ -503,16 +470,12 @@ describe('index table', () => { status: index.name === 'testy1' ? 'closed' : index.status, }; }); - - server.respondWith(`${API_BASE_PATH}/indices`, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify(modifiedIndices), - ]); + httpRequestsMockHelpers.setLoadIndicesResponse(modifiedIndices); const rendered = mountWithIntl(component); await runAllPromises(); rendered.update(); + testAction(rendered, 'openIndexMenuButton', 'testy1'); }); diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/append.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/append.test.tsx index af3651525d6a3..f35e05b800f14 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/append.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/append.test.tsx @@ -6,7 +6,7 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const APPEND_TYPE = 'append'; @@ -14,6 +14,8 @@ describe('Processor: Append', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); + beforeAll(() => { jest.useFakeTimers(); }); @@ -26,7 +28,7 @@ describe('Processor: Append', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/bytes.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/bytes.test.tsx index 51117c3b517f9..d4ac176d6aaf5 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/bytes.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/bytes.test.tsx @@ -6,13 +6,14 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const BYTES_TYPE = 'bytes'; describe('Processor: Bytes', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -26,7 +27,7 @@ describe('Processor: Bytes', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/circle.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/circle.test.tsx index b8c8f6c58f711..00153471ea65e 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/circle.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/circle.test.tsx @@ -6,13 +6,14 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const CIRCLE_TYPE = 'circle'; describe('Processor: Circle', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -26,7 +27,7 @@ describe('Processor: Circle', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/common_processor_fields.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/common_processor_fields.test.tsx index af5c8c50abf7b..ebffd5adf78c1 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/common_processor_fields.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/common_processor_fields.test.tsx @@ -6,13 +6,14 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const BYTES_TYPE = 'bytes'; describe('Processor: Common Fields For All Processors', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -26,7 +27,7 @@ describe('Processor: Common Fields For All Processors', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/community_id.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/community_id.test.tsx index 0338cb8e04348..e571474576ff2 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/community_id.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/community_id.test.tsx @@ -6,13 +6,14 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const COMMUNITY_ID_TYPE = 'community_id'; describe('Processor: Community id', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -26,7 +27,7 @@ describe('Processor: Community id', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/convert.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/convert.test.tsx index 5a58a7b595c90..3090e59b32e0b 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/convert.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/convert.test.tsx @@ -6,7 +6,7 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; // Default parameter values automatically added to the `convert processor` when saved const defaultConvertParameters = { @@ -23,6 +23,7 @@ const CONVERT_TYPE = 'convert'; describe('Processor: Convert', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -36,7 +37,7 @@ describe('Processor: Convert', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/csv.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/csv.test.tsx index b40b46967dae5..6414976b56f9a 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/csv.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/csv.test.tsx @@ -6,7 +6,7 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; // Default parameter values automatically added to the CSV processor when saved const defaultCSVParameters = { @@ -26,6 +26,7 @@ const CSV_TYPE = 'csv'; describe('Processor: CSV', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -39,7 +40,7 @@ describe('Processor: CSV', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/date.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/date.test.tsx index 390f8e0191ce9..22666ebbe2a98 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/date.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/date.test.tsx @@ -6,13 +6,14 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const DATE_TYPE = 'date'; describe('Processor: Date', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -26,7 +27,7 @@ describe('Processor: Date', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/date_index.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/date_index.test.tsx index 264db2c5b65c0..b9e990f36c15b 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/date_index.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/date_index.test.tsx @@ -6,13 +6,14 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const DATE_INDEX_TYPE = 'date_index_name'; describe('Processor: Date Index Name', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -26,7 +27,7 @@ describe('Processor: Date Index Name', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/dot_expander.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/dot_expander.test.tsx index eb93f4ea86449..7ebad2de01a92 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/dot_expander.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/dot_expander.test.tsx @@ -6,13 +6,14 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const DOT_EXPANDER_TYPE = 'dot_expander'; describe('Processor: Dot Expander', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -26,7 +27,7 @@ describe('Processor: Dot Expander', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/fail.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/fail.test.tsx index db5840379536a..9b8148bd0dffd 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/fail.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/fail.test.tsx @@ -6,12 +6,13 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const FAIL_TYPE = 'fail'; describe('Processor: Fail', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -25,7 +26,7 @@ describe('Processor: Fail', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/fingerprint.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/fingerprint.test.tsx index 7c2ca012a0460..49d7937fab002 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/fingerprint.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/fingerprint.test.tsx @@ -6,7 +6,7 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; // Default parameter values automatically added to the registered domain processor when saved const defaultFingerprintParameters = { @@ -25,6 +25,7 @@ const FINGERPRINT_TYPE = 'fingerprint'; describe('Processor: Fingerprint', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -38,7 +39,7 @@ describe('Processor: Fingerprint', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/network_direction.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/network_direction.test.tsx index 7a4c55d6f5e02..4f92aec06efd3 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/network_direction.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/network_direction.test.tsx @@ -6,7 +6,7 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; // Default parameter values automatically added to the network direction processor when saved const defaultNetworkDirectionParameters = { @@ -27,6 +27,7 @@ const NETWORK_DIRECTION_TYPE = 'network_direction'; describe('Processor: Network Direction', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -40,7 +41,7 @@ describe('Processor: Network Direction', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor.helpers.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor.helpers.tsx index ec68c3b3bfdf6..0e7431964c84b 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor.helpers.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor.helpers.tsx @@ -7,10 +7,9 @@ import { act } from 'react-dom/test-utils'; import React from 'react'; -import axios from 'axios'; -import axiosXhrAdapter from 'axios/lib/adapters/xhr'; import { usageCollectionPluginMock } from 'src/plugins/usage_collection/public/mocks'; +import { HttpSetup } from 'kibana/public'; import { registerTestBed, TestBed } from '@kbn/test-jest-helpers'; import { stubWebWorker } from '@kbn/test-jest-helpers'; @@ -102,7 +101,9 @@ const createActions = (testBed: TestBed) => { }; }; -export const setup = async (props: Props): Promise => { +export const setup = async (httpSetup: HttpSetup, props: Props): Promise => { + apiService.setup(httpSetup, uiMetricService); + const testBed = testBedSetup(props); return { ...testBed, @@ -110,19 +111,11 @@ export const setup = async (props: Props): Promise => { }; }; -const mockHttpClient = axios.create({ adapter: axiosXhrAdapter }); - export const setupEnvironment = () => { // Initialize mock services uiMetricService.setup(usageCollectionPluginMock.createSetupContract()); - // @ts-ignore - apiService.setup(mockHttpClient, uiMetricService); - - const { httpRequestsMockHelpers } = initHttpRequests(); - return { - httpRequestsMockHelpers, - }; + return initHttpRequests(); }; export const getProcessorValue = (onUpdate: jest.Mock, type: string) => { diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor_form.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor_form.test.tsx index de0061dcb0407..b2e2fb81f2c86 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor_form.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor_form.test.tsx @@ -6,11 +6,12 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult } from './processor.helpers'; +import { setup, SetupResult, setupEnvironment } from './processor.helpers'; describe('Processor: Bytes', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -24,7 +25,7 @@ describe('Processor: Bytes', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/registered_domain.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/registered_domain.test.tsx index 962e099f5b667..dcf332912a94b 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/registered_domain.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/registered_domain.test.tsx @@ -6,7 +6,7 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; // Default parameter values automatically added to the registered domain processor when saved const defaultRegisteredDomainParameters = { @@ -21,6 +21,7 @@ const REGISTERED_DOMAIN_TYPE = 'registered_domain'; describe('Processor: Registered Domain', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -34,7 +35,7 @@ describe('Processor: Registered Domain', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/set.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/set.test.tsx index 544b8aeb51c05..ebfa678648904 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/set.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/set.test.tsx @@ -6,13 +6,14 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; const SET_TYPE = 'set'; describe('Processor: Set', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -26,7 +27,7 @@ describe('Processor: Set', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/uri_parts.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/uri_parts.test.tsx index 442788a7f75aa..9062fcc02f7f8 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/uri_parts.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/uri_parts.test.tsx @@ -6,7 +6,7 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; // Default parameter values automatically added to the URI parts processor when saved const defaultUriPartsParameters = { @@ -19,6 +19,7 @@ const URI_PARTS_TYPE = 'uri_parts'; describe('Processor: URI parts', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -32,7 +33,7 @@ describe('Processor: URI parts', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/user_agent.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/user_agent.test.tsx index fa1c24c9dfb39..ed778aa1cc1f3 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/user_agent.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/user_agent.test.tsx @@ -6,7 +6,7 @@ */ import { act } from 'react-dom/test-utils'; -import { setup, SetupResult, getProcessorValue } from './processor.helpers'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; // Default parameter values automatically added to the user agent processor when saved const defaultUserAgentParameters = { @@ -24,6 +24,7 @@ const USER_AGENT_TYPE = 'user_agent'; describe('Processor: User Agent', () => { let onUpdate: jest.Mock; let testBed: SetupResult; + const { httpSetup } = setupEnvironment(); beforeAll(() => { jest.useFakeTimers(); @@ -37,7 +38,7 @@ describe('Processor: User Agent', () => { onUpdate = jest.fn(); await act(async () => { - testBed = await setup({ + testBed = await setup(httpSetup, { value: { processors: [], }, From 92e0b195b07c603716be11f816ab4e3cf1c4df9c Mon Sep 17 00:00:00 2001 From: Pablo Machado Date: Wed, 13 Apr 2022 15:29:41 +0200 Subject: [PATCH 015/305] Fix empty User entry on All Users page (#129995) --- .../__snapshots__/empty_value.test.tsx.snap | 2 +- .../empty_value/empty_value.test.tsx | 2 +- .../components/empty_value/translations.ts | 2 +- .../common/components/tables/helpers.test.tsx | 4 +-- .../users/components/all_users/index.test.tsx | 24 +++++++++++++++++ .../users/components/all_users/index.tsx | 27 +++++++++++-------- 6 files changed, 45 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/security_solution/public/common/components/empty_value/__snapshots__/empty_value.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/empty_value/__snapshots__/empty_value.test.tsx.snap index 142ed7a0d7175..77edd4e1fe991 100644 --- a/x-pack/plugins/security_solution/public/common/components/empty_value/__snapshots__/empty_value.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/empty_value/__snapshots__/empty_value.test.tsx.snap @@ -2,6 +2,6 @@ exports[`EmptyValue it renders against snapshot 1`] = `

- (Empty String) + (Empty string)

`; diff --git a/x-pack/plugins/security_solution/public/common/components/empty_value/empty_value.test.tsx b/x-pack/plugins/security_solution/public/common/components/empty_value/empty_value.test.tsx index c455ed1953c28..c869bb5e6810c 100644 --- a/x-pack/plugins/security_solution/public/common/components/empty_value/empty_value.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/empty_value/empty_value.test.tsx @@ -39,7 +39,7 @@ describe('EmptyValue', () => {

{getEmptyString()}

); - expect(wrapper.text()).toBe('(Empty String)'); + expect(wrapper.text()).toBe('(Empty string)'); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/empty_value/translations.ts b/x-pack/plugins/security_solution/public/common/components/empty_value/translations.ts index d598f4856413e..9eaddfd8650f0 100644 --- a/x-pack/plugins/security_solution/public/common/components/empty_value/translations.ts +++ b/x-pack/plugins/security_solution/public/common/components/empty_value/translations.ts @@ -10,6 +10,6 @@ import { i18n } from '@kbn/i18n'; export const EMPTY_STRING = i18n.translate( 'xpack.securitySolution.emptyString.emptyStringDescription', { - defaultMessage: 'Empty String', + defaultMessage: 'Empty string', } ); diff --git a/x-pack/plugins/security_solution/public/common/components/tables/helpers.test.tsx b/x-pack/plugins/security_solution/public/common/components/tables/helpers.test.tsx index bc397292af4ec..36acb0abc219e 100644 --- a/x-pack/plugins/security_solution/public/common/components/tables/helpers.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/tables/helpers.test.tsx @@ -58,7 +58,7 @@ describe('Table Helpers', () => { }); const wrapper = mount({rowItem}); expect(wrapper.find('[data-test-subj="render-content-attrName"]').first().text()).toBe( - '(Empty String)' + '(Empty string)' ); }); @@ -119,7 +119,7 @@ describe('Table Helpers', () => { }); const wrapper = mount({rowItems}); expect(wrapper.find('[data-test-subj="render-content-attrName"]').first().text()).toBe( - '(Empty String)' + '(Empty string)' ); }); diff --git a/x-pack/plugins/security_solution/public/users/components/all_users/index.test.tsx b/x-pack/plugins/security_solution/public/users/components/all_users/index.test.tsx index 117a62e0494df..95cc6ceef4e62 100644 --- a/x-pack/plugins/security_solution/public/users/components/all_users/index.test.tsx +++ b/x-pack/plugins/security_solution/public/users/components/all_users/index.test.tsx @@ -48,5 +48,29 @@ describe('Users Table Component', () => { expect(getAllByRole('columnheader').length).toBe(3); expect(getByText(userName)).toBeInTheDocument(); }); + + test('it renders empty string token when users name is empty', () => { + const { getByTestId } = render( + + {}} + /> + + ); + + expect(getByTestId('table-allUsers-loading-false')).toHaveTextContent('(Empty string)'); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/users/components/all_users/index.tsx b/x-pack/plugins/security_solution/public/users/components/all_users/index.tsx index 9a00a637f551d..fff8a188fd0a6 100644 --- a/x-pack/plugins/security_solution/public/users/components/all_users/index.tsx +++ b/x-pack/plugins/security_solution/public/users/components/all_users/index.tsx @@ -10,6 +10,7 @@ import { useDispatch } from 'react-redux'; import { FormattedRelativePreferenceDate } from '../../../common/components/formatted_date'; import { UserDetailsLink } from '../../../common/components/links'; +import { getOrEmptyTagFromValue } from '../../../common/components/empty_value'; import { Columns, @@ -66,12 +67,14 @@ const getUsersColumns = (): UsersTableColumns => [ sortable: true, mobileOptions: { show: true }, render: (name) => - getRowItemDraggables({ - rowItems: [name], - attrName: 'user.name', - idPrefix: `users-table-${name}-name`, - render: (item) => , - }), + name != null && name.length > 0 + ? getRowItemDraggables({ + rowItems: [name], + attrName: 'user.name', + idPrefix: `users-table-${name}-name`, + render: (item) => , + }) + : getOrEmptyTagFromValue(name), }, { field: 'lastSeen', @@ -88,11 +91,13 @@ const getUsersColumns = (): UsersTableColumns => [ truncateText: false, mobileOptions: { show: true }, render: (domain) => - getRowItemDraggables({ - rowItems: [domain], - attrName: 'user.domain', - idPrefix: `users-table-${domain}-domain`, - }), + domain != null && domain.length > 0 + ? getRowItemDraggables({ + rowItems: [domain], + attrName: 'user.domain', + idPrefix: `users-table-${domain}-domain`, + }) + : getOrEmptyTagFromValue(domain), }, ]; From 716a3a02e97668473c10bd6ba300b949d9776bdf Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Wed, 13 Apr 2022 08:30:26 -0500 Subject: [PATCH 016/305] [data view mgmt] Fix flaky functional test (#129971) * restore index pattern filter test * add retries Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- test/functional/apps/management/_index_pattern_filter.ts | 2 +- test/functional/page_objects/settings_page.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test/functional/apps/management/_index_pattern_filter.ts b/test/functional/apps/management/_index_pattern_filter.ts index 732065282d546..c0f215e560fb0 100644 --- a/test/functional/apps/management/_index_pattern_filter.ts +++ b/test/functional/apps/management/_index_pattern_filter.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); // FLAKY: https://github.com/elastic/kibana/issues/128558 - describe.skip('index pattern filter', function describeIndexTests() { + describe('data view filter', function describeIndexTests() { before(async function () { await esArchiver.emptyKibanaIndex(); await kibanaServer.uiSettings.replace({}); diff --git a/test/functional/page_objects/settings_page.ts b/test/functional/page_objects/settings_page.ts index dfaaecff0a0c7..4f51452197532 100644 --- a/test/functional/page_objects/settings_page.ts +++ b/test/functional/page_objects/settings_page.ts @@ -273,8 +273,12 @@ export class SettingsPageObject extends FtrService { async clearFieldTypeFilter(type: string) { await this.testSubjects.clickWhenNotDisabled('indexedFieldTypeFilterDropdown'); - await this.testSubjects.existOrFail('indexedFieldTypeFilterDropdown-popover'); - await this.testSubjects.existOrFail(`indexedFieldTypeFilterDropdown-option-${type}-checked`); + await this.retry.try(async () => { + await this.testSubjects.existOrFail('indexedFieldTypeFilterDropdown-popover'); + }); + await this.retry.try(async () => { + await this.testSubjects.existOrFail(`indexedFieldTypeFilterDropdown-option-${type}-checked`); + }); await this.testSubjects.click(`indexedFieldTypeFilterDropdown-option-${type}-checked`); await this.testSubjects.existOrFail(`indexedFieldTypeFilterDropdown-option-${type}`); await this.browser.pressKeys(this.browser.keys.ESCAPE); From 1186d0b2fea2f58ce7425727cca6fcdcbc3d9b9a Mon Sep 17 00:00:00 2001 From: spalger Date: Wed, 13 Apr 2022 09:15:36 -0500 Subject: [PATCH 017/305] skip flaky suite (#129837) (#129836) --- .../components/artifact_list_page/artifact_list_page.test.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/management/components/artifact_list_page/artifact_list_page.test.tsx b/x-pack/plugins/security_solution/public/management/components/artifact_list_page/artifact_list_page.test.tsx index 383a72031ed76..86e66319891f1 100644 --- a/x-pack/plugins/security_solution/public/management/components/artifact_list_page/artifact_list_page.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/artifact_list_page/artifact_list_page.test.tsx @@ -18,7 +18,9 @@ import { jest.mock('../../../common/components/user_privileges'); -describe('When using the ArtifactListPage component', () => { +// FLAKY: https://github.com/elastic/kibana/issues/129837 +// FLAKY: https://github.com/elastic/kibana/issues/129836 +describe.skip('When using the ArtifactListPage component', () => { let render: ( props?: Partial ) => ReturnType; From 1e4069882ee69d612cba607b44a0c2ba1bca419c Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Wed, 13 Apr 2022 09:38:46 -0500 Subject: [PATCH 018/305] [Security Solution] hide artifact cards if no endpoint authz (#129829) --- .../components/no_permissons/index.ts | 8 ++ .../no_permissons/no_permissions.tsx | 38 ++++++++ .../public/management/pages/index.tsx | 40 ++------ .../index.tsx | 96 +++++++++++-------- .../endpoint_policy_edit_extension.tsx | 22 ++++- 5 files changed, 131 insertions(+), 73 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/management/components/no_permissons/index.ts create mode 100644 x-pack/plugins/security_solution/public/management/components/no_permissons/no_permissions.tsx diff --git a/x-pack/plugins/security_solution/public/management/components/no_permissons/index.ts b/x-pack/plugins/security_solution/public/management/components/no_permissons/index.ts new file mode 100644 index 0000000000000..25421ba1dcd1a --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/no_permissons/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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { NoPermissions } from './no_permissions'; diff --git a/x-pack/plugins/security_solution/public/management/components/no_permissons/no_permissions.tsx b/x-pack/plugins/security_solution/public/management/components/no_permissons/no_permissions.tsx new file mode 100644 index 0000000000000..87a5b5cf7142b --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/no_permissons/no_permissions.tsx @@ -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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { EuiEmptyPrompt, EuiText } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const NoPermissions = memo(() => { + return ( + <> + + } + body={ + + + + } + /> + + ); +}); +NoPermissions.displayName = 'NoPermissions'; diff --git a/x-pack/plugins/security_solution/public/management/pages/index.tsx b/x-pack/plugins/security_solution/public/management/pages/index.tsx index fb23b7466623c..cc90aca4b8022 100644 --- a/x-pack/plugins/security_solution/public/management/pages/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/index.tsx @@ -7,8 +7,7 @@ import React, { memo } from 'react'; import { Route, Switch, Redirect } from 'react-router-dom'; -import { EuiEmptyPrompt, EuiLoadingSpinner, EuiText } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; +import { EuiLoadingSpinner } from '@elastic/eui'; import { MANAGEMENT_ROUTING_ENDPOINTS_PATH, MANAGEMENT_ROUTING_EVENT_FILTERS_PATH, @@ -29,35 +28,7 @@ import { getEndpointListPath } from '../common/routing'; import { useUserPrivileges } from '../../common/components/user_privileges'; import { HostIsolationExceptionsContainer } from './host_isolation_exceptions'; import { BlocklistContainer } from './blocklist'; - -const NoPermissions = memo(() => { - return ( - <> - - } - body={ - - - - } - /> - - - ); -}); -NoPermissions.displayName = 'NoPermissions'; +import { NoPermissions } from '../components/no_permissons'; const EndpointTelemetry = () => ( @@ -99,7 +70,12 @@ export const ManagementContainer = memo(() => { } if (!canAccessEndpointManagement) { - return ; + return ( + <> + + + + ); } return ( diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_package_custom_extension/index.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_package_custom_extension/index.tsx index 68f3dbd494a0d..94c9c073d483c 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_package_custom_extension/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_package_custom_extension/index.tsx @@ -23,6 +23,8 @@ import { EventFiltersApiClient } from '../../../../event_filters/service/event_f import { HostIsolationExceptionsApiClient } from '../../../../host_isolation_exceptions/host_isolation_exceptions_api_client'; import { BlocklistsApiClient } from '../../../../blocklist/services'; import { useCanSeeHostIsolationExceptionsMenu } from '../../../../host_isolation_exceptions/view/hooks'; +import { useEndpointPrivileges } from '../../../../../../common/components/user_privileges/endpoint'; +import { NoPermissions } from '../../../../../components/no_permissons'; export const TRUSTED_APPS_LABELS = { artifactsSummaryApiError: (error: string) => @@ -97,6 +99,7 @@ export const EndpointPackageCustomExtension = memo { const http = useHttp(); const canSeeHostIsolationExceptions = useCanSeeHostIsolationExceptionsMenu(); + const { canAccessEndpointManagement } = useEndpointPrivileges(); const trustedAppsApiClientInstance = useMemo( () => TrustedAppsApiClient.getInstance(http), @@ -113,47 +116,62 @@ export const EndpointPackageCustomExtension = memo BlocklistsApiClient.getInstance(http), [http]); + const blocklistsApiClientInstance = useMemo( + () => BlocklistsApiClient.getInstance(http), + [http] + ); - return ( -
- - - - {canSeeHostIsolationExceptions && ( - <> - - - - )} - - -
+ const artifactCards = useMemo( + () => ( +
+ + + + {canSeeHostIsolationExceptions && ( + <> + + + + )} + + +
+ ), + [ + blocklistsApiClientInstance, + canSeeHostIsolationExceptions, + eventFiltersApiClientInstance, + hostIsolationExceptionsApiClientInstance, + trustedAppsApiClientInstance, + props, + ] ); + + return canAccessEndpointManagement ? artifactCards : ; } ); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension.tsx index 704ed6b2233c7..20ab62a099c8b 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_edit_extension.tsx @@ -41,6 +41,7 @@ import { SEARCHABLE_FIELDS as BLOCKLIST_SEARCHABLE_FIELDS } from '../../../block import { SEARCHABLE_FIELDS as HOST_ISOLATION_EXCEPTIONS_SEARCHABLE_FIELDS } from '../../../host_isolation_exceptions/constants'; import { SEARCHABLE_FIELDS as EVENT_FILTERS_SEARCHABLE_FIELDS } from '../../../event_filters/constants'; import { SEARCHABLE_FIELDS as TRUSTED_APPS_SEARCHABLE_FIELDS } from '../../../trusted_apps/constants'; +import { useEndpointPrivileges } from '../../../../../common/components/user_privileges/endpoint'; export const BLOCKLISTS_LABELS = { artifactsSummaryApiError: (error: string) => @@ -158,6 +159,7 @@ const WrappedPolicyDetailsForm = memo<{ const http = useHttp(); const blocklistsApiClientInstance = useMemo(() => BlocklistsApiClient.getInstance(http), [http]); + const { canAccessEndpointManagement } = useEndpointPrivileges(); const hostIsolationExceptionsApiClientInstance = useMemo( () => HostIsolationExceptionsApiClient.getInstance(http), @@ -225,8 +227,8 @@ const WrappedPolicyDetailsForm = memo<{ }); }, [onChange, updatedPolicy]); - return ( -
+ const artifactCards = useMemo( + () => ( <>
@@ -276,6 +278,22 @@ const WrappedPolicyDetailsForm = memo<{ />
+ + ), + [ + blocklistsApiClientInstance, + eventFiltersApiClientInstance, + hostIsolationExceptionsApiClientInstance, + policyId, + privileges.canIsolateHost, + trustedAppsApiClientInstance, + ] + ); + + return ( +
+ <> + {canAccessEndpointManagement && artifactCards}
From 724cd402674f48002d2c234aa5e4bd0ce645d998 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 13 Apr 2022 08:09:24 -0700 Subject: [PATCH 019/305] [DOCS] Edit get tags API (#129963) --- docs/api/cases/cases-api-get-tags.asciidoc | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/docs/api/cases/cases-api-get-tags.asciidoc b/docs/api/cases/cases-api-get-tags.asciidoc index 426a7e91a0f47..44d2bf9fffd1f 100644 --- a/docs/api/cases/cases-api-get-tags.asciidoc +++ b/docs/api/cases/cases-api-get-tags.asciidoc @@ -4,7 +4,7 @@ Get tags ++++ -Aggregates and returns all unique tags from all cases. +Aggregates and returns a list of case tags. === Request @@ -21,10 +21,6 @@ You must have `read` privileges for the *Cases* feature in the *Management*, === Path parameters -``:: -(Required, string) An identifier for the case to retrieve. Use -<> to retrieve case IDs. - ``:: (Optional, string) An identifier for the space. If it is not specified, the default space is used. @@ -32,9 +28,9 @@ default space is used. === Query parameters `owner`:: -(Optional, string or array of strings) Specifies the set of applications to -limit the retrieved tags. If not specified, the response contains all tags from -cases that the user has access to read. +(Optional, string or array of strings) A filter to limit the retrieved tags to a specific set of applications. +Valid values are: `cases`, `observability`, and `securitySolution`. If this parameter is omitted, the response +contains tags from all cases that the user has access to read. ==== Response code @@ -43,16 +39,13 @@ cases that the user has access to read. ==== Example -Gets all tags for all cases: - [source,sh] -------------------------------------------------- GET api/cases/tags -------------------------------------------------- // KIBANA -The API returns a JSON object with the names and email addresses of users who -opened cases. For example: +The API returns a JSON object with tags from all the cases that the user has access to read. For example: [source,json] -------------------------------------------------- @@ -62,4 +55,4 @@ opened cases. For example: "social engineering", "bubblegum" ] --------------------------------------------------- \ No newline at end of file +-------------------------------------------------- From 7538645e8f79753e75fb74e7a5f38c0c5c87a5db Mon Sep 17 00:00:00 2001 From: Dominique Clarke Date: Wed, 13 Apr 2022 11:09:41 -0400 Subject: [PATCH 020/305] [Uptime] Updates default monitor management browser schedule to 10 minutes, and adjusts beta badge content (#130040) * uptime - update monitor management beta tooltip content * uptime - adjust default schedule for browser monitors to 10 minutes * adjust tests Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/components/fleet_package/common/normalizers.ts | 6 ++++-- .../components/fleet_package/contexts/browser_context.tsx | 6 +++++- x-pack/plugins/uptime/public/routes.tsx | 3 ++- .../apps/uptime/synthetics_integration.ts | 8 ++++---- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/uptime/public/components/fleet_package/common/normalizers.ts b/x-pack/plugins/uptime/public/components/fleet_package/common/normalizers.ts index e71a0511cbaf1..8f3dd82b3dd93 100644 --- a/x-pack/plugins/uptime/public/components/fleet_package/common/normalizers.ts +++ b/x-pack/plugins/uptime/public/components/fleet_package/common/normalizers.ts @@ -5,10 +5,11 @@ * 2.0. */ -import { CommonFields, ConfigKey } from '../types'; +import { CommonFields, ConfigKey, DataStream } from '../types'; import { NewPackagePolicyInput } from '../../../../../fleet/common'; import { defaultValues as commonDefaultValues } from './default_values'; import { DEFAULT_NAMESPACE_STRING } from '../../../../common/constants'; +import { defaultConfig } from '../contexts'; // TO DO: create a standard input format that all fields resolve to export type Normalizer = (fields: NewPackagePolicyInput['vars']) => unknown; @@ -64,6 +65,7 @@ export const commonNormalizers: CommonNormalizerMap = { [ConfigKey.LOCATIONS]: getCommonNormalizer(ConfigKey.LOCATIONS), [ConfigKey.SCHEDULE]: (fields) => { const value = fields?.[ConfigKey.SCHEDULE]?.value; + const type = fields?.[ConfigKey.MONITOR_TYPE]?.value as DataStream; if (value) { const fullString = JSON.parse(fields?.[ConfigKey.SCHEDULE]?.value); const fullSchedule = fullString.replace('@every ', ''); @@ -74,7 +76,7 @@ export const commonNormalizers: CommonNormalizerMap = { number, }; } else { - return commonDefaultValues[ConfigKey.SCHEDULE]; + return defaultConfig[type][ConfigKey.SCHEDULE]; } }, [ConfigKey.APM_SERVICE_NAME]: getCommonNormalizer(ConfigKey.APM_SERVICE_NAME), diff --git a/x-pack/plugins/uptime/public/components/fleet_package/contexts/browser_context.tsx b/x-pack/plugins/uptime/public/components/fleet_package/contexts/browser_context.tsx index 015023318556a..f7b67488e4bcc 100644 --- a/x-pack/plugins/uptime/public/components/fleet_package/contexts/browser_context.tsx +++ b/x-pack/plugins/uptime/public/components/fleet_package/contexts/browser_context.tsx @@ -6,7 +6,7 @@ */ import React, { createContext, useContext, useMemo, useState } from 'react'; -import { BrowserSimpleFields, ConfigKey, DataStream } from '../types'; +import { BrowserSimpleFields, ConfigKey, DataStream, ScheduleUnit } from '../types'; import { defaultValues as commonDefaultValues } from '../common/default_values'; interface BrowserSimpleFieldsContext { @@ -22,6 +22,10 @@ interface BrowserSimpleFieldsContextProvider { export const initialValues: BrowserSimpleFields = { ...commonDefaultValues, + [ConfigKey.SCHEDULE]: { + unit: ScheduleUnit.MINUTES, + number: '10', + }, [ConfigKey.METADATA]: { script_source: { is_generated_script: false, diff --git a/x-pack/plugins/uptime/public/routes.tsx b/x-pack/plugins/uptime/public/routes.tsx index e66954a5fd4af..ed7f2b5001b34 100644 --- a/x-pack/plugins/uptime/public/routes.tsx +++ b/x-pack/plugins/uptime/public/routes.tsx @@ -259,7 +259,8 @@ const getRoutes = (): RouteProps[] => { diff --git a/x-pack/test/functional_synthetics/apps/uptime/synthetics_integration.ts b/x-pack/test/functional_synthetics/apps/uptime/synthetics_integration.ts index 93635ea0b0a73..972dfe5a2acab 100644 --- a/x-pack/test/functional_synthetics/apps/uptime/synthetics_integration.ts +++ b/x-pack/test/functional_synthetics/apps/uptime/synthetics_integration.ts @@ -555,7 +555,7 @@ export default function (providerContext: FtrProviderContext) { monitorType: 'browser', config: { screenshots: 'on', - schedule: '@every 3m', + schedule: '@every 10m', timeout: null, tags: [config.tags], throttling: '5d/3u/20l', @@ -605,7 +605,7 @@ export default function (providerContext: FtrProviderContext) { monitorType: 'browser', config: { screenshots: 'on', - schedule: '@every 3m', + schedule: '@every 10m', timeout: null, tags: [config.tags], throttling: '5d/3u/20l', @@ -664,7 +664,7 @@ export default function (providerContext: FtrProviderContext) { monitorType: 'browser', config: { screenshots: advancedConfig.screenshots, - schedule: '@every 3m', + schedule: '@every 10m', timeout: null, tags: [config.tags], throttling: '1337d/1338u/1339l', @@ -728,7 +728,7 @@ export default function (providerContext: FtrProviderContext) { monitorType: 'browser', config: { screenshots: advancedConfig.screenshots, - schedule: '@every 3m', + schedule: '@every 10m', timeout: null, tags: [config.tags], 'service.name': config.apmServiceName, From f683d1e664f3680bc08c862106bbf9850755f55c Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 13 Apr 2022 08:12:17 -0700 Subject: [PATCH 021/305] [DOCS] Set, get, update case configuration (#129271) --- docs/api/cases.asciidoc | 9 +- .../cases-api-get-configuration.asciidoc | 95 ++++++++++ .../cases-api-set-configuration.asciidoc | 163 ++++++++++++++++++ .../cases-api-update-configuration.asciidoc | 129 ++++++++++++++ 4 files changed, 394 insertions(+), 2 deletions(-) create mode 100644 docs/api/cases/cases-api-get-configuration.asciidoc create mode 100644 docs/api/cases/cases-api-set-configuration.asciidoc create mode 100644 docs/api/cases/cases-api-update-configuration.asciidoc diff --git a/docs/api/cases.asciidoc b/docs/api/cases.asciidoc index 3b5bfaeceaff4..0033a31fb8905 100644 --- a/docs/api/cases.asciidoc +++ b/docs/api/cases.asciidoc @@ -16,14 +16,15 @@ these APIs: * <> * <> * <> -* {security-guide}/cases-get-connector.html[Get current connector] +* <> * <> * <> * {security-guide}/cases-api-push.html[Push case] -* {security-guide}/assign-connector.html[Set default Elastic Security UI connector] +* <> * {security-guide}/case-api-update-connector.html[Update case configurations] * <> * <> +* <> //ADD include::cases/cases-api-add-comment.asciidoc[leveloffset=+1] @@ -40,8 +41,12 @@ include::cases/cases-api-get-case-activity.asciidoc[leveloffset=+1] include::cases/cases-api-get-case.asciidoc[leveloffset=+1] include::cases/cases-api-get-status.asciidoc[leveloffset=+1] include::cases/cases-api-get-comments.asciidoc[leveloffset=+1] +include::cases/cases-api-get-configuration.asciidoc[leveloffset=+1] include::cases/cases-api-get-reporters.asciidoc[leveloffset=+1] include::cases/cases-api-get-tags.asciidoc[leveloffset=+1] +//SET +include::cases/cases-api-set-configuration.asciidoc[leveloffset=+1] //UPDATE include::cases/cases-api-update.asciidoc[leveloffset=+1] include::cases/cases-api-update-comment.asciidoc[leveloffset=+1] +include::cases/cases-api-update-configuration.asciidoc[leveloffset=+1] diff --git a/docs/api/cases/cases-api-get-configuration.asciidoc b/docs/api/cases/cases-api-get-configuration.asciidoc new file mode 100644 index 0000000000000..778e95949e3f5 --- /dev/null +++ b/docs/api/cases/cases-api-get-configuration.asciidoc @@ -0,0 +1,95 @@ +[[cases-get-configuration]] +== Get case configuration API +++++ +Get configuration +++++ + +Retrieves external connection details, such as the closure type and +default connector for cases. + +=== {api-request-title} + +`GET :/api/cases/configure` + +`GET :/s//api/cases/configure` + +=== {api-prereq-title} + +You must have `read` privileges for the *Cases* feature in the *Management*, +*{observability}*, or *Security* section of the +<>, depending on the +`owner` of the case configuration. + +=== {api-path-parms-title} + +``:: +(Optional, string) An identifier for the space. If it is not specified, the +default space is used. + +=== {api-query-parms-title} + +`owner`:: +(Optional, string or array of strings) A filter to limit the retrieved +details to a specific set of applications. Valid values are: `cases`, +`observability`, and `securitySolution`. If this parameter is omitted, the +response contains information for all applications that the user has access to +read. + +=== Response code + +`200`:: + Indicates a successful call. + +=== Example + +[source,sh] +-------------------------------------------------- +GET api/cases/configure?owner=securitySolution +-------------------------------------------------- +// KIBANA + +The API returns the following type of information: + +[source,json] +-------------------------------------------------- +[ + { + "owner": "securitySolution", + "closure_type": "close-by-user", + "created_at": "2020-03-30T13:31:38.083Z", + "created_by": { + "email": "admin@hms.gov.uk", + "full_name": "Mr Admin", + "username": "admin" + }, + "updated_at": null, + "updated_by": null, + "connector": { + "id": "131d4448-abe0-4789-939d-8ef60680b498", + "name": "my-jira", + "type": ".jira", + "fields": null + }, + "mappings": [ + { + "source": "title", + "target": "summary", + "action_type": "overwrite" + }, + { + "source": "description", + "target": "description", + "action_type": "overwrite" + }, + { + "source": "comments", + "target": "comments", + "action_type": "append" + } + ], + "version": "WzE3NywxXQ==", + "error": null, + "id": "7349772f-421a-4de3-b8bb-2d9b22ccee30" + } +] +-------------------------------------------------- diff --git a/docs/api/cases/cases-api-set-configuration.asciidoc b/docs/api/cases/cases-api-set-configuration.asciidoc new file mode 100644 index 0000000000000..2b0cbefc008ac --- /dev/null +++ b/docs/api/cases/cases-api-set-configuration.asciidoc @@ -0,0 +1,163 @@ +[[cases-api-set-configuration]] +== Set case configuration API +++++ +Set configuration +++++ + +Sets external connection details, such as the closure type and +default connector for cases. + +=== {api-request-title} + +`POST :/api/cases/configure` + +`POST :/s//api/cases/configure` + +=== {api-prereq-title} + +You must have `all` privileges for the *Cases* feature in the *Management*, +*{observability}*, or *Security* section of the +<>, depending on the +`owner` of the case configuration. + +=== {api-description-title} + +Connectors are used to interface with external systems. You must create a +connector before you can use it in your cases. Refer to <>. + +If you set a default connector, it is automatically selected when you create +cases in {kib}. If you use the <>, however, +you must still specify all of the connector details. + +=== {api-path-parms-title} + +``:: +(Optional, string) An identifier for the space. If it is not specified, the +default space is used. + +=== {api-request-body-title} + +`closure_type`:: +(Required, string) Specifies whether a case is automatically closed when it is +pushed to external systems. ++ +-- +Valid values are: + +* `close-by-pushing`: Cases are automatically closed when they are pushed. +* `close-by-user`: Cases are not automatically closed. +-- + +`connector`:: +(Required, object) An object that contains the connector configuration. ++ +.Properties of `connector` +[%collapsible%open] +==== +`fields`:: +(Required, object) An object that contains the connector fields. ++ +-- +TIP: The fields specified in the case configuration are not used and are not +propagated to individual cases, therefore it is recommended to set it to `null`. +-- + +`id`:: +(Required, string) The identifier for the connector. If you do not want a +default connector, use `none`. To retrieve connector IDs, use +<>. + +`name`:: +(Required, string) The name of the connector. If you do not want a default +connector, use `none`. To retrieve connector names, use +<>. + +`type`:: +(Required, string) The type of the connector. Valid values are: `.jira`, `.none`, +`.resilient`,`.servicenow`, `.servicenow-sir`, and `.swimlane`. +==== + +`owner`:: +(Required, string) The application that owns the case configuration. Valid +values are: `cases`, `observability`, or `securitySolution`. This value affects +whether you're setting case configuration details for {stack-manage-app}, +{observability}, or {security-app}. + +`settings`:: +(Optional, object) +An object that contains the case settings. ++ +.Properties of `settings` +[%collapsible%open] +==== +`syncAlerts`:: +(Required, boolean) Turns alert syncing on or off. +==== + +=== {api-response-codes-title} + +`200`:: + Indicates a successful call. + +=== {api-example-title} + +Sets the closure type and default connector for cases in **{stack-manage-app}**: + +[source,sh] +-------------------------------------------------- +POST api/cases/configure +{ + "owner": "cases", + "connector": { + "id": "131d4448-abe0-4789-939d-8ef60680b498", + "name": "my-serviceNow", + "type": ".servicenow", + "fields": null, + }, + "closure_type": "close-by-user" +} +-------------------------------------------------- + +The API returns the following response: + +[source,json] +-------------------------------------------------- +{ + "owner": "cases", + "closure_type": "close-by-user", + "created_at": "2022-04-02T01:09:02.303Z", + "created_by": { + "email": "moneypenny@hms.gov.uk", + "full_name": "Ms Moneypenny", + "username": "moneypenny" + }, + "updated_at": null, + "updated_by": null, + "connector": { + "id": "131d4448-abe0-4789-939d-8ef60680b498", + "name": "my-serviceNow", + "type": ".servicenow", + "fields": null, + }, + "mappings": [ + { + "source": "title", + "target": "short_description", + "action_type": "overwrite" + }, + { + "source":"description", + "target":"description", + "action_type":"overwrite" + }, + { + "source":"comments", + "target":"work_notes", + "action_type":"append" + } + ], + "version": "WzE3NywxXQ==", + "error": null, + "id": "7349772f-421a-4de3-b8bb-2d9b22ccee30", +} +-------------------------------------------------- diff --git a/docs/api/cases/cases-api-update-configuration.asciidoc b/docs/api/cases/cases-api-update-configuration.asciidoc new file mode 100644 index 0000000000000..cf7d2ea7d8cfd --- /dev/null +++ b/docs/api/cases/cases-api-update-configuration.asciidoc @@ -0,0 +1,129 @@ +[[cases-api-update-configuration]] +== Update case configuration API +++++ +Update configuration +++++ + +Updates external connection details, such as the closure type and default +connector for cases. + +=== {api-request-title} + +`PATCH :/api/cases/configure/` + +`PATCH :/s//api/cases/configure/` + +=== {api-prereq-title} + +You must have `all` privileges for the *Cases* feature in the *Management*, +*{observability}*, or *Security* section of the +<>, depending on the +`owner` of the case configuration. + +=== {api-description-title} + +Connectors are used to interface with external systems. You must create a +connector before you can it in your cases. Refer to <>. + +=== {api-path-parms-title} + +``:: +The identifier for the configuration. To retrieve the configuration IDs, use +<>. + +``:: +(Optional, string) An identifier for the space. If it is not specified, the +default space is used. + +=== Request body + +`closure_type`:: +(Optional, string) Determines whether a case is automatically closed when it is +pushed to external systems. Valid values are: ++ +-- +* `close-by-pushing`: Cases are automatically closed when they +are pushed. +* `close-by-user`: Cases are not automatically closed. +-- + +`connector`:: +(Optional, object) An object that contains the connector configuration. ++ +.Properties of `connector` +[%collapsible%open] +==== +`fields`:: +(Required, object) An object that contains the connector fields. ++ +-- +TIP: The fields specified in the case configuration are not used and are not +propagated to individual cases, therefore it is recommended to set it to `null`. +-- + +`id`:: +(Required, string) The identifier for the connector. To retrieve connector IDs, +use <>. + +`name`:: +(Required, string) The name of the connector. + +`type`:: +(Required, string) The type of the connector. Valid values are: `.servicenow`, +`.servicenow-sir`, `.jira`, `.resilient`, `.swimlane`, and `.none`. +==== + +`version`:: +(Required, string) The version of the connector. To retrieve the version value, +use <>. + +=== Response code + +`200`:: + Indicates a successful call. + +=== Example + +Change the closure type configuration option: + +[source,sh] +-------------------------------------------------- +PATCH api/cases/configure/3297a0f0-b5ec-11ec-b141-0fdb20a7f9a9 +{ + "closure_type": "close-by-pushing", + "version": "WzIwMiwxXQ==" +} +-------------------------------------------------- +// KIBANA + +The API returns the following: + +[source,json] +-------------------------------------------------- +{ + "closure_type": "close-by-user", + "owner": "cases", + "created_at": "2022-04-06T20:57:40.746Z", + "created_by": { + "email": "admin@hms.gov.uk", + "full_name": "Ms Admin", + "username": "admin" + }, + "updated_at": "2022-04-12T22:41:09.262Z", + "updated_by": { + "email": "admin@hms.gov.uk", + "full_name": "Ms Admin", + "username": "admin" + }, + "connector": { + "id": "none", + "name": "none", + "type": ".none", + "fields": null + }, + "mappings": [], + "version": "WzkwNiw1XQ==", + "error": null, + "id": "3297a0f0-b5ec-11ec-b141-0fdb20a7f9a9" +} +-------------------------------------------------- From f593625bfcda1c27090f66e0c0b921b30ba71739 Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Wed, 13 Apr 2022 17:29:20 +0200 Subject: [PATCH 022/305] [Workplace Search] Enable multi-tenant external connector (#130125) --- .../configured_sources_list.test.tsx | 4 +- .../add_source/configured_sources_list.tsx | 59 ++++++++----------- 2 files changed, 28 insertions(+), 35 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/configured_sources_list.test.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/configured_sources_list.test.tsx index f0e81748a6561..349da846ae904 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/configured_sources_list.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/configured_sources_list.test.tsx @@ -29,7 +29,7 @@ describe('ConfiguredSourcesList', () => { expect(wrapper.find('[data-test-subj="ConfiguredSourcesListItem"]')).toHaveLength(19); }); - it('does not show connect button for a connected external source', () => { + it('does show connect button for a connected external source', () => { const wrapper = shallow( { }} /> ); - expect(wrapper.find(EuiButtonEmptyTo)).toHaveLength(0); + expect(wrapper.find(EuiButtonEmptyTo)).toHaveLength(1); }); it('does show connect button for an unconnected external source', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/configured_sources_list.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/configured_sources_list.tsx index 6e4e4dcec2ba0..bbec096ae07d8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/configured_sources_list.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/components/add_source/configured_sources_list.tsx @@ -124,39 +124,32 @@ export const ConfiguredSourcesList: React.FC = ({ - { - // TODO: Remove this once external connectors are multi-tenant - // This prevents connecting more than one external content source - (serviceType !== 'external' || !connected) && - (((!isOrganization || (isOrganization && !accountContextOnly)) && ( - - {!connected - ? i18n.translate( - 'xpack.enterpriseSearch.workplaceSearch.contentSource.configuredSources.connectButton', - { - defaultMessage: 'Connect', - } - ) - : i18n.translate( - 'xpack.enterpriseSearch.workplaceSearch.contentSource.configuredSources.connectAnotherButton', - { - defaultMessage: 'Connect another', - } - )} - - )) || ( - - {ADD_SOURCE_ORG_SOURCES_TITLE} - - )) - } + {((!isOrganization || (isOrganization && !accountContextOnly)) && ( + + {!connected + ? i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.contentSource.configuredSources.connectButton', + { + defaultMessage: 'Connect', + } + ) + : i18n.translate( + 'xpack.enterpriseSearch.workplaceSearch.contentSource.configuredSources.connectAnotherButton', + { + defaultMessage: 'Connect another', + } + )} + + )) || ( + + {ADD_SOURCE_ORG_SOURCES_TITLE} + + )} From fb81c73699c0268d91591a1c40f0e894f7a568c3 Mon Sep 17 00:00:00 2001 From: najmiehsa <98463228+najmiehsa@users.noreply.github.com> Date: Wed, 13 Apr 2022 20:03:19 +0430 Subject: [PATCH 023/305] Added a new validation message (#130047) * Added a new validation message * Edited the validation message * Made changes following the review * [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' Co-authored-by: najmieh Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../use_fleet_server_host_form.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.tsx index afe96713f065d..ac196576ba889 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.tsx @@ -77,7 +77,14 @@ function validateFleetServerHosts(value: string[]) { const res: Array<{ message: string; index: number }> = []; const hostIndexes: { [key: string]: number[] } = {}; value.forEach((val, idx) => { - if (!val.match(URL_REGEX)) { + if (!val) { + res.push({ + message: i18n.translate('xpack.fleet.settings.fleetServerHostsRequiredError', { + defaultMessage: 'Host URL is required', + }), + index: idx, + }); + } else if (!val.match(URL_REGEX)) { res.push({ message: i18n.translate('xpack.fleet.settings.fleetServerHostsError', { defaultMessage: 'Invalid URL', From bed793a6a1be509bd31a084e6b3c4bc6fdaf1056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Wed, 13 Apr 2022 17:34:07 +0200 Subject: [PATCH 024/305] [EBT] Add Shipper "FullStory" (#129927) --- packages/elastic-analytics/BUILD.bazel | 2 + .../analytics_client/analytics_client.test.ts | 40 ++- .../src/analytics_client/context_service.ts | 14 +- .../elastic-analytics/src/events/types.ts | 27 ++ packages/elastic-analytics/src/index.ts | 6 +- .../shippers/fullstory/format_payload.test.ts | 146 ++++++++++ .../src/shippers/fullstory/format_payload.ts | 84 ++++++ .../fullstory/fullstory_shipper.test.mocks.ts | 24 ++ .../fullstory/fullstory_shipper.test.ts | 136 +++++++++ .../shippers/fullstory/fullstory_shipper.ts | 92 +++++++ .../fullstory/get_parsed_version.test.ts | 38 +++ .../shippers/fullstory/get_parsed_version.ts | 22 ++ .../src/shippers/fullstory/index.ts | 11 + .../shippers/fullstory/load_snippet.test.ts | 46 ++++ .../src/shippers/fullstory/load_snippet.ts | 89 ++++++ .../src/shippers/fullstory/types.ts | 74 +++++ .../elastic-analytics/src/shippers/index.ts | 3 + src/plugins/telemetry/public/plugin.ts | 7 +- .../analytics_plugin_a/server/plugin.ts | 9 +- test/analytics/config.ts | 2 + .../tests/analytics_from_the_browser.ts | 12 +- .../tests/analytics_from_the_server.ts | 2 +- x-pack/plugins/cloud/public/fullstory.ts | 90 ------ .../plugins/cloud/public/plugin.test.mocks.ts | 23 -- x-pack/plugins/cloud/public/plugin.test.ts | 182 +++++++------ x-pack/plugins/cloud/public/plugin.tsx | 257 +++++++++++------- 26 files changed, 1129 insertions(+), 309 deletions(-) create mode 100644 packages/elastic-analytics/src/shippers/fullstory/format_payload.test.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/format_payload.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.test.mocks.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.test.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/get_parsed_version.test.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/get_parsed_version.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/index.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/load_snippet.test.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/load_snippet.ts create mode 100644 packages/elastic-analytics/src/shippers/fullstory/types.ts delete mode 100644 x-pack/plugins/cloud/public/fullstory.ts delete mode 100644 x-pack/plugins/cloud/public/plugin.test.mocks.ts diff --git a/packages/elastic-analytics/BUILD.bazel b/packages/elastic-analytics/BUILD.bazel index a73c908c7ea52..dcf9d33772542 100644 --- a/packages/elastic-analytics/BUILD.bazel +++ b/packages/elastic-analytics/BUILD.bazel @@ -36,6 +36,7 @@ NPM_MODULE_EXTRA_FILES = [ # "@npm//name-of-package" # eg. "@npm//lodash" RUNTIME_DEPS = [ + "@npm//moment", "@npm//rxjs", ] @@ -51,6 +52,7 @@ RUNTIME_DEPS = [ TYPES_DEPS = [ "@npm//@types/node", "@npm//@types/jest", + "@npm//moment", "@npm//rxjs", "//packages/kbn-logging:npm_module_types", "//packages/kbn-logging-mocks:npm_module_types", diff --git a/packages/elastic-analytics/src/analytics_client/analytics_client.test.ts b/packages/elastic-analytics/src/analytics_client/analytics_client.test.ts index 63e8e91e8a5ff..08515ecae8d1e 100644 --- a/packages/elastic-analytics/src/analytics_client/analytics_client.test.ts +++ b/packages/elastic-analytics/src/analytics_client/analytics_client.test.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line max-classes-per-file import type { Observable } from 'rxjs'; -import { BehaviorSubject, lastValueFrom, Subject } from 'rxjs'; +import { BehaviorSubject, firstValueFrom, lastValueFrom, Subject } from 'rxjs'; import type { MockedLogger } from '@kbn/logging-mocks'; import { loggerMock } from '@kbn/logging-mocks'; import { AnalyticsClient } from './analytics_client'; @@ -528,6 +528,44 @@ describe('AnalyticsClient', () => { ]); }); + test('The undefined values are not forwarded to the global context', async () => { + const context$ = new Subject<{ a_field?: boolean; b_field: number }>(); + analyticsClient.registerContextProvider({ + name: 'contextProviderA', + schema: { + a_field: { + type: 'boolean', + _meta: { + description: 'a_field description', + optional: true, + }, + }, + b_field: { + type: 'long', + _meta: { + description: 'b_field description', + }, + }, + }, + context$, + }); + + const globalContextPromise = firstValueFrom(globalContext$.pipe(take(6), toArray())); + context$.next({ b_field: 1 }); + context$.next({ a_field: false, b_field: 1 }); + context$.next({ a_field: true, b_field: 1 }); + context$.next({ b_field: 1 }); + context$.next({ a_field: undefined, b_field: 2 }); + await expect(globalContextPromise).resolves.toEqual([ + {}, // Original empty state + { b_field: 1 }, + { a_field: false, b_field: 1 }, + { a_field: true, b_field: 1 }, + { b_field: 1 }, // a_field is removed because the context provider removed it. + { b_field: 2 }, // a_field is not forwarded because it is `undefined` + ]); + }); + test('Fails to register 2 context providers with the same name', () => { analyticsClient.registerContextProvider({ name: 'contextProviderA', diff --git a/packages/elastic-analytics/src/analytics_client/context_service.ts b/packages/elastic-analytics/src/analytics_client/context_service.ts index cee3e56b389d1..7c3f3c8327eb7 100644 --- a/packages/elastic-analytics/src/analytics_client/context_service.ts +++ b/packages/elastic-analytics/src/analytics_client/context_service.ts @@ -69,9 +69,21 @@ export class ContextService { [...this.contextProvidersRegistry.values()].reduce((acc, context) => { return { ...acc, - ...context, + ...this.removeEmptyValues(context), }; }, {} as Partial) ); } + + private removeEmptyValues(context?: Partial) { + if (!context) { + return {}; + } + return Object.keys(context).reduce((acc, key) => { + if (context[key] !== undefined) { + acc[key] = context[key]; + } + return acc; + }, {} as Partial); + } } diff --git a/packages/elastic-analytics/src/events/types.ts b/packages/elastic-analytics/src/events/types.ts index 8523b7791150a..5f1f587d3b284 100644 --- a/packages/elastic-analytics/src/events/types.ts +++ b/packages/elastic-analytics/src/events/types.ts @@ -8,7 +8,34 @@ import type { ShipperName } from '../analytics_client'; +/** + * Definition of the context that can be appended to the events through the {@link IAnalyticsClient.registerContextProvider}. + */ export interface EventContext { + /** + * The unique user ID. + */ + userId?: string; + /** + * The user's organization ID. + */ + esOrgId?: string; + /** + * The product's version. + */ + version?: string; + /** + * The name of the current page. + */ + pageName?: string; + /** + * The current application ID. + */ + applicationId?: string; + /** + * The current entity ID (dashboard ID, visualization ID, etc.). + */ + entityId?: string; // TODO: Extend with known keys [key: string]: unknown; } diff --git a/packages/elastic-analytics/src/index.ts b/packages/elastic-analytics/src/index.ts index 382974783aeb1..c22ea702c5be8 100644 --- a/packages/elastic-analytics/src/index.ts +++ b/packages/elastic-analytics/src/index.ts @@ -36,8 +36,10 @@ export type { // Types for the registerEventType API EventTypeOpts, } from './analytics_client'; + export type { Event, EventContext, EventType, TelemetryCounter } from './events'; export { TelemetryCounterType } from './events'; + export type { RootSchema, SchemaObject, @@ -52,4 +54,6 @@ export type { AllowedSchemaStringTypes, AllowedSchemaTypes, } from './schema'; -export type { IShipper } from './shippers'; + +export type { IShipper, FullStorySnippetConfig, FullStoryShipperConfig } from './shippers'; +export { FullStoryShipper } from './shippers'; diff --git a/packages/elastic-analytics/src/shippers/fullstory/format_payload.test.ts b/packages/elastic-analytics/src/shippers/fullstory/format_payload.test.ts new file mode 100644 index 0000000000000..6f9ad05bc9da7 --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/format_payload.test.ts @@ -0,0 +1,146 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { formatPayload } from './format_payload'; + +describe('formatPayload', () => { + test('appends `_str` to string values', () => { + const payload = { + foo: 'bar', + baz: ['qux'], + }; + + expect(formatPayload(payload)).toEqual({ + foo_str: payload.foo, + baz_strs: payload.baz, + }); + }); + + test('appends `_int` to integer values', () => { + const payload = { + foo: 1, + baz: [100000], + }; + + expect(formatPayload(payload)).toEqual({ + foo_int: payload.foo, + baz_ints: payload.baz, + }); + }); + + test('appends `_real` to integer values', () => { + const payload = { + foo: 1.5, + baz: [100000.5], + }; + + expect(formatPayload(payload)).toEqual({ + foo_real: payload.foo, + baz_reals: payload.baz, + }); + }); + + test('appends `_bool` to booleans values', () => { + const payload = { + foo: true, + baz: [false], + }; + + expect(formatPayload(payload)).toEqual({ + foo_bool: payload.foo, + baz_bools: payload.baz, + }); + }); + + test('appends `_date` to Date values', () => { + const payload = { + foo: new Date(), + baz: [new Date()], + }; + + expect(formatPayload(payload)).toEqual({ + foo_date: payload.foo, + baz_dates: payload.baz, + }); + }); + + test('supports nested values', () => { + const payload = { + nested: { + foo: 'bar', + baz: ['qux'], + }, + }; + + expect(formatPayload(payload)).toEqual({ + nested: { + foo_str: payload.nested.foo, + baz_strs: payload.nested.baz, + }, + }); + }); + + test('does not mutate reserved keys', () => { + const payload = { + uid: 'uid', + displayName: 'displayName', + email: 'email', + acctId: 'acctId', + website: 'website', + pageName: 'pageName', + }; + + expect(formatPayload(payload)).toEqual(payload); + }); + + test('removes undefined values', () => { + const payload = { + foo: undefined, + baz: [undefined], + }; + + expect(formatPayload(payload)).toEqual({}); + }); + + test('throws if null is provided', () => { + const payload = { + foo: null, + baz: [null], + }; + + expect(() => formatPayload(payload)).toThrowErrorMatchingInlineSnapshot( + `"Unsupported type: object"` + ); + }); + + describe('String to Date identification', () => { + test('appends `_date` to ISO string values', () => { + const payload = { + foo: new Date().toISOString(), + baz: [new Date().toISOString()], + }; + + expect(formatPayload(payload)).toEqual({ + foo_date: payload.foo, + baz_dates: payload.baz, + }); + }); + + test('appends `_str` to random string values', () => { + const payload = { + foo: 'test-1', + baz: ['test-1'], + }; + + expect(formatPayload(payload)).toEqual({ + foo_str: payload.foo, + baz_strs: payload.baz, + }); + }); + }); +}); diff --git a/packages/elastic-analytics/src/shippers/fullstory/format_payload.ts b/packages/elastic-analytics/src/shippers/fullstory/format_payload.ts new file mode 100644 index 0000000000000..c55ed2409da50 --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/format_payload.ts @@ -0,0 +1,84 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import moment from 'moment'; + +// https://help.fullstory.com/hc/en-us/articles/360020623234#reserved-properties +const FULLSTORY_RESERVED_PROPERTIES = [ + 'uid', + 'displayName', + 'email', + 'acctId', + 'website', + // https://developer.fullstory.com/page-variables + 'pageName', +]; + +export function formatPayload(context: Record): Record { + // format context keys as required for env vars, see docs: https://help.fullstory.com/hc/en-us/articles/360020623234 + return Object.fromEntries( + Object.entries(context) + // Discard any undefined values + .map<[string, unknown]>(([key, value]) => { + return Array.isArray(value) + ? [key, value.filter((v) => typeof v !== 'undefined')] + : [key, value]; + }) + .filter( + ([, value]) => typeof value !== 'undefined' && (!Array.isArray(value) || value.length > 0) + ) + // Transform key names according to the FullStory needs + .map(([key, value]) => { + if (FULLSTORY_RESERVED_PROPERTIES.includes(key)) { + return [key, value]; + } + if (isRecord(value)) { + return [key, formatPayload(value)]; + } + const valueType = getFullStoryType(value); + const formattedKey = valueType ? `${key}_${valueType}` : key; + return [formattedKey, value]; + }) + ); +} + +function getFullStoryType(value: unknown) { + // For arrays, make the decision based on the first element + const isArray = Array.isArray(value); + const v = isArray ? value[0] : value; + let type: string; + switch (typeof v) { + case 'string': + type = moment(v, moment.ISO_8601, true).isValid() ? 'date' : 'str'; + break; + case 'number': + type = Number.isInteger(v) ? 'int' : 'real'; + break; + case 'boolean': + type = 'bool'; + break; + case 'object': + if (isDate(v)) { + type = 'date'; + break; + } + default: + throw new Error(`Unsupported type: ${typeof v}`); + } + + // convert to plural form for arrays + return isArray ? `${type}s` : type; +} + +function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value) && !isDate(value); +} + +function isDate(value: unknown): value is Date { + return value instanceof Date; +} diff --git a/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.test.mocks.ts b/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.test.mocks.ts new file mode 100644 index 0000000000000..fadd1ffee2ae0 --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.test.mocks.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { FullStoryApi } from './types'; + +export const fullStoryApiMock: jest.Mocked = { + identify: jest.fn(), + setUserVars: jest.fn(), + setVars: jest.fn(), + consent: jest.fn(), + restart: jest.fn(), + shutdown: jest.fn(), + event: jest.fn(), +}; +jest.doMock('./load_snippet', () => { + return { + loadSnippet: () => fullStoryApiMock, + }; +}); diff --git a/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.test.ts b/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.test.ts new file mode 100644 index 0000000000000..67797a629c828 --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.test.ts @@ -0,0 +1,136 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { loggerMock } from '@kbn/logging-mocks'; +import { fullStoryApiMock } from './fullstory_shipper.test.mocks'; +import { FullStoryShipper } from './fullstory_shipper'; + +describe('FullStoryShipper', () => { + let fullstoryShipper: FullStoryShipper; + + beforeEach(() => { + jest.resetAllMocks(); + fullstoryShipper = new FullStoryShipper( + { + debug: true, + fullStoryOrgId: 'test-org-id', + }, + { + logger: loggerMock.create(), + sendTo: 'staging', + isDev: true, + } + ); + }); + + describe('extendContext', () => { + describe('FS.identify', () => { + test('calls `identify` when the userId is provided', () => { + const userId = 'test-user-id'; + fullstoryShipper.extendContext({ userId }); + expect(fullStoryApiMock.identify).toHaveBeenCalledWith(userId); + }); + + test('calls `identify` again only if the userId changes', () => { + const userId = 'test-user-id'; + fullstoryShipper.extendContext({ userId }); + expect(fullStoryApiMock.identify).toHaveBeenCalledTimes(1); + expect(fullStoryApiMock.identify).toHaveBeenCalledWith(userId); + + fullstoryShipper.extendContext({ userId }); + expect(fullStoryApiMock.identify).toHaveBeenCalledTimes(1); // still only called once + + fullstoryShipper.extendContext({ userId: `${userId}-1` }); + expect(fullStoryApiMock.identify).toHaveBeenCalledTimes(2); // called again because the user changed + expect(fullStoryApiMock.identify).toHaveBeenCalledWith(`${userId}-1`); + }); + }); + + describe('FS.setUserVars', () => { + test('calls `setUserVars` when version is provided', () => { + fullstoryShipper.extendContext({ version: '1.2.3' }); + expect(fullStoryApiMock.setUserVars).toHaveBeenCalledWith({ + version_str: '1.2.3', + version_major_int: 1, + version_minor_int: 2, + version_patch_int: 3, + }); + }); + + test('calls `setUserVars` when esOrgId is provided', () => { + fullstoryShipper.extendContext({ esOrgId: 'test-es-org-id' }); + expect(fullStoryApiMock.setUserVars).toHaveBeenCalledWith({ org_id_str: 'test-es-org-id' }); + }); + + test('merges both: version and esOrgId if both are provided', () => { + fullstoryShipper.extendContext({ version: '1.2.3', esOrgId: 'test-es-org-id' }); + expect(fullStoryApiMock.setUserVars).toHaveBeenCalledWith({ + org_id_str: 'test-es-org-id', + version_str: '1.2.3', + version_major_int: 1, + version_minor_int: 2, + version_patch_int: 3, + }); + }); + }); + + describe('FS.setVars', () => { + test('adds the rest of the context to `setVars`', () => { + const context = { + userId: 'test-user-id', + version: '1.2.3', + esOrgId: 'test-es-org-id', + foo: 'bar', + }; + fullstoryShipper.extendContext(context); + expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { foo_str: 'bar' }); + }); + }); + }); + + describe('optIn', () => { + test('should call consent true and restart when isOptIn: true', () => { + fullstoryShipper.optIn(true); + expect(fullStoryApiMock.consent).toHaveBeenCalledWith(true); + expect(fullStoryApiMock.restart).toHaveBeenCalled(); + }); + + test('should call consent false and shutdown when isOptIn: false', () => { + fullstoryShipper.optIn(false); + expect(fullStoryApiMock.consent).toHaveBeenCalledWith(false); + expect(fullStoryApiMock.shutdown).toHaveBeenCalled(); + }); + }); + + describe('reportEvents', () => { + test('calls the API once per event in the array with the properties transformed', () => { + fullstoryShipper.reportEvents([ + { + event_type: 'test-event-1', + timestamp: '2020-01-01T00:00:00.000Z', + properties: { test: 'test-1' }, + context: { pageName: 'test-page-1' }, + }, + { + event_type: 'test-event-2', + timestamp: '2020-01-01T00:00:00.000Z', + properties: { test: 'test-2' }, + context: { pageName: 'test-page-1' }, + }, + ]); + + expect(fullStoryApiMock.event).toHaveBeenCalledTimes(2); + expect(fullStoryApiMock.event).toHaveBeenCalledWith('test-event-1', { + test_str: 'test-1', + }); + expect(fullStoryApiMock.event).toHaveBeenCalledWith('test-event-2', { + test_str: 'test-2', + }); + }); + }); +}); diff --git a/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.ts b/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.ts new file mode 100644 index 0000000000000..ff953393b9ddb --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/fullstory_shipper.ts @@ -0,0 +1,92 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { IShipper } from '../types'; +import type { AnalyticsClientInitContext } from '../../analytics_client'; +import type { EventContext, Event } from '../../events'; +import type { FullStoryApi } from './types'; +import type { FullStorySnippetConfig } from './load_snippet'; +import { getParsedVersion } from './get_parsed_version'; +import { formatPayload } from './format_payload'; +import { loadSnippet } from './load_snippet'; + +export type FullStoryShipperConfig = FullStorySnippetConfig; + +export class FullStoryShipper implements IShipper { + public static shipperName = 'FullStory'; + private readonly fullStoryApi: FullStoryApi; + private lastUserId: string | undefined; + + constructor( + config: FullStoryShipperConfig, + private readonly initContext: AnalyticsClientInitContext + ) { + this.fullStoryApi = loadSnippet(config); + } + + public extendContext(newContext: EventContext): void { + this.initContext.logger.debug(`Received context ${JSON.stringify(newContext)}`); + + // FullStory requires different APIs for different type of contexts. + const { userId, version, esOrgId, ...nonUserContext } = newContext; + + // Call it only when the userId changes + if (userId && userId !== this.lastUserId) { + this.initContext.logger.debug(`Calling FS.identify with userId ${userId}`); + // We need to call the API for every new userId (restarting the session). + this.fullStoryApi.identify(userId); + this.lastUserId = userId; + } + + // User-level context + if (version || esOrgId) { + this.initContext.logger.debug( + `Calling FS.setUserVars with version ${version} and esOrgId ${esOrgId}` + ); + this.fullStoryApi.setUserVars({ + ...(version ? getParsedVersion(version) : {}), + ...(esOrgId ? { org_id_str: esOrgId } : {}), + }); + } + + // Event-level context. At the moment, only the scope `page` is supported by FullStory for webapps. + if (Object.keys(nonUserContext).length) { + // Keeping these fields for backwards compatibility. + if (nonUserContext.applicationId) nonUserContext.app_id = nonUserContext.applicationId; + if (nonUserContext.entityId) nonUserContext.ent_id = nonUserContext.entityId; + + this.initContext.logger.debug( + `Calling FS.setVars with context ${JSON.stringify(nonUserContext)}` + ); + this.fullStoryApi.setVars('page', formatPayload(nonUserContext)); + } + } + + public optIn(isOptedIn: boolean): void { + this.initContext.logger.debug(`Setting FS to optIn ${isOptedIn}`); + // FullStory uses 2 different opt-in methods: + // - `consent` is needed to allow collecting information about the components + // declared as "Record with user consent" (https://help.fullstory.com/hc/en-us/articles/360020623574). + // We need to explicitly call `consent` if for the "Record with user content" feature to work. + this.fullStoryApi.consent(isOptedIn); + // - `restart` and `shutdown` fully start/stop the collection of data. + if (isOptedIn) { + this.fullStoryApi.restart(); + } else { + this.fullStoryApi.shutdown(); + } + } + + public reportEvents(events: Event[]): void { + this.initContext.logger.debug(`Reporting ${events.length} events to FS`); + events.forEach((event) => { + // We only read event.properties and discard the rest because the context is already sent in the other APIs. + this.fullStoryApi.event(event.event_type, formatPayload(event.properties)); + }); + } +} diff --git a/packages/elastic-analytics/src/shippers/fullstory/get_parsed_version.test.ts b/packages/elastic-analytics/src/shippers/fullstory/get_parsed_version.test.ts new file mode 100644 index 0000000000000..b4938dbca3bc4 --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/get_parsed_version.test.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 + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { getParsedVersion } from './get_parsed_version'; + +describe('getParsedVersion', () => { + test('parses a version string', () => { + expect(getParsedVersion('1.2.3')).toEqual({ + version_str: '1.2.3', + version_major_int: 1, + version_minor_int: 2, + version_patch_int: 3, + }); + }); + + test('parses a version string with extra label', () => { + expect(getParsedVersion('1.2.3-SNAPSHOT')).toEqual({ + version_str: '1.2.3-SNAPSHOT', + version_major_int: 1, + version_minor_int: 2, + version_patch_int: 3, + }); + }); + + test('does not throw for invalid version', () => { + expect(getParsedVersion('INVALID_VERSION')).toEqual({ + version_str: 'INVALID_VERSION', + version_major_int: NaN, + version_minor_int: NaN, + version_patch_int: NaN, + }); + }); +}); diff --git a/packages/elastic-analytics/src/shippers/fullstory/get_parsed_version.ts b/packages/elastic-analytics/src/shippers/fullstory/get_parsed_version.ts new file mode 100644 index 0000000000000..873b47a0cde8a --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/get_parsed_version.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 + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export function getParsedVersion(version: string): { + version_str: string; + version_major_int: number; + version_minor_int: number; + version_patch_int: number; +} { + const [major, minor, patch] = version.split('.'); + return { + version_str: version, + version_major_int: parseInt(major, 10), + version_minor_int: parseInt(minor, 10), + version_patch_int: parseInt(patch, 10), + }; +} diff --git a/packages/elastic-analytics/src/shippers/fullstory/index.ts b/packages/elastic-analytics/src/shippers/fullstory/index.ts new file mode 100644 index 0000000000000..a9be91c82e9ec --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/index.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 + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { FullStoryShipper } from './fullstory_shipper'; +export type { FullStoryShipperConfig } from './fullstory_shipper'; +export type { FullStorySnippetConfig } from './load_snippet'; diff --git a/packages/elastic-analytics/src/shippers/fullstory/load_snippet.test.ts b/packages/elastic-analytics/src/shippers/fullstory/load_snippet.test.ts new file mode 100644 index 0000000000000..0b920ef2d22c1 --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/load_snippet.test.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { loadSnippet } from './load_snippet'; + +describe('loadSnippet', () => { + beforeAll(() => { + // Define necessary window and document global variables for the tests + Object.defineProperty(global, 'window', { + writable: true, + value: {}, + }); + + Object.defineProperty(global, 'document', { + writable: true, + value: { + createElement: jest.fn().mockReturnValue({}), + getElementsByTagName: jest + .fn() + .mockReturnValue([{ parentNode: { insertBefore: jest.fn() } }]), + }, + }); + + Object.defineProperty(global, '_fs_script', { + writable: true, + value: '', + }); + }); + + it('should return the FullStory API', () => { + const fullStoryApi = loadSnippet({ debug: true, fullStoryOrgId: 'foo' }); + expect(fullStoryApi).toBeDefined(); + expect(fullStoryApi.event).toBeDefined(); + expect(fullStoryApi.consent).toBeDefined(); + expect(fullStoryApi.restart).toBeDefined(); + expect(fullStoryApi.shutdown).toBeDefined(); + expect(fullStoryApi.identify).toBeDefined(); + expect(fullStoryApi.setUserVars).toBeDefined(); + expect(fullStoryApi.setVars).toBeDefined(); + }); +}); diff --git a/packages/elastic-analytics/src/shippers/fullstory/load_snippet.ts b/packages/elastic-analytics/src/shippers/fullstory/load_snippet.ts new file mode 100644 index 0000000000000..471152f033b5a --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/load_snippet.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 + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { FullStoryApi } from './types'; + +export interface FullStorySnippetConfig { + /** + * The FullStory account id. + */ + fullStoryOrgId: string; + /** + * The host to send the data to. Used to overcome AdBlockers by using custom DNSs. + * If not specified, it defaults to `fullstory.com`. + */ + host?: string; + /** + * The URL to load the FullStory client from. Falls back to `edge.fullstory.com/s/fs.js` if not specified. + */ + scriptUrl?: string; + /** + * Whether the debug logs should be printed to the console. + */ + debug?: boolean; + /** + * The name of the variable where the API is stored: `window[namespace]`. Defaults to `FS`. + */ + namespace?: string; +} + +export function loadSnippet({ + scriptUrl = 'edge.fullstory.com/s/fs.js', + fullStoryOrgId, + host = 'fullstory.com', + namespace = 'FS', + debug = false, +}: FullStorySnippetConfig): FullStoryApi { + window._fs_debug = debug; + window._fs_host = host; + window._fs_script = scriptUrl; + window._fs_org = fullStoryOrgId; + window._fs_namespace = namespace; + + /* eslint-disable */ + (function(m,n,e,t,l,o,g,y){ + if (e in m) {if(m.console && m.console.log) { m.console.log('FullStory namespace conflict. Please set window["_fs_namespace"].');} return;} + // @ts-expect-error + g=m[e]=function(a,b,s){g.q?g.q.push([a,b,s]):g._api(a,b,s);};g.q=[]; + // @ts-expect-error + o=n.createElement(t);o.async=1;o.crossOrigin='anonymous';o.src=_fs_script; + // @ts-expect-error + y=n.getElementsByTagName(t)[0];y.parentNode.insertBefore(o,y); + // @ts-expect-error + g.identify=function(i,v,s){g(l,{uid:i},s);if(v)g(l,v,s)};g.setUserVars=function(v,s){g(l,v,s)};g.event=function(i,v,s){g('event',{n:i,p:v},s)}; + // @ts-expect-error + g.anonymize=function(){g.identify(!!0)}; + // @ts-expect-error + g.shutdown=function(){g("rec",!1)};g.restart=function(){g("rec",!0)}; + // @ts-expect-error + g.log = function(a,b){g("log",[a,b])}; + // @ts-expect-error + g.consent=function(a){g("consent",!arguments.length||a)}; + // @ts-expect-error + g.identifyAccount=function(i,v){o='account';v=v||{};v.acctId=i;g(o,v)}; + // @ts-expect-error + g.clearUserCookie=function(){}; + // @ts-expect-error + g.setVars=function(n, p){g('setVars',[n,p]);}; + // @ts-expect-error + g._w={};y='XMLHttpRequest';g._w[y]=m[y];y='fetch';g._w[y]=m[y]; + // @ts-expect-error + if(m[y])m[y]=function(){return g._w[y].apply(this,arguments)}; + // @ts-expect-error + g._v="1.3.0"; + + })(window,document,window['_fs_namespace'],'script','user'); + + const fullStoryApi = window[namespace as 'FS']; + + if (!fullStoryApi) { + throw new Error('FullStory snippet failed to load. Check browser logs for more information.'); + } + + return fullStoryApi; +} diff --git a/packages/elastic-analytics/src/shippers/fullstory/types.ts b/packages/elastic-analytics/src/shippers/fullstory/types.ts new file mode 100644 index 0000000000000..6c448c2c4d2e1 --- /dev/null +++ b/packages/elastic-analytics/src/shippers/fullstory/types.ts @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +/** + * Definition of the FullStory API. + * Docs are available at https://developer.fullstory.com/. + */ +export interface FullStoryApi { + /** + * Identify a User + * https://developer.fullstory.com/identify + * @param userId + * @param userVars + */ + identify(userId: string, userVars?: Record): void; + + /** + * Set User Variables + * https://developer.fullstory.com/user-variables + * @param userVars + */ + setUserVars(userVars: Record): void; + + /** + * Setting page variables + * https://developer.fullstory.com/page-variables + * @param scope + * @param pageProperties + */ + setVars(scope: 'page', pageProperties: Record): void; + + /** + * Sending custom event data into FullStory + * https://developer.fullstory.com/custom-events + * @param eventName + * @param eventProperties + */ + event(eventName: string, eventProperties: Record): void; + + /** + * Selectively record parts of your site based on explicit user consent + * https://developer.fullstory.com/consent + * @param isOptedIn true if the user has opted in to tracking + */ + consent(isOptedIn: boolean): void; + + /** + * Restart session recording after it has been shutdown + * https://developer.fullstory.com/restart-recording + */ + restart(): void; + + /** + * Stop recording a session + * https://developer.fullstory.com/stop-recording + */ + shutdown(): void; +} + +declare global { + interface Window { + _fs_debug: boolean; + _fs_host: string; + _fs_org: string; + _fs_namespace: string; + _fs_script: string; + FS: FullStoryApi; + } +} diff --git a/packages/elastic-analytics/src/shippers/index.ts b/packages/elastic-analytics/src/shippers/index.ts index 7a4ab7d85b9f2..c75b38b63a499 100644 --- a/packages/elastic-analytics/src/shippers/index.ts +++ b/packages/elastic-analytics/src/shippers/index.ts @@ -7,3 +7,6 @@ */ export type { IShipper } from './types'; + +export { FullStoryShipper } from './fullstory'; +export type { FullStorySnippetConfig, FullStoryShipperConfig } from './fullstory'; diff --git a/src/plugins/telemetry/public/plugin.ts b/src/plugins/telemetry/public/plugin.ts index b227a0b751e03..44799d7f4ffc5 100644 --- a/src/plugins/telemetry/public/plugin.ts +++ b/src/plugins/telemetry/public/plugin.ts @@ -134,7 +134,7 @@ export class TelemetryPlugin implements Plugin { await this.refreshConfig(); + analytics.optIn({ global: { enabled: this.telemetryService!.isOptedIn } }); }); if (home && !this.config.hidePrivacyStatement) { @@ -179,6 +180,7 @@ export class TelemetryPlugin implements Plugin { - const { takeNumberOfCounters } = req.query; + const { takeNumberOfCounters, eventType } = req.query; - return res.ok({ body: stats.slice(-takeNumberOfCounters) }); + return res.ok({ + body: stats + .filter((counter) => counter.event_type === eventType) + .slice(-takeNumberOfCounters), + }); } ); diff --git a/test/analytics/config.ts b/test/analytics/config.ts index 46fa5d892997a..1ecac5af0d01a 100644 --- a/test/analytics/config.ts +++ b/test/analytics/config.ts @@ -34,6 +34,8 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { ...functionalConfig.get('kbnTestServer'), serverArgs: [ ...functionalConfig.get('kbnTestServer.serverArgs'), + // Disabling telemetry so it doesn't call opt-in before the tests run. + '--telemetry.enabled=false', `--plugin-path=${path.resolve(__dirname, './__fixtures__/plugins/analytics_plugin_a')}`, `--plugin-path=${path.resolve(__dirname, './__fixtures__/plugins/analytics_ftr_helpers')}`, ], diff --git a/test/analytics/tests/analytics_from_the_browser.ts b/test/analytics/tests/analytics_from_the_browser.ts index 9c866204ce18e..88da2ddcb5bc7 100644 --- a/test/analytics/tests/analytics_from_the_browser.ts +++ b/test/analytics/tests/analytics_from_the_browser.ts @@ -23,7 +23,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ): Promise => { return await browser.execute( ({ takeNumberOfCounters }) => - window.__analyticsPluginA__.stats.slice(-takeNumberOfCounters), + window.__analyticsPluginA__.stats + .filter((counter) => counter.event_type === 'test-plugin-lifecycle') + .slice(-takeNumberOfCounters), { takeNumberOfCounters: _takeNumberOfCounters } ); }; @@ -70,6 +72,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(context).to.have.property('user_agent'); expect(context.user_agent).to.be.a('string'); + const reportEventContext = actions[2].meta[1].context; + expect(reportEventContext).to.have.property('user_agent'); + expect(reportEventContext.user_agent).to.be.a('string'); + expect(actions).to.eql([ { action: 'optIn', meta: true }, { action: 'extendContext', meta: context }, @@ -85,7 +91,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { timestamp: actions[2].meta[1].timestamp, event_type: 'test-plugin-lifecycle', - context, + context: reportEventContext, properties: { plugin: 'analyticsPluginA', step: 'start' }, }, ], @@ -103,7 +109,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { timestamp: actions[2].meta[1].timestamp, event_type: 'test-plugin-lifecycle', - context, + context: reportEventContext, properties: { plugin: 'analyticsPluginA', step: 'start' }, }, ]); diff --git a/test/analytics/tests/analytics_from_the_server.ts b/test/analytics/tests/analytics_from_the_server.ts index 8555d91031d27..0935e52136e60 100644 --- a/test/analytics/tests/analytics_from_the_server.ts +++ b/test/analytics/tests/analytics_from_the_server.ts @@ -20,7 +20,7 @@ export default function ({ getService }: FtrProviderContext) { ): Promise => { const resp = await supertest .get(`/internal/analytics_plugin_a/stats`) - .query({ takeNumberOfCounters }) + .query({ takeNumberOfCounters, eventType: 'test-plugin-lifecycle' }) .set('kbn-xsrf', 'xxx') .expect(200); diff --git a/x-pack/plugins/cloud/public/fullstory.ts b/x-pack/plugins/cloud/public/fullstory.ts deleted file mode 100644 index 602b1c4cc63d3..0000000000000 --- a/x-pack/plugins/cloud/public/fullstory.ts +++ /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 - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { sha256 } from 'js-sha256'; // loaded here to reduce page load bundle size when FullStory is disabled -import type { IBasePath, PackageInfo } from '../../../../src/core/public'; - -export interface FullStoryDeps { - basePath: IBasePath; - orgId: string; - packageInfo: PackageInfo; -} - -export type FullstoryUserVars = Record; -export type FullstoryVars = Record; - -export interface FullStoryApi { - identify(userId: string, userVars?: FullstoryUserVars): void; - setVars(pageName: string, vars?: FullstoryVars): void; - setUserVars(userVars?: FullstoryUserVars): void; - event(eventName: string, eventProperties: Record): void; -} - -export interface FullStoryService { - fullStory: FullStoryApi; - sha256: typeof sha256; -} - -export const initializeFullStory = ({ - basePath, - orgId, - packageInfo, -}: FullStoryDeps): FullStoryService => { - // @ts-expect-error - window._fs_debug = false; - // @ts-expect-error - window._fs_host = 'fullstory.com'; - // @ts-expect-error - window._fs_script = basePath.prepend(`/internal/cloud/${packageInfo.buildNum}/fullstory.js`); - // @ts-expect-error - window._fs_org = orgId; - // @ts-expect-error - window._fs_namespace = 'FSKibana'; - - /* eslint-disable */ - (function(m,n,e,t,l,o,g,y){ - if (e in m) {if(m.console && m.console.log) { m.console.log('FullStory namespace conflict. Please set window["_fs_namespace"].');} return;} - // @ts-expect-error - g=m[e]=function(a,b,s){g.q?g.q.push([a,b,s]):g._api(a,b,s);};g.q=[]; - // @ts-expect-error - o=n.createElement(t);o.async=1;o.crossOrigin='anonymous';o.src=_fs_script; - // @ts-expect-error - y=n.getElementsByTagName(t)[0];y.parentNode.insertBefore(o,y); - // @ts-expect-error - g.identify=function(i,v,s){g(l,{uid:i},s);if(v)g(l,v,s)};g.setUserVars=function(v,s){g(l,v,s)};g.event=function(i,v,s){g('event',{n:i,p:v},s)}; - // @ts-expect-error - g.anonymize=function(){g.identify(!!0)}; - // @ts-expect-error - g.shutdown=function(){g("rec",!1)};g.restart=function(){g("rec",!0)}; - // @ts-expect-error - g.log = function(a,b){g("log",[a,b])}; - // @ts-expect-error - g.consent=function(a){g("consent",!arguments.length||a)}; - // @ts-expect-error - g.identifyAccount=function(i,v){o='account';v=v||{};v.acctId=i;g(o,v)}; - // @ts-expect-error - g.clearUserCookie=function(){}; - // @ts-expect-error - g.setVars=function(n, p){g('setVars',[n,p]);}; - // @ts-expect-error - g._w={};y='XMLHttpRequest';g._w[y]=m[y];y='fetch';g._w[y]=m[y]; - // @ts-expect-error - if(m[y])m[y]=function(){return g._w[y].apply(this,arguments)}; - // @ts-expect-error - g._v="1.3.0"; - // @ts-expect-error - })(window,document,window['_fs_namespace'],'script','user'); - /* eslint-enable */ - - // @ts-expect-error - const fullStory: FullStoryApi = window.FSKibana; - - return { - fullStory, - sha256, - }; -}; diff --git a/x-pack/plugins/cloud/public/plugin.test.mocks.ts b/x-pack/plugins/cloud/public/plugin.test.mocks.ts deleted file mode 100644 index 1c185d0194912..0000000000000 --- a/x-pack/plugins/cloud/public/plugin.test.mocks.ts +++ /dev/null @@ -1,23 +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 - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { sha256 } from 'js-sha256'; -import type { FullStoryDeps, FullStoryApi, FullStoryService } from './fullstory'; - -export const fullStoryApiMock: jest.Mocked = { - event: jest.fn(), - setUserVars: jest.fn(), - setVars: jest.fn(), - identify: jest.fn(), -}; -export const initializeFullStoryMock = jest.fn(() => ({ - fullStory: fullStoryApiMock, - sha256, -})); -jest.doMock('./fullstory', () => { - return { initializeFullStory: initializeFullStoryMock }; -}); diff --git a/x-pack/plugins/cloud/public/plugin.test.ts b/x-pack/plugins/cloud/public/plugin.test.ts index edbf724e25390..fd269245fd775 100644 --- a/x-pack/plugins/cloud/public/plugin.test.ts +++ b/x-pack/plugins/cloud/public/plugin.test.ts @@ -9,14 +9,13 @@ import { nextTick } from '@kbn/test-jest-helpers'; import { coreMock } from 'src/core/public/mocks'; import { homePluginMock } from 'src/plugins/home/public/mocks'; import { securityMock } from '../../security/public/mocks'; -import { fullStoryApiMock, initializeFullStoryMock } from './plugin.test.mocks'; -import { CloudPlugin, CloudConfigType, loadFullStoryUserId } from './plugin'; -import { Observable, Subject } from 'rxjs'; +import { CloudPlugin, CloudConfigType, loadUserId } from './plugin'; +import { firstValueFrom, Observable, Subject } from 'rxjs'; import { KibanaExecutionContext } from 'kibana/public'; describe('Cloud Plugin', () => { describe('#setup', () => { - describe('setupFullstory', () => { + describe('setupFullStory', () => { beforeEach(() => { jest.clearAllMocks(); }); @@ -65,72 +64,82 @@ describe('Cloud Plugin', () => { ); const setup = plugin.setup(coreSetup, securityEnabled ? { security: securitySetup } : {}); - // Wait for fullstory dynamic import to resolve + // Wait for FullStory dynamic import to resolve await new Promise((r) => setImmediate(r)); - return { initContext, plugin, setup }; + return { initContext, plugin, setup, coreSetup }; }; - it('calls initializeFullStory with correct args when enabled and org_id are set', async () => { - const { initContext } = await setupPlugin({ + test('register the shipper FullStory with correct args when enabled and org_id are set', async () => { + const { coreSetup } = await setupPlugin({ config: { full_story: { enabled: true, org_id: 'foo' } }, currentUserProps: { username: '1234', }, }); - expect(initializeFullStoryMock).toHaveBeenCalled(); - const { basePath, orgId, packageInfo } = initializeFullStoryMock.mock.calls[0][0]; - expect(basePath.prepend).toBeDefined(); - expect(orgId).toEqual('foo'); - expect(packageInfo).toEqual(initContext.env.packageInfo); + expect(coreSetup.analytics.registerShipper).toHaveBeenCalled(); + expect(coreSetup.analytics.registerShipper).toHaveBeenCalledWith(expect.anything(), { + fullStoryOrgId: 'foo', + scriptUrl: '/internal/cloud/100/fullstory.js', + namespace: 'FSKibana', + }); }); - it('calls FS.identify with hashed user ID when security is available', async () => { - await setupPlugin({ + test('register the context provider for the cloud user with hashed user ID when security is available', async () => { + const { coreSetup } = await setupPlugin({ config: { full_story: { enabled: true, org_id: 'foo' } }, currentUserProps: { username: '1234', }, }); - expect(fullStoryApiMock.identify).toHaveBeenCalledWith( - '5ef112cfdae3dea57097bc276e275b2816e73ef2a398dc0ffaf5b6b4e3af2041', - { - version_str: 'version', - version_major_int: -1, - version_minor_int: -1, - version_patch_int: -1, - org_id_str: 'cloudId', - } - ); + expect(coreSetup.analytics.registerContextProvider).toHaveBeenCalled(); + + const [{ context$ }] = coreSetup.analytics.registerContextProvider.mock.calls.find( + ([{ name }]) => name === 'cloud_user_id' + )!; + + await expect(firstValueFrom(context$)).resolves.toEqual({ + userId: '5ef112cfdae3dea57097bc276e275b2816e73ef2a398dc0ffaf5b6b4e3af2041', + }); }); it('user hash includes org id', async () => { - await setupPlugin({ + const { coreSetup: coreSetup1 } = await setupPlugin({ config: { full_story: { enabled: true, org_id: 'foo' }, id: 'esOrg1' }, currentUserProps: { username: '1234', }, }); - const hashId1 = fullStoryApiMock.identify.mock.calls[0][0]; + const [{ context$: context1$ }] = + coreSetup1.analytics.registerContextProvider.mock.calls.find( + ([{ name }]) => name === 'cloud_user_id' + )!; + + const hashId1 = await firstValueFrom(context1$); - await setupPlugin({ + const { coreSetup: coreSetup2 } = await setupPlugin({ config: { full_story: { enabled: true, org_id: 'foo' }, id: 'esOrg2' }, currentUserProps: { username: '1234', }, }); - const hashId2 = fullStoryApiMock.identify.mock.calls[1][0]; + const [{ context$: context2$ }] = + coreSetup2.analytics.registerContextProvider.mock.calls.find( + ([{ name }]) => name === 'cloud_user_id' + )!; + + const hashId2 = await firstValueFrom(context2$); expect(hashId1).not.toEqual(hashId2); }); - it('calls FS.setVars everytime an app changes', async () => { + it('emits the execution context provider everytime an app changes', async () => { const currentContext$ = new Subject(); - const { plugin } = await setupPlugin({ + const { coreSetup } = await setupPlugin({ config: { full_story: { enabled: true, org_id: 'foo' } }, currentUserProps: { username: '1234', @@ -138,23 +147,34 @@ describe('Cloud Plugin', () => { currentContext$, }); + const [{ context$ }] = coreSetup.analytics.registerContextProvider.mock.calls.find( + ([{ name }]) => name === 'execution_context' + )!; + + let latestContext; + context$.subscribe((context) => { + latestContext = context; + }); + // takes the app name - expect(fullStoryApiMock.setVars).not.toHaveBeenCalled(); + expect(latestContext).toBeUndefined(); currentContext$.next({ name: 'App1', description: '123', }); - expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { + await new Promise((r) => setImmediate(r)); + + expect(latestContext).toEqual({ pageName: 'App1', - app_id_str: 'App1', + applicationId: 'App1', }); // context clear currentContext$.next({}); - expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { - pageName: 'App1', - app_id_str: 'App1', + expect(latestContext).toEqual({ + pageName: '', + applicationId: 'unknown', }); // different app @@ -163,11 +183,11 @@ describe('Cloud Plugin', () => { page: 'page2', id: '123', }); - expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { + expect(latestContext).toEqual({ pageName: 'App2:page2', - app_id_str: 'App2', - page_str: 'page2', - ent_id_str: '123', + applicationId: 'App2', + page: 'page2', + entityId: '123', }); // Back to first app @@ -177,25 +197,25 @@ describe('Cloud Plugin', () => { id: '123', }); - expect(fullStoryApiMock.setVars).toHaveBeenCalledWith('page', { + expect(latestContext).toEqual({ pageName: 'App1:page3', - app_id_str: 'App1', - page_str: 'page3', - ent_id_str: '123', + applicationId: 'App1', + page: 'page3', + entityId: '123', }); - - expect(currentContext$.observers.length).toBe(1); - plugin.stop(); - expect(currentContext$.observers.length).toBe(0); }); - it('does not call FS.identify when security is not available', async () => { - await setupPlugin({ + it('does not register the cloud user id context provider when security is not available', async () => { + const { coreSetup } = await setupPlugin({ config: { full_story: { enabled: true, org_id: 'foo' } }, securityEnabled: false, }); - expect(fullStoryApiMock.identify).not.toHaveBeenCalled(); + expect( + coreSetup.analytics.registerContextProvider.mock.calls.find( + ([{ name }]) => name === 'cloud_user_id' + ) + ).toBeUndefined(); }); describe('with memory', () => { @@ -219,58 +239,44 @@ describe('Cloud Plugin', () => { delete window.performance.memory; }); - it('calls FS.event when security is available', async () => { - const { initContext } = await setupPlugin({ + it('reports an event when security is available', async () => { + const { initContext, coreSetup } = await setupPlugin({ config: { full_story: { enabled: true, org_id: 'foo' } }, currentUserProps: { username: '1234', }, }); - expect(fullStoryApiMock.event).toHaveBeenCalledWith('Loaded Kibana', { - kibana_version_str: initContext.env.packageInfo.version, - memory_js_heap_size_limit_int: 3, - memory_js_heap_size_total_int: 2, - memory_js_heap_size_used_int: 1, + expect(coreSetup.analytics.reportEvent).toHaveBeenCalledWith('Loaded Kibana', { + kibana_version: initContext.env.packageInfo.version, + memory_js_heap_size_limit: 3, + memory_js_heap_size_total: 2, + memory_js_heap_size_used: 1, }); }); }); - it('calls FS.event when security is not available', async () => { - const { initContext } = await setupPlugin({ + it('reports an event when security is not available', async () => { + const { initContext, coreSetup } = await setupPlugin({ config: { full_story: { enabled: true, org_id: 'foo' } }, securityEnabled: false, }); - expect(fullStoryApiMock.event).toHaveBeenCalledWith('Loaded Kibana', { - kibana_version_str: initContext.env.packageInfo.version, - }); - }); - - it('calls FS.event when FS.identify throws an error', async () => { - fullStoryApiMock.identify.mockImplementationOnce(() => { - throw new Error(`identify failed!`); - }); - const { initContext } = await setupPlugin({ - config: { full_story: { enabled: true, org_id: 'foo' } }, - currentUserProps: { - username: '1234', - }, - }); - - expect(fullStoryApiMock.event).toHaveBeenCalledWith('Loaded Kibana', { - kibana_version_str: initContext.env.packageInfo.version, + expect(coreSetup.analytics.reportEvent).toHaveBeenCalledWith('Loaded Kibana', { + kibana_version: initContext.env.packageInfo.version, }); }); it('does not call initializeFullStory when enabled=false', async () => { - await setupPlugin({ config: { full_story: { enabled: false, org_id: 'foo' } } }); - expect(initializeFullStoryMock).not.toHaveBeenCalled(); + const { coreSetup } = await setupPlugin({ + config: { full_story: { enabled: false, org_id: 'foo' } }, + }); + expect(coreSetup.analytics.registerShipper).not.toHaveBeenCalled(); }); it('does not call initializeFullStory when org_id is undefined', async () => { - await setupPlugin({ config: { full_story: { enabled: true } } }); - expect(initializeFullStoryMock).not.toHaveBeenCalled(); + const { coreSetup } = await setupPlugin({ config: { full_story: { enabled: true } } }); + expect(coreSetup.analytics.registerShipper).not.toHaveBeenCalled(); }); }); @@ -659,7 +665,7 @@ describe('Cloud Plugin', () => { it('returns principal ID when username specified', async () => { expect( - await loadFullStoryUserId({ + await loadUserId({ getCurrentUser: jest.fn().mockResolvedValue({ username: '1234', }), @@ -670,7 +676,7 @@ describe('Cloud Plugin', () => { it('returns undefined if getCurrentUser throws', async () => { expect( - await loadFullStoryUserId({ + await loadUserId({ getCurrentUser: jest.fn().mockRejectedValue(new Error(`Oh no!`)), }) ).toBeUndefined(); @@ -678,7 +684,7 @@ describe('Cloud Plugin', () => { it('returns undefined if getCurrentUser returns undefined', async () => { expect( - await loadFullStoryUserId({ + await loadUserId({ getCurrentUser: jest.fn().mockResolvedValue(undefined), }) ).toBeUndefined(); @@ -686,7 +692,7 @@ describe('Cloud Plugin', () => { it('returns undefined and logs if username undefined', async () => { expect( - await loadFullStoryUserId({ + await loadUserId({ getCurrentUser: jest.fn().mockResolvedValue({ username: undefined, metadata: { foo: 'bar' }, @@ -694,7 +700,7 @@ describe('Cloud Plugin', () => { }) ).toBeUndefined(); expect(consoleMock).toHaveBeenLastCalledWith( - `[cloud.full_story] username not specified. User metadata: {"foo":"bar"}` + `[cloud.analytics] username not specified. User metadata: {"foo":"bar"}` ); }); }); diff --git a/x-pack/plugins/cloud/public/plugin.tsx b/x-pack/plugins/cloud/public/plugin.tsx index 89f24971de25c..b524116c25ec9 100644 --- a/x-pack/plugins/cloud/public/plugin.tsx +++ b/x-pack/plugins/cloud/public/plugin.tsx @@ -6,7 +6,7 @@ */ import React, { FC } from 'react'; -import { +import type { CoreSetup, CoreStart, Plugin, @@ -14,11 +14,14 @@ import { HttpStart, IBasePath, ExecutionContextStart, + AnalyticsServiceSetup, } from 'src/core/public'; import { i18n } from '@kbn/i18n'; import useObservable from 'react-use/lib/useObservable'; -import { BehaviorSubject, Subscription } from 'rxjs'; -import { compact, isUndefined, omitBy } from 'lodash'; +import { BehaviorSubject, from, of, Subscription } from 'rxjs'; +import { exhaustMap, filter, map } from 'rxjs/operators'; +import { compact } from 'lodash'; + import type { AuthenticatedUser, SecurityPluginSetup, @@ -83,9 +86,13 @@ export interface CloudSetup { isCloudEnabled: boolean; } -interface SetupFullstoryDeps extends CloudSetupDependencies { - executionContextPromise?: Promise; +interface SetupFullStoryDeps { + analytics: AnalyticsServiceSetup; basePath: IBasePath; +} +interface SetupTelemetryContextDeps extends CloudSetupDependencies { + analytics: AnalyticsServiceSetup; + executionContextPromise: Promise; esOrgId?: string; } @@ -94,7 +101,7 @@ interface SetupChatDeps extends Pick { } export class CloudPlugin implements Plugin { - private config!: CloudConfigType; + private readonly config: CloudConfigType; private isCloudEnabled: boolean; private appSubscription?: Subscription; private chatConfig$ = new BehaviorSubject({ enabled: false }); @@ -109,12 +116,17 @@ export class CloudPlugin implements Plugin { return coreStart.executionContext; }); - this.setupFullstory({ - basePath: core.http.basePath, + this.setupTelemetryContext({ + analytics: core.analytics, security, executionContextPromise, esOrgId: this.config.id, - }).catch((e) => + }).catch((e) => { + // eslint-disable-next-line no-console + console.debug(`Error setting up TelemetryContext: ${e.toString()}`); + }); + + this.setupFullStory({ analytics: core.analytics, basePath: core.http.basePath }).catch((e) => // eslint-disable-next-line no-console console.debug(`Error setting up FullStory: ${e.toString()}`) ); @@ -230,109 +242,158 @@ export class CloudPlugin implements Plugin { return user?.roles.includes('superuser') ?? true; } - private async setupFullstory({ - basePath, + /** + * If the right config is provided, register the FullStory shipper to the analytics client. + * @param analytics Core's Analytics service's setup contract. + * @param basePath Core's http.basePath helper. + * @private + */ + private async setupFullStory({ analytics, basePath }: SetupFullStoryDeps) { + const { enabled, org_id: fullStoryOrgId } = this.config.full_story; + if (!enabled || !fullStoryOrgId) { + return; // do not load any FullStory code in the browser if not enabled + } + + // Keep this import async so that we do not load any FullStory code into the browser when it is disabled. + const { FullStoryShipper } = await import('@elastic/analytics'); + analytics.registerShipper(FullStoryShipper, { + fullStoryOrgId, + // Load an Elastic-internally audited script. Ideally, it should be hosted on a CDN. + scriptUrl: basePath.prepend( + `/internal/cloud/${this.initializerContext.env.packageInfo.buildNum}/fullstory.js` + ), + namespace: 'FSKibana', + }); + } + + /** + * Set up the Analytics context providers. + * @param analytics Core's Analytics service. The Setup contract. + * @param security The security plugin. + * @param executionContextPromise Core's executionContext's start contract. + * @param esOrgId The Cloud Org ID. + * @private + */ + private async setupTelemetryContext({ + analytics, security, executionContextPromise, esOrgId, - }: SetupFullstoryDeps) { - const { enabled, org_id: fsOrgId } = this.config.full_story; - if (!enabled || !fsOrgId) { - return; // do not load any fullstory code in the browser if not enabled - } + }: SetupTelemetryContextDeps) { + // Some context providers can be moved to other places for better domain isolation. + // Let's use https://github.com/elastic/kibana/issues/125690 for that purpose. + analytics.registerContextProvider({ + name: 'kibana_version', + context$: of({ version: this.initializerContext.env.packageInfo.version }), + schema: { version: { type: 'keyword', _meta: { description: 'The version of Kibana' } } }, + }); - // Keep this import async so that we do not load any FullStory code into the browser when it is disabled. - const fullStoryChunkPromise = import('./fullstory'); - const userIdPromise: Promise = security - ? loadFullStoryUserId({ getCurrentUser: security.authc.getCurrentUser }) - : Promise.resolve(undefined); - - // We need to call FS.identify synchronously after FullStory is initialized, so we must load the user upfront - const [{ initializeFullStory }, userId] = await Promise.all([ - fullStoryChunkPromise, - userIdPromise, - ]); - - const { fullStory, sha256 } = initializeFullStory({ - basePath, - orgId: fsOrgId, - packageInfo: this.initializerContext.env.packageInfo, + analytics.registerContextProvider({ + name: 'cloud_org_id', + context$: of({ esOrgId }), + schema: { + esOrgId: { + type: 'keyword', + _meta: { description: 'The Cloud Organization ID', optional: true }, + }, + }, }); - // Very defensive try/catch to avoid any UnhandledPromiseRejections - try { - // This needs to be called syncronously to be sure that we populate the user ID soon enough to make sessions merging - // across domains work - if (userId) { - // Join the cloud org id and the user to create a truly unique user id. - // The hashing here is to keep it at clear as possible in our source code that we do not send literal user IDs - const hashedId = sha256(esOrgId ? `${esOrgId}:${userId}` : `${userId}`); - - executionContextPromise - ?.then(async (executionContext) => { - this.appSubscription = executionContext.context$.subscribe((context) => { - const { name, page, id } = context; - // Update the current context every time it changes - fullStory.setVars( - 'page', - omitBy( - { - // Read about the special pageName property - // https://help.fullstory.com/hc/en-us/articles/1500004101581-FS-setVars-API-Sending-custom-page-data-to-FullStory - pageName: `${compact([name, page]).join(':')}`, - app_id_str: name ?? 'unknown', - page_str: page, - ent_id_str: id, - }, - isUndefined - ) - ); - }); + // This needs to be called synchronously to be sure that we populate the user ID soon enough to make sessions merging + // across domains work + if (security) { + analytics.registerContextProvider({ + name: 'cloud_user_id', + context$: from(loadUserId({ getCurrentUser: security.authc.getCurrentUser })).pipe( + filter((userId): userId is string => Boolean(userId)), + exhaustMap(async (userId) => { + const { sha256 } = await import('js-sha256'); + // Join the cloud org id and the user to create a truly unique user id. + // The hashing here is to keep it at clear as possible in our source code that we do not send literal user IDs + return { userId: sha256(esOrgId ? `${esOrgId}:${userId}` : `${userId}`) }; }) - .catch((e) => { - // eslint-disable-next-line no-console - console.error( - `[cloud.full_story] Could not retrieve application service due to error: ${e.toString()}`, - e - ); - }); - const kibanaVer = this.initializerContext.env.packageInfo.version; - // TODO: use semver instead - const parsedVer = (kibanaVer.indexOf('.') > -1 ? kibanaVer.split('.') : []).map((s) => - parseInt(s, 10) - ); - // `str` suffix is required for evn vars, see docs: https://help.fullstory.com/hc/en-us/articles/360020623234 - fullStory.identify(hashedId, { - version_str: kibanaVer, - version_major_int: parsedVer[0] ?? -1, - version_minor_int: parsedVer[1] ?? -1, - version_patch_int: parsedVer[2] ?? -1, - org_id_str: esOrgId, - }); - } - } catch (e) { - // eslint-disable-next-line no-console - console.error( - `[cloud.full_story] Could not call FS.identify due to error: ${e.toString()}`, - e - ); + ), + schema: { + userId: { + type: 'keyword', + _meta: { description: 'The user id scoped as seen by Cloud (hashed)' }, + }, + }, + }); } + const executionContext = await executionContextPromise; + analytics.registerContextProvider({ + name: 'execution_context', + context$: executionContext.context$.pipe( + // Update the current context every time it changes + map(({ name, page, id }) => ({ + pageName: `${compact([name, page]).join(':')}`, + applicationId: name ?? 'unknown', + page, + entityId: id, + })) + ), + schema: { + pageName: { + type: 'keyword', + _meta: { description: 'The name of the current page' }, + }, + page: { + type: 'keyword', + _meta: { description: 'The current page', optional: true }, + }, + applicationId: { + type: 'keyword', + _meta: { description: 'The id of the current application' }, + }, + entityId: { + type: 'keyword', + _meta: { + description: + 'The id of the current entity (dashboard, visualization, canvas, lens, etc)', + optional: true, + }, + }, + }, + }); + + analytics.registerEventType({ + eventType: 'Loaded Kibana', + schema: { + kibana_version: { + type: 'keyword', + _meta: { description: 'The version of Kibana', optional: true }, + }, + memory_js_heap_size_limit: { + type: 'long', + _meta: { description: 'The maximum size of the heap', optional: true }, + }, + memory_js_heap_size_total: { + type: 'long', + _meta: { description: 'The total size of the heap', optional: true }, + }, + memory_js_heap_size_used: { + type: 'long', + _meta: { description: 'The used size of the heap', optional: true }, + }, + }, + }); + // Get performance information from the browser (non standard property // @ts-expect-error 2339 const memory = window.performance.memory; let memoryInfo = {}; if (memory) { memoryInfo = { - memory_js_heap_size_limit_int: memory.jsHeapSizeLimit, - memory_js_heap_size_total_int: memory.totalJSHeapSize, - memory_js_heap_size_used_int: memory.usedJSHeapSize, + memory_js_heap_size_limit: memory.jsHeapSizeLimit, + memory_js_heap_size_total: memory.totalJSHeapSize, + memory_js_heap_size_used: memory.usedJSHeapSize, }; } - // Record an event that Kibana was opened so we can easily search for sessions that use Kibana - fullStory.event('Loaded Kibana', { - // `str` suffix is required, see docs: https://help.fullstory.com/hc/en-us/articles/360020623234 - kibana_version_str: this.initializerContext.env.packageInfo.version, + + analytics.reportEvent('Loaded Kibana', { + kibana_version: this.initializerContext.env.packageInfo.version, ...memoryInfo, }); } @@ -376,7 +437,7 @@ export class CloudPlugin implements Plugin { } /** @internal exported for testing */ -export const loadFullStoryUserId = async ({ +export const loadUserId = async ({ getCurrentUser, }: { getCurrentUser: () => Promise; @@ -391,7 +452,7 @@ export const loadFullStoryUserId = async ({ if (!currentUser.username) { // eslint-disable-next-line no-console console.debug( - `[cloud.full_story] username not specified. User metadata: ${JSON.stringify( + `[cloud.analytics] username not specified. User metadata: ${JSON.stringify( currentUser.metadata )}` ); @@ -400,7 +461,7 @@ export const loadFullStoryUserId = async ({ return currentUser.username; } catch (e) { // eslint-disable-next-line no-console - console.error(`[cloud.full_story] Error loading the current user: ${e.toString()}`, e); + console.error(`[cloud.analytics] Error loading the current user: ${e.toString()}`, e); return undefined; } }; From bbbb8ea2082426325f1f09f468fe864e8e5c1b9a Mon Sep 17 00:00:00 2001 From: Scotty Bollinger Date: Wed, 13 Apr 2022 10:46:04 -0500 Subject: [PATCH 025/305] Change logic to fetch role mappings data after enabling RBAC (#130127) --- .../role_mappings/role_mappings_logic.test.ts | 14 +++++--------- .../role_mappings/role_mappings_logic.ts | 7 ++----- .../role_mappings/role_mappings_logic.test.ts | 14 +++++--------- .../views/role_mappings/role_mappings_logic.ts | 9 ++------- 4 files changed, 14 insertions(+), 30 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/role_mappings/role_mappings_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/role_mappings/role_mappings_logic.test.ts index d6802c303807b..e78c1805c6ee7 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/role_mappings/role_mappings_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/role_mappings/role_mappings_logic.test.ts @@ -113,13 +113,6 @@ describe('RoleMappingsLogic', () => { }); }); - it('setRoleMappings', () => { - RoleMappingsLogic.actions.setRoleMappings({ roleMappings: [asRoleMapping] }); - - expect(RoleMappingsLogic.values.roleMappings).toEqual([asRoleMapping]); - expect(RoleMappingsLogic.values.dataLoading).toEqual(false); - }); - describe('setElasticsearchUser', () => { it('sets user', () => { RoleMappingsLogic.actions.setElasticsearchUser(elasticsearchUsers[0]); @@ -323,7 +316,10 @@ describe('RoleMappingsLogic', () => { describe('listeners', () => { describe('enableRoleBasedAccess', () => { it('calls API and sets values', async () => { - const setRoleMappingsSpy = jest.spyOn(RoleMappingsLogic.actions, 'setRoleMappings'); + const initializeRoleMappingsSpy = jest.spyOn( + RoleMappingsLogic.actions, + 'initializeRoleMappings' + ); http.post.mockReturnValue(Promise.resolve(mappingsServerProps)); RoleMappingsLogic.actions.enableRoleBasedAccess(); @@ -333,7 +329,7 @@ describe('RoleMappingsLogic', () => { '/internal/app_search/role_mappings/enable_role_based_access' ); await nextTick(); - expect(setRoleMappingsSpy).toHaveBeenCalledWith(mappingsServerProps); + expect(initializeRoleMappingsSpy).toHaveBeenCalled(); }); itShowsServerErrorAsFlashMessage(http.post, () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/role_mappings/role_mappings_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/role_mappings/role_mappings_logic.ts index 39e7df34f2aca..0579eef8ea5fe 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/role_mappings/role_mappings_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/role_mappings/role_mappings_logic.ts @@ -47,9 +47,6 @@ const emptyUser = { username: '', email: '' } as ElasticsearchUser; interface RoleMappingsActions extends RoleMappingsBaseActions { setRoleMapping(roleMapping: ASRoleMapping): { roleMapping: ASRoleMapping }; setSingleUserRoleMapping(data?: UserMapping): { singleUserRoleMapping: UserMapping }; - setRoleMappings({ roleMappings }: { roleMappings: ASRoleMapping[] }): { - roleMappings: ASRoleMapping[]; - }; setRoleMappingsData(data: RoleMappingsServerDetails): RoleMappingsServerDetails; handleAccessAllEnginesChange(selected: boolean): { selected: boolean }; handleEngineSelectionChange(engineNames: string[]): { engineNames: string[] }; @@ -322,8 +319,8 @@ export const RoleMappingsLogic = kea(route); - actions.setRoleMappings(response); + await http.post<{ roleMappings: ASRoleMapping[] }>(route); + actions.initializeRoleMappings(); } catch (e) { flashAPIErrors(e); } diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/role_mappings_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/role_mappings_logic.test.ts index b3246171ee5a7..d14a2adea82b8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/role_mappings_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/role_mappings_logic.test.ts @@ -118,13 +118,6 @@ describe('RoleMappingsLogic', () => { }); }); - it('setRoleMappings', () => { - RoleMappingsLogic.actions.setRoleMappings({ roleMappings: [wsRoleMapping] }); - - expect(RoleMappingsLogic.values.roleMappings).toEqual([wsRoleMapping]); - expect(RoleMappingsLogic.values.dataLoading).toEqual(false); - }); - describe('setElasticsearchUser', () => { it('sets user', () => { RoleMappingsLogic.actions.setElasticsearchUser(elasticsearchUsers[0]); @@ -283,7 +276,10 @@ describe('RoleMappingsLogic', () => { describe('listeners', () => { describe('enableRoleBasedAccess', () => { it('calls API and sets values', async () => { - const setRoleMappingsSpy = jest.spyOn(RoleMappingsLogic.actions, 'setRoleMappings'); + const initializeRoleMappingsSpy = jest.spyOn( + RoleMappingsLogic.actions, + 'initializeRoleMappings' + ); http.post.mockReturnValue(Promise.resolve(mappingsServerProps)); RoleMappingsLogic.actions.enableRoleBasedAccess(); @@ -293,7 +289,7 @@ describe('RoleMappingsLogic', () => { '/internal/workplace_search/org/role_mappings/enable_role_based_access' ); await nextTick(); - expect(setRoleMappingsSpy).toHaveBeenCalledWith(mappingsServerProps); + expect(initializeRoleMappingsSpy).toHaveBeenCalled(); }); itShowsServerErrorAsFlashMessage(http.post, () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/role_mappings_logic.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/role_mappings_logic.ts index ea01d0049992f..010ae01ab1a71 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/role_mappings_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/role_mappings_logic.ts @@ -46,9 +46,6 @@ interface RoleMappingsActions extends RoleMappingsBaseActions { setDefaultGroup(availableGroups: RoleGroup[]): { availableGroups: RoleGroup[] }; setRoleMapping(roleMapping: WSRoleMapping): { roleMapping: WSRoleMapping }; setSingleUserRoleMapping(data?: UserMapping): { singleUserRoleMapping: UserMapping }; - setRoleMappings({ roleMappings }: { roleMappings: WSRoleMapping[] }): { - roleMappings: WSRoleMapping[]; - }; setRoleMappingsData(data: RoleMappingsServerDetails): RoleMappingsServerDetails; handleAllGroupsSelectionChange(selected: boolean): { selected: boolean }; handleGroupSelectionChange(groupIds: string[]): { groupIds: string[] }; @@ -322,10 +319,8 @@ export const RoleMappingsLogic = kea(route); - actions.setRoleMappings(response); + await http.post<{ roleMappings: WSRoleMapping[] }>(route); + actions.initializeRoleMappings(); } catch (e) { flashAPIErrors(e); } From 62c049b05754bfe313e55671c3bd11407ac0691b Mon Sep 17 00:00:00 2001 From: Georgii Gorbachev Date: Wed, 13 Apr 2022 17:52:05 +0200 Subject: [PATCH 026/305] [Security Solution][Detections] Fixes UI for bulk applying timeline template (#129491) **Addresses:** https://github.com/elastic/kibana/issues/129294, https://github.com/elastic/kibana/issues/93083, https://github.com/elastic/security-team/issues/2078 (internal) **Related to:** https://github.com/elastic/kibana/pull/128691 ## Summary Summarize your PR. If it involves visual changes include a screenshot or gif. - [x] Fix bulk resetting timeline template to **None** - [x] Fix UI copies - [ ] Add tests --- .../rules/all/bulk_actions/translations.tsx | 10 +- .../detection_engine/rules/translations.ts | 2 +- .../routes/rules/perform_bulk_action_route.ts | 24 ++- .../lib/detection_engine/rules/edit_rule.ts | 139 ++++++++++++++++++ 4 files changed, 154 insertions(+), 21 deletions(-) create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rules/edit_rule.ts diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/all/bulk_actions/translations.tsx b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/all/bulk_actions/translations.tsx index d35a89484f264..3908c890b1f89 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/all/bulk_actions/translations.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/all/bulk_actions/translations.tsx @@ -13,14 +13,14 @@ export const bulkApplyTimelineTemplate = { FORM_TITLE: i18n.translate( 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.edit.applyTimelineTemplate.formTitle', { - defaultMessage: 'Apply timeline template', + defaultMessage: 'Apply Timeline template', } ), TEMPLATE_SELECTOR_LABEL: i18n.translate( 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.edit.applyTimelineTemplate.templateSelectorLabel', { - defaultMessage: 'Apply timeline template to selected rules', + defaultMessage: 'Apply Timeline template to selected rules', } ), @@ -28,7 +28,7 @@ export const bulkApplyTimelineTemplate = { 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.edit.applyTimelineTemplate.templateSelectorHelpText', { defaultMessage: - 'Select which timeline to apply to selected rules when investigating generated alerts.', + 'Select which Timeline to apply to selected rules when investigating generated alerts.', } ), @@ -42,8 +42,8 @@ export const bulkApplyTimelineTemplate = { warningCalloutMessage: (rulesCount: number): JSX.Element => ( ), diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts index 09949cc5c1a09..7071ef95c8c7e 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts @@ -196,7 +196,7 @@ export const BULK_ACTION_DELETE_TAGS = i18n.translate( export const BULK_ACTION_APPLY_TIMELINE_TEMPLATE = i18n.translate( 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.applyTimelineTemplateTitle', { - defaultMessage: 'Apply timeline template', + defaultMessage: 'Apply Timeline template', } ); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/perform_bulk_action_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/perform_bulk_action_route.ts index 94294192531f8..e9cc0e8eee777 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/perform_bulk_action_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/perform_bulk_action_route.ts @@ -38,7 +38,7 @@ import { deleteRules } from '../../rules/delete_rules'; import { duplicateRule } from '../../rules/duplicate_rule'; import { findRules } from '../../rules/find_rules'; import { readRules } from '../../rules/read_rules'; -import { patchRules } from '../../rules/patch_rules'; +import { editRule } from '../../rules/edit_rule'; import { applyBulkActionEditToRule } from '../../rules/bulk_action_edit'; import { getExportByObjectIds } from '../../rules/get_export_by_object_ids'; import { buildSiemResponse } from '../utils'; @@ -424,24 +424,18 @@ export const performBulkActionRoute = ( rule, }); - const editedRule = body[BulkAction.edit].reduce( - (acc, action) => applyBulkActionEditToRule(acc, action), - migratedRule - ); - - const { tags, params: { timelineTitle, timelineId } = {} } = editedRule; - const index = 'index' in editedRule.params ? editedRule.params.index : undefined; - - await patchRules({ + const updatedRule = await editRule({ rulesClient, rule: migratedRule, - tags, - index, - timelineTitle, - timelineId, + edit: (ruleToEdit) => { + return body[BulkAction.edit].reduce( + (acc, action) => applyBulkActionEditToRule(acc, action), + ruleToEdit + ); + }, }); - return editedRule; + return updatedRule; }, abortSignal: abortController.signal, }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/edit_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/edit_rule.ts new file mode 100644 index 0000000000000..5975f106225a1 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/edit_rule.ts @@ -0,0 +1,139 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { cloneDeep, isEqual, pick } from 'lodash'; +import { validate } from '@kbn/securitysolution-io-ts-utils'; + +import type { RulesClient } from '../../../../../alerting/server'; +import { RuleAlertType } from '../rules/types'; +import { InternalRuleUpdate, internalRuleUpdate } from '../schemas/rule_schemas'; +import { addTags } from './add_tags'; + +class EditRuleError extends Error { + public readonly statusCode: number; + constructor(message: string, statusCode: number) { + super(message); + this.statusCode = statusCode; + } +} + +interface EditRuleParams { + /** An instance of RulesClient from the Alerting Framework. */ + rulesClient: RulesClient; + + /** Original, existing rule to be edited. Needs to be fetched from Elasticsearch via RulesClient. */ + rule: RuleAlertType; + + /** A function that implements in-memory modifications: returns a new rule object with the changes. */ + edit: (rule: RuleAlertType) => RuleAlertType; +} + +/** At this point we support editing of only these fields. */ +const FIELDS_THAT_CAN_BE_EDITED = ['params', 'tags'] as const; + +/** + * Applies in-memory modifications to a given rule and updates it in Elasticsearch via RulesClient. + * + * NOTE: At this point we only support editing of the following fields: + * - rule.params + * - rule.tags + * All other changes made by the `edit` function will be ignored. + * + * @returns The edited rule. + */ +export const editRule = async (params: EditRuleParams): Promise => { + const { rulesClient, rule, edit } = params; + const isPrebuiltRule = rule.params.immutable; + const isCustomRule = !rule.params.immutable; + + if (isPrebuiltRule) { + throw new EditRuleError('Elastic rule can`t be edited', 400); + } + + const editedRule = applyChanges(rule, edit); + + // If the rule wasn't changed by the `edit` function, we don't need to proceed with the update. + if (!isRuleChanged(rule, editedRule)) { + return rule; + } + + // We need to increment the rule's version if it is a custom rule. If the rule is an Elastic + // prebuilt rule, we don't want to touch its version - it's managed by the rule authors. + // This check is left here explicitly because we're planning to allow editing for prebuilt rules, + // and the check for isPrebuiltRule above might be removed. + if (isCustomRule) { + editedRule.params.version = editedRule.params.version + 1; + } + + const updateData = createUpdateData(rule, editedRule); + await rulesClient.update({ + id: rule.id, + data: updateData, + }); + + // It would be great to return the updated rule returned from the RulesClient.update() call. + // Note that there's a type mismatch between RuleAlertType and the update method result. + return editedRule; +}; + +const applyChanges = ( + originalRule: RuleAlertType, + edit: (rule: RuleAlertType) => RuleAlertType +): RuleAlertType => { + // For safety, deeply clone the rule object before applying edits to it. + const clonedRule = cloneDeep(originalRule); + const editedRule = edit(clonedRule); + const sanitizedRule = validateAndSanitizeChanges(originalRule, editedRule); + return sanitizedRule; +}; + +const validateAndSanitizeChanges = ( + original: RuleAlertType, + changed: RuleAlertType +): RuleAlertType => { + // These checks should never throw unless there's a bug in the passed `edit` function. + if (changed.params.immutable !== original.params.immutable) { + throw new EditRuleError(`Internal rule editing error: can't change "params.immutable"`, 500); + } + if (changed.params.version !== original.params.version) { + throw new EditRuleError(`Internal rule editing error: can't change "params.version"`, 500); + } + + return { + ...changed, + tags: addTags(changed.tags, changed.params.ruleId, changed.params.immutable), + }; +}; + +const isRuleChanged = (originalRule: RuleAlertType, editedRule: RuleAlertType): boolean => { + const originalData = pick(originalRule, FIELDS_THAT_CAN_BE_EDITED); + const editedData = pick(editedRule, FIELDS_THAT_CAN_BE_EDITED); + return !isEqual(originalData, editedData); +}; + +const createUpdateData = ( + originalRule: RuleAlertType, + editedRule: RuleAlertType +): InternalRuleUpdate => { + const data: InternalRuleUpdate = { + // At this point we intentionally support updating of only these fields: + ...pick(editedRule, FIELDS_THAT_CAN_BE_EDITED), + // We omit other fields and get them from the original (unedited) rule: + name: originalRule.name, + schedule: originalRule.schedule, + actions: originalRule.actions, + throttle: originalRule.throttle, + notifyWhen: originalRule.notifyWhen, + }; + + const [validatedData, validationError] = validate(data, internalRuleUpdate); + if (validationError != null || validatedData === null) { + throw new EditRuleError(`Editing rule would create invalid rule: ${validationError}`, 500); + } + + return validatedData; +}; From f570b59431c64625c8e96d41104b77a1e1b26ec6 Mon Sep 17 00:00:00 2001 From: Esteban Beltran Date: Wed, 13 Apr 2022 18:26:59 +0200 Subject: [PATCH 027/305] [Cases] Fix condition in flaky test (#130139) --- .../public/components/all_cases/all_cases_list.test.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx b/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx index c8e656b8117eb..b1f5af86cf8ab 100644 --- a/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx @@ -811,15 +811,16 @@ describe('AllCasesListGeneric', () => { }); it('should hide the alerts column if the alert feature is disabled', async () => { - expect.assertions(1); - - const { findAllByTestId } = render( + const result = render( ); - await expect(findAllByTestId('case-table-column-alertsCount')).rejects.toThrow(); + await waitFor(() => { + expect(result.getByTestId('cases-table')).toBeTruthy(); + expect(result.queryAllByTestId('case-table-column-alertsCount').length).toBe(0); + }); }); it('should show the alerts column if the alert feature is enabled', async () => { From 04f960161a03c7f807b2355de53d8b926c5d8747 Mon Sep 17 00:00:00 2001 From: Abdul Wahab Zahid Date: Wed, 13 Apr 2022 18:32:20 +0200 Subject: [PATCH 028/305] Fix "Discard" action button link in Monitor Management Add/Edit page. (#130138) --- .../components/monitor_management/action_bar/action_bar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar.tsx b/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar.tsx index 5f6e67e363171..50bbeb8a40aa8 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar.tsx @@ -121,7 +121,7 @@ export const ActionBar = ({ {DISCARD_LABEL} From 981c51b6b0fcb9b4ac83ec238719e27527ddec39 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 13 Apr 2022 12:54:01 -0400 Subject: [PATCH 029/305] [Fleet] Improve logstash output form UI (#130141) --- .../components/edit_output_flyout/index.test.tsx | 4 ++-- .../settings/components/edit_output_flyout/index.tsx | 2 +- .../components/logstash_instructions/helpers.tsx | 2 +- .../components/logstash_instructions/index.tsx | 11 +++++++++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.test.tsx index bd486f3c95641..2b1f51747edd1 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.test.tsx @@ -53,7 +53,7 @@ describe('EditOutputFlyout', () => { // Does not show logstash SSL inputs expect(utils.queryByLabelText('Client SSL certificate key')).toBeNull(); expect(utils.queryByLabelText('Client SSL certificate')).toBeNull(); - expect(utils.queryByLabelText('Server SSL certificate authorities')).toBeNull(); + expect(utils.queryByLabelText('Server SSL certificate authorities (optional)')).toBeNull(); }); it('should render the flyout if the output provided is a logstash output', async () => { @@ -68,7 +68,7 @@ describe('EditOutputFlyout', () => { // Show logstash SSL inputs expect(utils.queryByLabelText('Client SSL certificate key')).not.toBeNull(); expect(utils.queryByLabelText('Client SSL certificate')).not.toBeNull(); - expect(utils.queryByLabelText('Server SSL certificate authorities')).not.toBeNull(); + expect(utils.queryByLabelText('Server SSL certificate authorities (optional)')).not.toBeNull(); }); it('should show a callout in the flyout if the selected output is logstash and no encrypted key is set', async () => { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx index c0b8f158f43de..09bd7d2280756 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx @@ -260,7 +260,7 @@ export const EditOutputFlyout: React.FunctionComponent = label={i18n.translate( 'xpack.fleet.settings.editOutputFlyout.sslCertificateAuthoritiesInputLabel', { - defaultMessage: 'Server SSL certificate authorities', + defaultMessage: 'Server SSL certificate authorities (optional)', } )} multiline={true} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/logstash_instructions/helpers.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/logstash_instructions/helpers.tsx index 1239233b4e12d..9fbeb6eb120c8 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/logstash_instructions/helpers.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/logstash_instructions/helpers.tsx @@ -6,7 +6,7 @@ */ export const LOGSTASH_CONFIG_PIPELINES = `- pipeline.id: elastic-agent-pipeline - path.config: "/etc/path/to/elastic-agent-pipeline.config" + path.config: "/etc/path/to/elastic-agent-pipeline.conf" `; export function getLogstashPipeline(apiKey?: string) { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/logstash_instructions/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/logstash_instructions/index.tsx index 1fdffd1c8a30b..e87e0049bde89 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/logstash_instructions/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/logstash_instructions/index.tsx @@ -12,6 +12,7 @@ import { EuiButton, EuiSpacer, EuiLink, + EuiCode, EuiCodeBlock, EuiCopy, EuiButtonIcon, @@ -150,7 +151,10 @@ const LogstashInstructionSteps = () => { <> pipelines.yml, + }} /> @@ -164,7 +168,10 @@ const LogstashInstructionSteps = () => { <> elastic-agent-pipeline.conf, + }} /> From 1464fb086594f0017e71bdb7f1e141fd2fa3426c Mon Sep 17 00:00:00 2001 From: Frank Hassanabad Date: Wed, 13 Apr 2022 11:13:05 -0600 Subject: [PATCH 030/305] [Security Solutions] In FTR e2e tests, removes sleep and uses retry logic to reduce flake (#130052) ## Summary Removes sleep and uses retry logic to reduce flake * Changes the `countDown` function to enable it to return a value now * Updates all the other utils and tests that have been using countDown with newer way ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../security_and_spaces/tests/create_rules.ts | 6 - .../security_and_spaces/tests/timestamps.ts | 15 -- .../detection_engine_api_integration/utils.ts | 198 ++++++++++++------ x-pack/test/lists_api_integration/utils.ts | 20 +- 4 files changed, 147 insertions(+), 92 deletions(-) diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/create_rules.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/create_rules.ts index 82899ff0de8f7..cf7d6ca8e05f9 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/create_rules.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/create_rules.ts @@ -33,10 +33,6 @@ import { import { ROLES } from '../../../../plugins/security_solution/common/test'; import { createUserAndRole, deleteUserAndRole } from '../../../common/services/security_solution'; -function sleep(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - // eslint-disable-next-line import/no-default-export export default ({ getService }: FtrProviderContext) => { const esArchiver = getService('esArchiver'); @@ -311,7 +307,6 @@ export default ({ getService }: FtrProviderContext) => { bodyId, RuleExecutionStatus['partial failure'] ); - await sleep(5000); const { body: rule } = await supertest .get(DETECTION_ENGINE_RULES_URL) @@ -344,7 +339,6 @@ export default ({ getService }: FtrProviderContext) => { bodyId, RuleExecutionStatus['partial failure'] ); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 2, [bodyId]); const { body: rule } = await supertest diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/timestamps.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/timestamps.ts index e0d539a3fe33b..0df0ac3376a7a 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/timestamps.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/timestamps.ts @@ -27,10 +27,6 @@ import { getEqlRuleForSignalTesting, } from '../../utils'; -function sleep(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - // eslint-disable-next-line import/no-default-export export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertest'); @@ -70,7 +66,6 @@ export default ({ getService }: FtrProviderContext) => { const rule = getRuleForSignalTesting(['timestamp_in_seconds']); const { id } = await createRule(supertest, log, rule); await waitForRuleSuccessOrStatus(supertest, log, id); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsByIds(supertest, log, [id]); const hits = signalsOpen.hits.hits @@ -86,7 +81,6 @@ export default ({ getService }: FtrProviderContext) => { }; const { id } = await createRule(supertest, log, rule); await waitForRuleSuccessOrStatus(supertest, log, id); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsByIds(supertest, log, [id]); const hits = signalsOpen.hits.hits @@ -101,7 +95,6 @@ export default ({ getService }: FtrProviderContext) => { const rule = getEqlRuleForSignalTesting(['timestamp_in_seconds']); const { id } = await createRule(supertest, log, rule); await waitForRuleSuccessOrStatus(supertest, log, id); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsByIds(supertest, log, [id]); const hits = signalsOpen.hits.hits @@ -117,7 +110,6 @@ export default ({ getService }: FtrProviderContext) => { }; const { id } = await createRule(supertest, log, rule); await waitForRuleSuccessOrStatus(supertest, log, id); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsByIds(supertest, log, [id]); const hits = signalsOpen.hits.hits @@ -184,7 +176,6 @@ export default ({ getService }: FtrProviderContext) => { id, RuleExecutionStatus['partial failure'] ); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 3, [id]); const signalsResponse = await getSignalsByIds(supertest, log, [id], 3); const signals = signalsResponse.hits.hits.map((hit) => hit._source); @@ -204,7 +195,6 @@ export default ({ getService }: FtrProviderContext) => { id, RuleExecutionStatus['partial failure'] ); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 2, [id]); const signalsResponse = await getSignalsByIds(supertest, log, [id]); const signals = signalsResponse.hits.hits.map((hit) => hit._source); @@ -226,7 +216,6 @@ export default ({ getService }: FtrProviderContext) => { id, RuleExecutionStatus['partial failure'] ); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 2, [id]); const signalsResponse = await getSignalsByIds(supertest, log, [id, id]); const signals = signalsResponse.hits.hits.map((hit) => hit._source); @@ -249,7 +238,6 @@ export default ({ getService }: FtrProviderContext) => { const { id } = await createRule(supertest, log, rule); await waitForRuleSuccessOrStatus(supertest, log, id); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsResponse = await getSignalsByIds(supertest, log, [id, id]); const hits = signalsResponse.hits.hits @@ -271,7 +259,6 @@ export default ({ getService }: FtrProviderContext) => { id, RuleExecutionStatus['partial failure'] ); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 2, [id]); const signalsResponse = await getSignalsByIds(supertest, log, [id]); const signals = signalsResponse.hits.hits.map((hit) => hit._source); @@ -293,7 +280,6 @@ export default ({ getService }: FtrProviderContext) => { id, RuleExecutionStatus['partial failure'] ); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 2, [id]); const signalsResponse = await getSignalsByIds(supertest, log, [id, id]); const signals = signalsResponse.hits.hits.map((hit) => hit._source); @@ -348,7 +334,6 @@ export default ({ getService }: FtrProviderContext) => { id, RuleExecutionStatus['partial failure'] ); - await sleep(5000); await waitForSignalsToBePresent(supertest, log, 200, [id]); const signalsResponse = await getSignalsByIds(supertest, log, [id], 200); const signals = signalsResponse.hits.hits.map((hit) => hit._source); diff --git a/x-pack/test/detection_engine_api_integration/utils.ts b/x-pack/test/detection_engine_api_integration/utils.ts index 2087e0d6ab523..c3cf935492730 100644 --- a/x-pack/test/detection_engine_api_integration/utils.ts +++ b/x-pack/test/detection_engine_api_integration/utils.ts @@ -523,7 +523,9 @@ export const deleteAllAlerts = async ( .get(`${DETECTION_ENGINE_RULES_URL}/_find`) .set('kbn-xsrf', 'true') .send(); - return finalCheck.data.length === 0; + return { + passed: finalCheck.data.length === 0, + }; }, 'deleteAllAlerts', log, @@ -580,7 +582,7 @@ export const deleteAllTimelines = async (es: Client): Promise => { /** * Remove all rules execution info saved objects from the .kibana index - * This will retry 20 times before giving up and hopefully still not interfere with other tests + * This will retry 50 times before giving up and hopefully still not interfere with other tests * @param es The ElasticSearch handle * @param log The tooling logger */ @@ -605,7 +607,7 @@ export const deleteAllRuleExecutionInfo = async (es: Client, log: ToolingLog): P /** * Creates the signals index for use inside of beforeEach blocks of tests - * This will retry 20 times before giving up and hopefully still not interfere with other tests + * This will retry 50 times before giving up and hopefully still not interfere with other tests * @param supertest The supertest client library */ export const createSignalsIndex = async ( @@ -615,7 +617,9 @@ export const createSignalsIndex = async ( await countDownTest( async () => { await supertest.post(DETECTION_ENGINE_INDEX_URL).set('kbn-xsrf', 'true').send(); - return true; + return { + passed: true, + }; }, 'createSignalsIndex', log @@ -657,7 +661,9 @@ export const deleteSignalsIndex = async ( await countDownTest( async () => { await supertest.delete(DETECTION_ENGINE_INDEX_URL).set('kbn-xsrf', 'true').send(); - return true; + return { + passed: true, + }; }, 'deleteSignalsIndex', log @@ -957,17 +963,19 @@ export const countDownES = async ( esFunction: () => Promise, unknown>>, esFunctionName: string, log: ToolingLog, - retryCount: number = 20, + retryCount: number = 50, timeoutWait = 250 ): Promise => { await countDownTest( async () => { const result = await esFunction(); if (result.body.version_conflicts !== 0) { - log.error(`Version conflicts for ${result.body.version_conflicts}`); - return false; + return { + passed: false, + errorMessage: 'Version conflicts for ${result.body.version_conflicts}', + }; } else { - return true; + return { passed: true }; } }, esFunctionName, @@ -998,22 +1006,37 @@ export const refreshIndex = async (es: Client, index?: string) => { * @param retryCount The number of times to retry before giving up (has default) * @param timeoutWait Time to wait before trying again (has default) */ -export const countDownTest = async ( - functionToTest: () => Promise, +export const countDownTest = async ( + functionToTest: () => Promise<{ + passed: boolean; + returnValue?: T | undefined; + errorMessage?: string; + }>, name: string, log: ToolingLog, - retryCount: number = 20, + retryCount: number = 50, timeoutWait = 250, ignoreThrow: boolean = false -) => { +): Promise => { if (retryCount > 0) { try { - const passed = await functionToTest(); - if (!passed) { - log.error(`Failure trying to ${name}, retries left are: ${retryCount - 1}`); + const testReturn = await functionToTest(); + if (!testReturn.passed) { + const error = testReturn.errorMessage != null ? ` error: ${testReturn.errorMessage},` : ''; + log.error(`Failure trying to ${name},${error} retries left are: ${retryCount - 1}`); // retry, counting down, and delay a bit before await new Promise((resolve) => setTimeout(resolve, timeoutWait)); - await countDownTest(functionToTest, name, log, retryCount - 1, timeoutWait, ignoreThrow); + const returnValue = await countDownTest( + functionToTest, + name, + log, + retryCount - 1, + timeoutWait, + ignoreThrow + ); + return returnValue; + } else { + return testReturn.returnValue; } } catch (err) { if (ignoreThrow) { @@ -1026,11 +1049,20 @@ export const countDownTest = async ( ); // retry, counting down, and delay a bit before await new Promise((resolve) => setTimeout(resolve, timeoutWait)); - await countDownTest(functionToTest, name, log, retryCount - 1, timeoutWait, ignoreThrow); + const returnValue = await countDownTest( + functionToTest, + name, + log, + retryCount - 1, + timeoutWait, + ignoreThrow + ); + return returnValue; } } } else { log.error(`Could not ${name}, no retries are left`); + return undefined; } }; @@ -1554,7 +1586,7 @@ export const indexEventLogExecutionEvents = async ( /** * Remove all .kibana-event-log-* documents with an execution.uuid - * This will retry 20 times before giving up and hopefully still not interfere with other tests + * This will retry 50 times before giving up and hopefully still not interfere with other tests * @param es The ElasticSearch handle * @param log The tooling logger */ @@ -1589,21 +1621,32 @@ export const getSignalsByRuleIds = async ( log: ToolingLog, ruleIds: string[] ): Promise> => { - const response = await supertest - .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) - .set('kbn-xsrf', 'true') - .send(getQuerySignalsRuleId(ruleIds)); - - if (response.status !== 200) { - log.error( - `Did not get an expected 200 "ok" when getting a signal by rule_id (getSignalsByRuleIds). CI issues could happen. Suspect this line if you are seeing CI issues. body: ${JSON.stringify( - response.body - )}, status: ${JSON.stringify(response.status)}` - ); + const signalsOpen = await countDownTest>( + async () => { + const response = await supertest + .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) + .set('kbn-xsrf', 'true') + .send(getQuerySignalsRuleId(ruleIds)); + if (response.status !== 200) { + return { + passed: false, + errorMessage: `Status is not 200 as expected, it is: ${response.status}`, + }; + } else { + return { + passed: true, + returnValue: response.body, + }; + } + }, + 'getSignalsByRuleIds', + log + ); + if (signalsOpen == null) { + throw new Error('Signals not defined after countdown, cannot continue'); + } else { + return signalsOpen; } - - const { body: signalsOpen }: { body: estypes.SearchResponse } = response; - return signalsOpen; }; /** @@ -1618,20 +1661,32 @@ export const getSignalsByIds = async ( ids: string[], size?: number ): Promise> => { - const response = await supertest - .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) - .set('kbn-xsrf', 'true') - .send(getQuerySignalsId(ids, size)); - - if (response.status !== 200) { - log.error( - `Did not get an expected 200 "ok" when getting a signal by id. CI issues could happen (getSignalsByIds). Suspect this line if you are seeing CI issues. body: ${JSON.stringify( - response.body - )}, status: ${JSON.stringify(response.status)}` - ); + const signalsOpen = await countDownTest>( + async () => { + const response = await supertest + .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) + .set('kbn-xsrf', 'true') + .send(getQuerySignalsId(ids, size)); + if (response.status !== 200) { + return { + passed: false, + errorMessage: `Status is not 200 as expected, it is: ${response.status}`, + }; + } else { + return { + passed: true, + returnValue: response.body, + }; + } + }, + 'getSignalsByIds', + log + ); + if (signalsOpen == null) { + throw new Error('Signals not defined after countdown, cannot continue'); + } else { + return signalsOpen; } - const { body: signalsOpen }: { body: estypes.SearchResponse } = response; - return signalsOpen; }; /** @@ -1644,20 +1699,32 @@ export const getSignalsById = async ( log: ToolingLog, id: string ): Promise> => { - const response = await supertest - .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) - .set('kbn-xsrf', 'true') - .send(getQuerySignalsId([id])); - - if (response.status !== 200) { - log.error( - `Did not get an expected 200 "ok" when getting signals by id (getSignalsById). CI issues could happen. Suspect this line if you are seeing CI issues. body: ${JSON.stringify( - response.body - )}, status: ${JSON.stringify(response.status)}` - ); + const signalsOpen = await countDownTest>( + async () => { + const response = await supertest + .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) + .set('kbn-xsrf', 'true') + .send(getQuerySignalsId([id])); + if (response.status !== 200) { + return { + passed: false, + returnValue: undefined, + }; + } else { + return { + passed: true, + returnValue: response.body, + }; + } + }, + 'getSignalsById', + log + ); + if (signalsOpen == null) { + throw new Error('Signals not defined after countdown, cannot continue'); + } else { + return signalsOpen; } - const { body: signalsOpen }: { body: estypes.SearchResponse } = response; - return signalsOpen; }; export const installPrePackagedRules = async ( @@ -1671,14 +1738,15 @@ export const installPrePackagedRules = async ( .set('kbn-xsrf', 'true') .send(); if (status !== 200) { - log.debug( - `Did not get an expected 200 "ok" when installing pre-packaged rules (installPrePackagedRules) yet. Retrying until we get a 200 "ok". body: ${JSON.stringify( + return { + passed: false, + errorMessage: `Did not get an expected 200 "ok" when installing pre-packaged rules (installPrePackagedRules) yet. Retrying until we get a 200 "ok". body: ${JSON.stringify( body - )}, status: ${JSON.stringify(status)}` - ); + )}, status: ${JSON.stringify(status)}`, + }; + } else { + return { passed: true }; } - - return status === 200; }, 'installPrePackagedRules', log diff --git a/x-pack/test/lists_api_integration/utils.ts b/x-pack/test/lists_api_integration/utils.ts index c0dc1d930a57e..67b6ed334ea7e 100644 --- a/x-pack/test/lists_api_integration/utils.ts +++ b/x-pack/test/lists_api_integration/utils.ts @@ -27,7 +27,7 @@ import { countDownTest } from '../detection_engine_api_integration/utils'; /** * Creates the lists and lists items index for use inside of beforeEach blocks of tests - * This will retry 20 times before giving up and hopefully still not interfere with other tests + * This will retry 50 times before giving up and hopefully still not interfere with other tests * @param supertest The supertest client library */ export const createListsIndex = async ( @@ -37,7 +37,9 @@ export const createListsIndex = async ( return countDownTest( async () => { await supertest.post(LIST_INDEX).set('kbn-xsrf', 'true').send(); - return true; + return { + passed: true, + }; }, 'createListsIndex', log @@ -55,7 +57,9 @@ export const deleteListsIndex = async ( return countDownTest( async () => { await supertest.delete(LIST_INDEX).set('kbn-xsrf', 'true').send(); - return true; + return { + passed: true, + }; }, 'deleteListsIndex', log @@ -64,7 +68,7 @@ export const deleteListsIndex = async ( /** * Creates the exception lists and lists items index for use inside of beforeEach blocks of tests - * This will retry 20 times before giving up and hopefully still not interfere with other tests + * This will retry 50 times before giving up and hopefully still not interfere with other tests * @param supertest The supertest client library */ export const createExceptionListsIndex = async ( @@ -74,7 +78,9 @@ export const createExceptionListsIndex = async ( return countDownTest( async () => { await supertest.post(LIST_INDEX).set('kbn-xsrf', 'true').send(); - return true; + return { + passed: true, + }; }, 'createListsIndex', log @@ -223,7 +229,9 @@ export const deleteAllExceptionsByType = async ( .get(`${EXCEPTION_LIST_URL}/_find?namespace_type=${type}`) .set('kbn-xsrf', 'true') .send(); - return finalCheck.data.length === 0; + return { + passed: finalCheck.data.length === 0, + }; }, `deleteAllExceptions by type: "${type}"`, log, From dc0dd64e7d1439d48adc0b2f606ee3ccb29ce2d8 Mon Sep 17 00:00:00 2001 From: Aleh Zasypkin Date: Wed, 13 Apr 2022 19:21:56 +0200 Subject: [PATCH 031/305] Unskip session cleanup API integration tests. (#130091) --- x-pack/test/security_api_integration/session_idle.config.ts | 2 ++ .../test/security_api_integration/session_lifespan.config.ts | 2 ++ .../security_api_integration/tests/session_idle/cleanup.ts | 5 ++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/x-pack/test/security_api_integration/session_idle.config.ts b/x-pack/test/security_api_integration/session_idle.config.ts index ee1fe3782a42a..0c78327c044eb 100644 --- a/x-pack/test/security_api_integration/session_idle.config.ts +++ b/x-pack/test/security_api_integration/session_idle.config.ts @@ -51,6 +51,8 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { saml_disable: { order: 3, realm: 'saml1', session: { idleTimeout: 0 } }, }, })}`, + // Exclude Uptime tasks to not interfere (additional ES load) with the session cleanup task. + `--xpack.task_manager.unsafe.exclude_task_types=${JSON.stringify(['UPTIME:*'])}`, ], }, diff --git a/x-pack/test/security_api_integration/session_lifespan.config.ts b/x-pack/test/security_api_integration/session_lifespan.config.ts index e236cbb8484d4..bc3ef851ceeca 100644 --- a/x-pack/test/security_api_integration/session_lifespan.config.ts +++ b/x-pack/test/security_api_integration/session_lifespan.config.ts @@ -51,6 +51,8 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { saml_disable: { order: 3, realm: 'saml1', session: { lifespan: 0 } }, }, })}`, + // Exclude Uptime tasks to not interfere (additional ES load) with the session cleanup task. + `--xpack.task_manager.unsafe.exclude_task_types=${JSON.stringify(['UPTIME:*'])}`, ], }, diff --git a/x-pack/test/security_api_integration/tests/session_idle/cleanup.ts b/x-pack/test/security_api_integration/tests/session_idle/cleanup.ts index 1668d9bc1b811..ee8422fe728ab 100644 --- a/x-pack/test/security_api_integration/tests/session_idle/cleanup.ts +++ b/x-pack/test/security_api_integration/tests/session_idle/cleanup.ts @@ -9,7 +9,7 @@ import { parse as parseCookie, Cookie } from 'tough-cookie'; import { setTimeout as setTimeoutAsync } from 'timers/promises'; import expect from '@kbn/expect'; import { adminTestUser } from '@kbn/test'; -import type { AuthenticationProvider } from '../../../../plugins/security/common/model'; +import type { AuthenticationProvider } from '../../../../plugins/security/common'; import { getSAMLRequestId, getSAMLResponse } from '../../fixtures/saml/saml_tools'; import { FtrProviderContext } from '../../ftr_provider_context'; @@ -76,8 +76,7 @@ export default function ({ getService }: FtrProviderContext) { return cookie; } - // FLAKY: https://github.com/elastic/kibana/issues/121482 - describe.skip('Session Idle cleanup', () => { + describe('Session Idle cleanup', () => { beforeEach(async () => { await es.cluster.health({ index: '.kibana_security_session*', wait_for_status: 'green' }); await esDeleteAllIndices('.kibana_security_session*'); From 405a9cf2d72316cbf92f3aa6dde1b84cb53e8ac8 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 13 Apr 2022 20:52:39 +0300 Subject: [PATCH 032/305] [Lens] Fixes partition legend visibility (#130090) --- .../public/components/partition_vis_component.tsx | 8 ++------ .../vis_types/pie/public/editor/components/pie.tsx | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/plugins/chart_expressions/expression_partition_vis/public/components/partition_vis_component.tsx b/src/plugins/chart_expressions/expression_partition_vis/public/components/partition_vis_component.tsx index e8ab85f2877ff..bd358ab005fd5 100644 --- a/src/plugins/chart_expressions/expression_partition_vis/public/components/partition_vis_component.tsx +++ b/src/plugins/chart_expressions/expression_partition_vis/public/components/partition_vis_component.tsx @@ -127,12 +127,8 @@ const PartitionVisComponent = (props: PartitionVisComponentProps) => { useEffect(() => { const legendShow = showLegendDefault(); - const showLegendDef = shouldShowLegend(visType, visParams.legendDisplay, bucketColumns); - if (showLegendDef !== legendShow) { - setShowLegend(legendShow); - props.uiState?.set('vis.legendOpen', legendShow); - } - }, [showLegendDefault, props.uiState, visParams.legendDisplay, visType, bucketColumns]); + setShowLegend(legendShow); + }, [showLegendDefault]); const onRenderChange = useCallback( (isRendered) => { diff --git a/src/plugins/vis_types/pie/public/editor/components/pie.tsx b/src/plugins/vis_types/pie/public/editor/components/pie.tsx index 9be0726ae9eb3..120993764a845 100644 --- a/src/plugins/vis_types/pie/public/editor/components/pie.tsx +++ b/src/plugins/vis_types/pie/public/editor/components/pie.tsx @@ -103,8 +103,8 @@ const PieOptions = (props: PieOptionsProps) => { ); useEffect(() => { - setLegendVisibility(legendUiStateValue); - }, [legendUiStateValue]); + setLegendVisibility(legendUiStateValue ?? stateParams.legendDisplay === LegendDisplay.SHOW); + }, [legendUiStateValue, stateParams.legendDisplay]); useEffect(() => { const fetchPalettes = async () => { From 255bba68770b97e49f4ac28a79baef7d03740c3f Mon Sep 17 00:00:00 2001 From: Pete Hampton Date: Wed, 13 Apr 2022 19:04:58 +0100 Subject: [PATCH 033/305] Fix broken filterlist. (#130146) --- .../server/lib/telemetry/filterlists/endpoint_alerts.ts | 4 ++-- .../security_solution/server/lib/telemetry/sender.test.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/endpoint_alerts.ts b/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/endpoint_alerts.ts index 15f7b0a2a54c8..5a62513b1ab38 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/endpoint_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/endpoint_alerts.ts @@ -62,8 +62,8 @@ const allowlistBaseEventFields: AllowlistFields = { directory: true, hash: true, Ext: { - compressed_bytes: true, - compressed_bytes_present: true, + bytes_compressed: true, + bytes_compressed_present: true, code_signature: true, header_bytes: true, header_data: true, diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/sender.test.ts b/x-pack/plugins/security_solution/server/lib/telemetry/sender.test.ts index dff3676c20c8a..f269388e5ac3e 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/sender.test.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/sender.test.ts @@ -59,8 +59,8 @@ describe('TelemetryEventsSender', () => { test: 'me', another: 'nope', Ext: { - compressed_bytes: 'data up to 4mb', - compressed_bytes_present: 'data up to 4mb', + bytes_compressed: 'data up to 4mb', + bytes_compressed_present: 'data up to 4mb', code_signature: { key1: 'X', key2: 'Y', @@ -133,8 +133,8 @@ describe('TelemetryEventsSender', () => { created: 0, path: 'X', Ext: { - compressed_bytes: 'data up to 4mb', - compressed_bytes_present: 'data up to 4mb', + bytes_compressed: 'data up to 4mb', + bytes_compressed_present: 'data up to 4mb', code_signature: { key1: 'X', key2: 'Y', From ab1bec320b4aea1a5b95428f15a16cc8d2ff801d Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 13 Apr 2022 13:06:40 -0500 Subject: [PATCH 034/305] [artifacts] Publish (#129499) * [artifacts] Publish release artifacts This adds the publish step to the release pipeline, which uses the release-manager CLI to upload a list Kibana artifacts. * cleanup * add missing artifacts * enable rm * fix syntax * fix artifact * source utils * fix path * fix version * skip steps * re-add pipeline steps * set permissions * Update .buildkite/scripts/steps/artifacts/publish.sh Co-authored-by: Chris * Revert "Update .buildkite/scripts/steps/artifacts/publish.sh" This reverts commit a6228f52cd75297f67a6d5505129c5257934f8ad. * export * support version qualifier * setup env * cleanup * consistency * \n * comment * unneccessary fallback * +x * hoist env args * source * link to artifacts * fix artifacts summary * relax docker glob * \n * fix summary * fix variable Co-authored-by: Chris --- .buildkite/pipelines/artifacts.yml | 24 ++++-- .buildkite/scripts/steps/artifacts/build.sh | 44 ++-------- .../scripts/steps/artifacts/docker_context.sh | 12 +-- .buildkite/scripts/steps/artifacts/env.sh | 34 ++++++++ .buildkite/scripts/steps/artifacts/publish.sh | 80 +++++++++++++++++++ .../scripts/steps/package_testing/test.sh | 2 +- 6 files changed, 141 insertions(+), 55 deletions(-) create mode 100755 .buildkite/scripts/steps/artifacts/env.sh create mode 100644 .buildkite/scripts/steps/artifacts/publish.sh diff --git a/.buildkite/pipelines/artifacts.yml b/.buildkite/pipelines/artifacts.yml index 773672c5f05f5..647f2c317569c 100644 --- a/.buildkite/pipelines/artifacts.yml +++ b/.buildkite/pipelines/artifacts.yml @@ -8,25 +8,33 @@ steps: - wait - command: TEST_PACKAGE=deb .buildkite/scripts/steps/package_testing/test.sh - label: Package testing for deb + label: Artifact Testing agents: queue: n2-4-virt - timeout_in_minutes: 20 + timeout_in_minutes: 30 - command: TEST_PACKAGE=rpm .buildkite/scripts/steps/package_testing/test.sh - label: Package testing for rpm + label: Artifact Testing agents: queue: n2-4-virt - timeout_in_minutes: 20 + timeout_in_minutes: 30 - command: TEST_PACKAGE=docker .buildkite/scripts/steps/package_testing/test.sh - label: Package testing for docker + label: Artifact Testing agents: queue: n2-4-virt - timeout_in_minutes: 20 + timeout_in_minutes: 30 - command: .buildkite/scripts/steps/artifacts/docker_context.sh - label: 'Docker Build Context' + label: 'Docker Context Verification' agents: queue: n2-2 - timeout_in_minutes: 20 + timeout_in_minutes: 30 + + - wait + + - command: .buildkite/scripts/steps/artifacts/publish.sh + label: 'Publish Kibana Artifacts' + agents: + queue: n2-2 + timeout_in_minutes: 30 diff --git a/.buildkite/scripts/steps/artifacts/build.sh b/.buildkite/scripts/steps/artifacts/build.sh index 9d40a713d4b0a..152b3ea9bf72b 100644 --- a/.buildkite/scripts/steps/artifacts/build.sh +++ b/.buildkite/scripts/steps/artifacts/build.sh @@ -4,44 +4,14 @@ set -euo pipefail .buildkite/scripts/bootstrap.sh -if [[ "${RELEASE_BUILD:-}" == "true" ]]; then - VERSION="$(jq -r '.version' package.json)" - RELEASE_ARG="--release" -else - VERSION="$(jq -r '.version' package.json)-SNAPSHOT" - RELEASE_ARG="" -fi +source .buildkite/scripts/steps/artifacts/env.sh -echo "--- Build Kibana Distribution" -node scripts/build "$RELEASE_ARG" --all-platforms --debug --docker-cross-compile --skip-docker-cloud - -echo "--- Build dependencies report" -node scripts/licenses_csv_report "--csv=target/dependencies-$VERSION.csv" - -# Release verification -if [[ "${RELEASE_BUILD:-}" == "true" ]]; then - echo "--- Build and push Kibana Cloud Distribution" - # This doesn't meet the requirements for a release image, implementation TBD - # Beats artifacts will need to match a specific commit sha that matches other stack iamges - # For now this is a placeholder step that will allow us to run automated Cloud tests - # against a best guess approximation of a release image - echo "$KIBANA_DOCKER_PASSWORD" | docker login -u "$KIBANA_DOCKER_USERNAME" --password-stdin docker.elastic.co - trap 'docker logout docker.elastic.co' EXIT - - node scripts/build \ - "$RELEASE_ARG" \ - --skip-initialize \ - --skip-generic-folders \ - --skip-platform-folders \ - --skip-archives \ - --docker-images \ - --docker-tag-qualifier="$GIT_COMMIT" \ - --docker-push \ - --skip-docker-ubi \ - --skip-docker-ubuntu \ - --skip-docker-contexts -fi +echo "--- Build Kibana artifacts" +node scripts/build --all-platforms --debug --docker-cross-compile $(echo "$BUILD_ARGS") +echo "--- Build and upload dependencies report" +node scripts/licenses_csv_report "--csv=target/dependencies-$FULL_VERSION.csv" cd target +sha512sum "dependencies-$FULL_VERSION.csv" > "dependencies-$FULL_VERSION.csv.sha512.txt" buildkite-agent artifact upload "*" -cd - \ No newline at end of file +cd - diff --git a/.buildkite/scripts/steps/artifacts/docker_context.sh b/.buildkite/scripts/steps/artifacts/docker_context.sh index 787f5d278febc..a20544de18fd9 100644 --- a/.buildkite/scripts/steps/artifacts/docker_context.sh +++ b/.buildkite/scripts/steps/artifacts/docker_context.sh @@ -4,17 +4,11 @@ set -euo pipefail .buildkite/scripts/bootstrap.sh -if [[ "${RELEASE_BUILD:-}" == "true" ]]; then - VERSION="$(jq -r '.version' package.json)" - RELEASE_ARG="--release" -else - VERSION="$(jq -r '.version' package.json)-SNAPSHOT" - RELEASE_ARG="" -fi +source .buildkite/scripts/steps/artifacts/env.sh echo "--- Create contexts" mkdir -p target -node scripts/build "$RELEASE_ARG" --skip-initialize --skip-generic-folders --skip-platform-folders --skip-archives --docker-context-use-local-artifact +node scripts/build --skip-initialize --skip-generic-folders --skip-platform-folders --skip-archives --docker-context-use-local-artifact $(echo "$BUILD_ARGS") echo "--- Setup default context" DOCKER_BUILD_FOLDER=$(mktemp -d) @@ -22,7 +16,7 @@ DOCKER_BUILD_FOLDER=$(mktemp -d) tar -xf target/kibana-[0-9]*-docker-build-context.tar.gz -C "$DOCKER_BUILD_FOLDER" cd $DOCKER_BUILD_FOLDER -buildkite-agent artifact download "kibana-$VERSION-linux-x86_64.tar.gz" . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" +buildkite-agent artifact download "kibana-$FULL_VERSION-linux-x86_64.tar.gz" . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" echo "--- Build context" docker build . diff --git a/.buildkite/scripts/steps/artifacts/env.sh b/.buildkite/scripts/steps/artifacts/env.sh new file mode 100755 index 0000000000000..ea2850ff9a38a --- /dev/null +++ b/.buildkite/scripts/steps/artifacts/env.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +set -euo pipefail + +RELEASE_BUILD="${RELEASE_BUILD:="false"}" +VERSION_QUALIFIER="${VERSION_QUALIFIER:=""}" + +BASE_VERSION="$(jq -r '.version' package.json)" + +if [[ "$VERSION_QUALIFIER" == "" ]]; then + QUALIFIER_VERSION="$BASE_VERSION" +else + QUALIFIER_VERSION="$BASE_VERSION-$VERSION_QUALIFIER" +fi + +if [[ "$RELEASE_BUILD" == "true" ]]; then + FULL_VERSION="$QUALIFIER_VERSION" + + # Beats artifacts will need to match a specific commit sha that matches other stack images + # for release builds. For now we are skipping Cloud builds until there's a pointer. + BUILD_ARGS="--release --skip-docker-cloud --version-qualifier=$VERSION_QUALIFIER" + WORKFLOW="staging" +else + FULL_VERSION="$QUALIFIER_VERSION-SNAPSHOT" + BUILD_ARGS="--version-qualifier=$VERSION_QUALIFIER" + WORKFLOW="snapshot" +fi + +export VERSION_QUALIFIER +export BASE_VERSION +export QUALIFIER_VERSION +export FULL_VERSION +export BUILD_ARGS +export WORKFLOW diff --git a/.buildkite/scripts/steps/artifacts/publish.sh b/.buildkite/scripts/steps/artifacts/publish.sh new file mode 100644 index 0000000000000..edb82d6f83ca0 --- /dev/null +++ b/.buildkite/scripts/steps/artifacts/publish.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/common/util.sh +source .buildkite/scripts/steps/artifacts/env.sh + +echo "--- Download and verify artifacts" +function download { + buildkite-agent artifact download "$1" . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" + buildkite-agent artifact download "$1.sha512.txt" . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" + sha512sum -c "$1.sha512.txt" + rm "$1.sha512.txt" +} + +mkdir -p target +cd target + +download "kibana-$FULL_VERSION-docker-image.tar.gz" +download "kibana-$FULL_VERSION-docker-image-aarch64.tar.gz" +download "kibana-ubi8-$FULL_VERSION-docker-image.tar.gz" + +download "kibana-$FULL_VERSION-arm64.deb" +download "kibana-$FULL_VERSION-amd64.deb" +download "kibana-$FULL_VERSION-x86_64.rpm" +download "kibana-$FULL_VERSION-aarch64.rpm" + +download "kibana-$FULL_VERSION-docker-build-context.tar.gz" +download "kibana-ironbank-$FULL_VERSION-docker-build-context.tar.gz" +download "kibana-ubi8-$FULL_VERSION-docker-build-context.tar.gz" + +download "kibana-$FULL_VERSION-linux-aarch64.tar.gz" +download "kibana-$FULL_VERSION-linux-x86_64.tar.gz" + +download "kibana-$FULL_VERSION-darwin-x86_64.tar.gz" +download "kibana-$FULL_VERSION-darwin-aarch64.tar.gz" + +download "kibana-$FULL_VERSION-windows-x86_64.zip" + +download "dependencies-$FULL_VERSION.csv" + +cd - + +echo "--- Set artifact permissions" +chmod -R a+r target/* +chmod -R a+w target + +echo "--- Pull latest Release Manager CLI" +echo "$KIBANA_DOCKER_PASSWORD" | docker login -u "$KIBANA_DOCKER_USERNAME" --password-stdin docker.elastic.co +trap 'docker logout docker.elastic.co' EXIT +docker pull docker.elastic.co/infra/release-manager:latest + +echo "--- Publish artifacts" +export VAULT_ROLE_ID="$(retry 5 15 gcloud secrets versions access latest --secret=kibana-buildkite-vault-role-id)" +export VAULT_SECRET_ID="$(retry 5 15 gcloud secrets versions access latest --secret=kibana-buildkite-vault-secret-id)" +export VAULT_ADDR="https://secrets.elastic.co:8200" +docker run --rm \ + --name release-manager \ + -e VAULT_ADDR \ + -e VAULT_ROLE_ID \ + -e VAULT_SECRET_ID \ + --mount type=bind,readonly=false,src="$PWD/target",target=/artifacts/target \ + docker.elastic.co/infra/release-manager:latest \ + cli collect \ + --project kibana \ + --branch "$KIBANA_BASE_BRANCH" \ + --commit "$GIT_COMMIT" \ + --workflow "$WORKFLOW" \ + --version "$BASE_VERSION" \ + --qualifier "$VERSION_QUALIFIER" \ + --artifact-set main + +ARTIFACTS_SUBDOMAIN="artifacts-$WORKFLOW" +ARTIFACTS_SUMMARY=$(curl -s "https://$ARTIFACTS_SUBDOMAIN.elastic.co/kibana/latest/$FULL_VERSION.json" | jq -re '.summary_url') + +cat << EOF | buildkite-agent annotate --style "info" --context artifacts-summary + ### Artifacts Summary + + $ARTIFACTS_SUMMARY +EOF diff --git a/.buildkite/scripts/steps/package_testing/test.sh b/.buildkite/scripts/steps/package_testing/test.sh index a9a46502d5b3b..4c8bac026af84 100755 --- a/.buildkite/scripts/steps/package_testing/test.sh +++ b/.buildkite/scripts/steps/package_testing/test.sh @@ -15,7 +15,7 @@ elif [[ "$TEST_PACKAGE" == "rpm" ]]; then buildkite-agent artifact download 'kibana-*.rpm' . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" KIBANA_IP_ADDRESS="192.168.56.6" elif [[ "$TEST_PACKAGE" == "docker" ]]; then - buildkite-agent artifact download "kibana-$KIBANA_PKG_VERSION-SNAPSHOT-docker-image.tar.gz" . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" + buildkite-agent artifact download "kibana-$KIBANA_PKG_VERSION*-docker-image.tar.gz" . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" KIBANA_IP_ADDRESS="192.168.56.7" fi cd .. From ee7f7dfc9feb3c89e4752fbfd601c452fb9166d4 Mon Sep 17 00:00:00 2001 From: Max Kovalev Date: Wed, 13 Apr 2022 22:19:55 +0300 Subject: [PATCH 035/305] [Maps] Display vector tile API response in Console (#128922) * #128534 - display vector tile API response in Console * 128534 - removing unused jquery * 128534 - changing package.json to fix imports * 128534 - fixed yarn.lock * 128543 - transforming the result of vector tile API response * 128534 - fixed translations * 128534 - updated structure of the API response * 128534 - refactoring; Updating the response format of API * 128534 - moving convert function to separate file * 128534 - added test; ACE support for vectorTiles output * 128534 - refactoring for test file * [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' * 128534 - logic changed due to removing jquery * Update src/plugins/console/public/application/containers/editor/legacy/console_editor/editor_output.tsx Co-authored-by: Nick Peihl * Update src/plugins/console/public/application/hooks/use_send_current_request_to_es/send_request_to_es.ts Co-authored-by: Nick Peihl * 128534 - added functional test * 128534 - fix for undefined value of editorOutput in some cases * 128534 - tests was updated; New query example added Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Nick Peihl --- package.json | 4 + src/core/public/http/fetch.ts | 3 + .../legacy/console_editor/editor_output.tsx | 24 ++-- ...convert_mapbox_vector_tile_to_json.test.ts | 105 ++++++++++++++++++ .../convert_mapbox_vector_tile_to_json.ts | 65 +++++++++++ .../mapbox_vector_tile/index.ts | 9 ++ .../mapbox_vector_tile/response.pbf | Bin 0 -> 510 bytes .../send_request_to_es.ts | 8 +- src/plugins/console/public/lib/es/es.ts | 1 + test/functional/apps/console/_vector_tile.ts | 46 ++++++++ test/functional/apps/console/index.js | 1 + .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - yarn.lock | 19 ++++ 14 files changed, 275 insertions(+), 12 deletions(-) create mode 100644 src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.test.ts create mode 100644 src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.ts create mode 100644 src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/index.ts create mode 100644 src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/response.pbf create mode 100644 test/functional/apps/console/_vector_tile.ts diff --git a/package.json b/package.json index 5d863bcc76e75..8b27254eac08e 100644 --- a/package.json +++ b/package.json @@ -193,6 +193,7 @@ "@mapbox/geojson-rewind": "^0.5.0", "@mapbox/mapbox-gl-draw": "1.3.0", "@mapbox/mapbox-gl-rtl-text": "0.2.3", + "@mapbox/vector-tile": "1.3.1", "@reduxjs/toolkit": "^1.6.1", "@slack/webhook": "^5.0.4", "@turf/along": "6.0.1", @@ -207,6 +208,7 @@ "@turf/length": "^6.0.2", "@types/elastic__analytics": "link:bazel-bin/packages/elastic-analytics/npm_module_types", "@types/jsonwebtoken": "^8.5.6", + "@types/mapbox__vector-tile": "1.3.0", "@types/moment-duration-format": "^2.2.3", "JSONStream": "1.3.5", "abort-controller": "^3.0.0", @@ -329,6 +331,7 @@ "p-map": "^4.0.0", "p-retry": "^4.2.0", "papaparse": "^5.2.0", + "pbf": "3.2.1", "pdfmake": "^0.2.4", "peggy": "^1.2.0", "pluralize": "3.1.0", @@ -677,6 +680,7 @@ "@types/ora": "^1.3.5", "@types/papaparse": "^5.0.3", "@types/parse-link-header": "^1.0.0", + "@types/pbf": "3.0.2", "@types/pdfmake": "^0.1.19", "@types/pegjs": "^0.10.1", "@types/pngjs": "^3.4.0", diff --git a/src/core/public/http/fetch.ts b/src/core/public/http/fetch.ts index 9a333161e1b7a..c6e7bcd1dd73f 100644 --- a/src/core/public/http/fetch.ts +++ b/src/core/public/http/fetch.ts @@ -33,6 +33,7 @@ interface Params { const JSON_CONTENT = /^(application\/(json|x-javascript)|text\/(x-)?javascript|x-json)(;.*)?$/; const NDJSON_CONTENT = /^(application\/ndjson)(;.*)?$/; const ZIP_CONTENT = /^(application\/zip)(;.*)?$/; +const VECTOR_TILE = /^(application\/vnd.mapbox-vector-tile)(;.*)?$/; const removedUndefined = (obj: Record | undefined) => { return omitBy(obj, (v) => v === undefined); @@ -164,6 +165,8 @@ export class Fetch { body = await response.blob(); } else if (JSON_CONTENT.test(contentType)) { body = await response.json(); + } else if (VECTOR_TILE.test(contentType)) { + body = await response.arrayBuffer(); } else { const text = await response.text(); diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor_output.tsx b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor_output.tsx index 9f9cdcad9115b..0817b6df5f7ef 100644 --- a/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor_output.tsx +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor_output.tsx @@ -5,10 +5,12 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - +import { VectorTile } from '@mapbox/vector-tile'; +import Protobuf from 'pbf'; import { EuiScreenReaderOnly } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useEffect, useRef } from 'react'; +import { convertMapboxVectorTileToJson } from './mapbox_vector_tile'; // Ensure the modes we might switch to dynamically are available import 'brace/mode/text'; @@ -46,7 +48,7 @@ function modeForContentType(contentType?: string) { if (!contentType) { return 'ace/mode/text'; } - if (isJSONContentType(contentType)) { + if (isJSONContentType(contentType) || isMapboxVectorTile(contentType)) { // Using hjson will allow us to use comments in editor output and solves the problem with error markers return 'ace/mode/hjson'; } else if (contentType.indexOf('application/yaml') >= 0) { @@ -86,15 +88,19 @@ function EditorOutputUI() { data .map((result) => { const { value, contentType } = result.response; + + let editorOutput; if (readOnlySettings.tripleQuotes && isJSONContentType(contentType)) { - return safeExpandLiteralStrings(value as string); + editorOutput = safeExpandLiteralStrings(value as string); + } else if (isMapboxVectorTile(contentType)) { + const vectorTile = new VectorTile(new Protobuf(value as ArrayBuffer)); + const vectorTileJson = convertMapboxVectorTileToJson(vectorTile); + editorOutput = safeExpandLiteralStrings(vectorTileJson as string); + } else { + editorOutput = value; } - if (isMapboxVectorTile(contentType)) { - return i18n.translate('console.outputCannotPreviewBinaryData', { - defaultMessage: 'Cannot preview binary data.', - }); - } - return value; + + return editorOutput; }) .join('\n'), mode diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.test.ts b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.test.ts new file mode 100644 index 0000000000000..a71d86014b4a8 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.test.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 + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import { readFileSync } from 'fs'; +import { resolve } from 'path'; +import { VectorTile } from '@mapbox/vector-tile'; +import Protobuf from 'pbf'; +import { convertMapboxVectorTileToJson } from './convert_mapbox_vector_tile_to_json'; + +const PATH_TO_PBF = resolve(__dirname, './response.pbf'); // Query sample "GET kibana_sample_data_logs/_mvt/geo.coordinates/8/23/63" + +const MOCK_JSON = JSON.parse(` +{ + "meta": [ + { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [0,4096], + [4096,4096], + [4096,0], + [0,0], + [0,4096] + ] + ] + }, + "properties": { + "_shards.failed": 0, + "_shards.skipped": 0, + "_shards.successful": 1, + "_shards.total": 1, + "aggregations._count.avg": 1, + "aggregations._count.count": 1, + "aggregations._count.max": 1, + "aggregations._count.min": 1, + "aggregations._count.sum": 1, + "hits.total.relation": "eq", + "hits.total.value": 1, + "timed_out": false, + "took": 1 + } + } + ], + "hits": [ + { + "geometry": { + "type": "Point", + "coordinates": [ + 3619, + 334 + ] + }, + "properties": { + "_id": "vFVzI4ABgP1gvXfjt0mI", + "_index": "kibana_sample_data_logs" + } + } + ], + "aggs": [ + { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [3616,336], + [3632,336], + [3632,320], + [3616,320], + [3616,336] + ] + ] + }, + "properties": { + "_key": "16/6114/16148", + "_count": 1 + } + } + ] +}`); + +describe('Convert mapbox vector tile to json', () => { + let vectorTile: VectorTile; + + beforeAll(() => { + const response = readFileSync(PATH_TO_PBF); + vectorTile = new VectorTile(new Protobuf(response)); + }); + + it('function should convert vectorTile to string', () => { + expect(() => { + const json = convertMapboxVectorTileToJson(vectorTile); + JSON.parse(json); + }).not.toThrow(); + }); + + it('response should have [meta, aggs, hits] layers', () => { + const vectorTileJson = JSON.parse(convertMapboxVectorTileToJson(vectorTile)); + expect(vectorTileJson).toEqual(MOCK_JSON); + }); +}); diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.ts b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.ts new file mode 100644 index 0000000000000..5a64dd98fe160 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.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 + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import { VectorTile, VectorTileLayer, VectorTileFeature } from '@mapbox/vector-tile'; + +interface MapboxVectorTileJson { + [key: string]: {}; +} + +export function convertMapboxVectorTileToJson(response: VectorTile) { + const data = response.layers; + const output: MapboxVectorTileJson = {}; + + for (const property in data) { + if (data.hasOwnProperty(property)) { + const propertyObject: VectorTileLayer = data[property]; + const featuresArray = []; + + for (let index = 0; index < propertyObject.length; index++) { + const feature = propertyObject.feature(index); + const properties = feature.properties; + const geometry = feature.loadGeometry()[0]; + const typeName = VectorTileFeature.types[feature.type]; + let coordinates = []; + + const coordinatesArray = []; + for (const value of geometry) { + coordinatesArray.push([value.x, value.y]); + } + + switch (feature.type) { + case 1: + coordinates.push(geometry[0].x, geometry[0].y); + break; + case 2: { + coordinates = coordinatesArray; + break; + } + case 3: { + coordinates.push(coordinatesArray); + break; + } + } + + featuresArray.push({ + geometry: { + type: typeName, + coordinates, + }, + properties, + }); + } + + output[property] = featuresArray; + } + } + + const sortedOutput = Object.fromEntries(Object.entries(output).sort().reverse()); // "meta" layer is now in top of the result + + return JSON.stringify(sortedOutput, null, '\t'); +} diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/index.ts b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/index.ts new file mode 100644 index 0000000000000..2af786f9ada74 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { convertMapboxVectorTileToJson } from './convert_mapbox_vector_tile_to_json'; diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/response.pbf b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/response.pbf new file mode 100644 index 0000000000000000000000000000000000000000..f9ac7be4a1887afa150880d008feb545ebbd5c09 GIT binary patch literal 510 zcmZ`$%TB^T6rGt)(N?jh8iCnBX635Tgplq)7aDf1j0=-yq(d3$1DR=quJ{laeu^u< zzz^{cuoN*a@b2z8x%ZxPF1a`HL?~%nHU|R`kH*T2UjUQDf9@2(cn~DdPFkiBG7I8mdiuq9*%JXGwfylLqSr|&Y_Oo51RpZ@z z(@6_}W)oNh`&0g0oEfEAqNrt7-Cn!ry4|+hbGsfz9kf~WiA)@G#q73C3Y`E!4PvCj z3fe>a$k0r9fDd6^qm}`d1F{?duT5$mu#B#m7}>1Fp!%ohI;BH2yIEG8%G4>_e2XU?Ni s208u%<}AuMF_egT;HQ})Sf%N-NDr(Nq(%dj_0^}?MEr>&50tTf1ES-Q{Qv*} literal 0 HcmV?d00001 diff --git a/src/plugins/console/public/application/hooks/use_send_current_request_to_es/send_request_to_es.ts b/src/plugins/console/public/application/hooks/use_send_current_request_to_es/send_request_to_es.ts index 1bac49a037e6e..39ca2245def2f 100644 --- a/src/plugins/console/public/application/hooks/use_send_current_request_to_es/send_request_to_es.ts +++ b/src/plugins/console/public/application/hooks/use_send_current_request_to_es/send_request_to_es.ts @@ -88,7 +88,13 @@ export function sendRequestToES(args: EsRequestArgs): Promise (response.status >= 200 && response.status < 300) || response.status === 404; if (isSuccess) { - let value = JSON.stringify(body, null, 2); + let value; + // check if object is ArrayBuffer + if (body instanceof ArrayBuffer) { + value = body; + } else { + value = JSON.stringify(body, null, 2); + } const warnings = response.headers.get('warning'); if (warnings) { diff --git a/src/plugins/console/public/lib/es/es.ts b/src/plugins/console/public/lib/es/es.ts index e17c226d61595..43baff8eef4df 100644 --- a/src/plugins/console/public/lib/es/es.ts +++ b/src/plugins/console/public/lib/es/es.ts @@ -45,6 +45,7 @@ export async function send({ asResponse, asSystemRequest, }; + return await http.post(`${API_BASE_PATH}/proxy`, options); } diff --git a/test/functional/apps/console/_vector_tile.ts b/test/functional/apps/console/_vector_tile.ts new file mode 100644 index 0000000000000..b02db523b95ac --- /dev/null +++ b/test/functional/apps/console/_vector_tile.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects(['common', 'console', 'header', 'home']); + const retry = getService('retry'); + + describe('console vector tiles response validation', function describeIndexTests() { + before(async () => { + await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + useActualUrl: true, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.home.addSampleDataSet('logs'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.common.navigateToApp('console'); + await PageObjects.console.dismissTutorial(); + await PageObjects.console.clearTextArea(); + }); + + it('should validate response', async () => { + await PageObjects.console.enterText(`GET kibana_sample_data_logs/_mvt/geo.coordinates/0/0/0`); + await PageObjects.console.clickPlay(); + await retry.try(async () => { + const actualResponse = await PageObjects.console.getResponse(); + expect(actualResponse).to.contain('"meta": ['); + }); + }); + + after(async () => { + await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + useActualUrl: true, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.home.removeSampleDataSet('logs'); + }); + }); +} diff --git a/test/functional/apps/console/index.js b/test/functional/apps/console/index.js index 7a1fb578b4e4a..c3d0553514cb5 100644 --- a/test/functional/apps/console/index.js +++ b/test/functional/apps/console/index.js @@ -18,5 +18,6 @@ export default function ({ getService, loadTestFile }) { loadTestFile(require.resolve('./_console')); loadTestFile(require.resolve('./_autocomplete')); + loadTestFile(require.resolve('./_vector_tile')); }); } diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 59ba105e0296d..43d84ae794e17 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -1139,7 +1139,6 @@ "console.notification.error.historyQuotaReachedMessage": "リクエスト履歴が満杯です。コンソール履歴を消去するか、新しいリクエストの保存を無効にしてください。", "console.notification.error.noRequestSelectedTitle": "リクエストを選択していません。リクエストの中にカーソルを置いて選択します。", "console.notification.error.unknownErrorTitle": "不明なリクエストエラー", - "console.outputCannotPreviewBinaryData": "バイナリデータをプレビューできません。", "console.outputTextarea": "開発ツールコンソール出力", "console.pageHeading": "コンソール", "console.requestInProgressBadgeText": "リクエストが進行中", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index c01827e7977b5..6036823460d5e 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -1143,7 +1143,6 @@ "console.notification.error.historyQuotaReachedMessage": "请求历史记录已满。请清除控制台历史记录或禁止保存新的请求。", "console.notification.error.noRequestSelectedTitle": "未选择任何请求。将鼠标置于请求内即可选择。", "console.notification.error.unknownErrorTitle": "未知请求错误", - "console.outputCannotPreviewBinaryData": "无法预览二进制数据。", "console.outputTextarea": "开发工具控制台输出", "console.pageHeading": "控制台", "console.requestInProgressBadgeText": "进行中的请求", diff --git a/yarn.lock b/yarn.lock index 21d306c9ded9b..0c4a7ebf681ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6281,6 +6281,20 @@ resolved "https://registry.yarnpkg.com/@types/lz-string/-/lz-string-1.3.34.tgz#69bfadde419314b4a374bf2c8e58659c035ed0a5" integrity sha512-j6G1e8DULJx3ONf6NdR5JiR2ZY3K3PaaqiEuKYkLQO0Czfi1AzrtjfnfCROyWGeDd5IVMKCwsgSmMip9OWijow== +"@types/mapbox__point-geometry@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz#488a9b76e8457d6792ea2504cdd4ecdd9860a27e" + integrity sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA== + +"@types/mapbox__vector-tile@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz#8fa1379dbaead1e1b639b8d96cfd174404c379d6" + integrity sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g== + dependencies: + "@types/geojson" "*" + "@types/mapbox__point-geometry" "*" + "@types/pbf" "*" + "@types/markdown-it@^12.2.3": version "12.2.3" resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" @@ -6511,6 +6525,11 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== +"@types/pbf@*", "@types/pbf@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.2.tgz#8d291ad68b4b8c533e96c174a2e3e6399a59ed61" + integrity sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ== + "@types/pdfkit@*": version "0.10.6" resolved "https://registry.yarnpkg.com/@types/pdfkit/-/pdfkit-0.10.6.tgz#9ddde7e642e6c3f1245134456a03fbc4b67dc4b5" From 72a5178179454739223bfe84072cc34e3f16534b Mon Sep 17 00:00:00 2001 From: gchaps <33642766+gchaps@users.noreply.github.com> Date: Wed, 13 Apr 2022 12:21:28 -0700 Subject: [PATCH 036/305] [DOCS] Reorganizes Osquery docs (#128107) * [DOCS] Reorganizes Osquery docs * [DOCS] Adds coming tag to osquery docs Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- docs/osquery/advanced-osquery.asciidoc | 103 ++++++++ .../exported-fields-reference.asciidoc | 4 + docs/osquery/manage-integration.asciidoc | 111 ++++++++ docs/osquery/osquery.asciidoc | 238 ++---------------- 4 files changed, 234 insertions(+), 222 deletions(-) create mode 100644 docs/osquery/advanced-osquery.asciidoc create mode 100644 docs/osquery/exported-fields-reference.asciidoc create mode 100644 docs/osquery/manage-integration.asciidoc diff --git a/docs/osquery/advanced-osquery.asciidoc b/docs/osquery/advanced-osquery.asciidoc new file mode 100644 index 0000000000000..4f03a6d5fe5eb --- /dev/null +++ b/docs/osquery/advanced-osquery.asciidoc @@ -0,0 +1,103 @@ +[[advanced-osquery]] +== Advanced Osquery + +[float] +[[osquery-map-fields]] +=== Map result fields to ECS + +When you save queries or add queries to a pack, you can optionally map Osquery results or static values to fields in +the {ecs-ref}/ecs-reference.html[Elastic Common Schema] (ECS). +This standardizes your Osquery data for use across detections, machine learning, +and any other areas that rely on ECS-compliant data. +When the query is run, the results include the original `osquery.` +and the mapped ECS fields. For example, if you update a query to map `osquery.name` to `user.name`, the query results include both fields. + +. Edit saved queries or queries in a pack to map fields: + +* For *Saved queries*: Open the *Saved queries* tab, and then click the edit icon for the query that you want to map. + +* For *packs*: Open the *Packs* tab, edit a pack, and then click the edit icon for the query that you want to map. + +. In the **ECS mapping** section, select an **ECS field** to map. + +. In the **Value** column, use the dropdown on the left to choose what type of value to map to the ECS field: + +** **Osquery value**: Select an Osquery field. The fields available are based on the SQL query entered, and only include fields that the query returns. When the query runs, the ECS field is set dynamically to the value of the Osquery field selected. + +** **Static value**: Enter a static value. When the query runs, the ECS field is set to the value entered. For example, static fields can be used to apply `tags` or your preferred `event.category` to the query results. + +. Map more fields, as needed. To remove any mapped rows, click the delete icon. + +. Save your changes. + +[NOTE] +========================= + +* Some ECS fields are restricted and cannot be mapped. These are not available in the ECS dropdown. + +* Some ECS fields are restricted to a set of allowed values, like {ecs-ref}/ecs-event.html#field-event-category[event.category]. Use the {ecs-ref}/ecs-field-reference.html[ECS Field Reference] for help when mapping fields. + +* Osquery date fields have a variety of data types (including integer, text, or bigint). When mapping an Osquery date field to an ECS date field, you might need to use SQL operators in the query to get an {es}-compatible +{ref}/date.html[date] type. +========================= + + +[float] +[[osquery-extended-tables]] +=== Extended tables for Kubernetes queries +In addition to the Osquery schema, the Elastic-provided version of Osquery also includes the following tables to support Kubernetes containers. These can be queried with live or scheduled queries. + +* `host_users` + +* `host_groups` + +* `host_processes` + +When querying these tables, the expectation is that the `/etc/passwd`, `/etc/group`, and `/proc` are available in the container under `/hostfs` as: +`/hostfs/etc/passwd`, `/hostfs/etc/group`, and `/hostfs/proc`. For information about the fields available in these tables, see the +https://docs.elastic.co/en/integrations/osquery_manager#exported-fields[exported fields] reference. + +[float] +[[osquery-status]] +=== Osquery status + +A query can have the following status: + +[cols="2*<"] +|=== +| Successful | The query successfully completed. +| Failed | The query encountered a problem, such as an issue with the query or the agent was disconnected, and might have failed. +| Not yet responded | The query has not been sent to the agent. +| Expired | The action request timed out. The agent may be offline. +|=== + +NOTE: If an agent is offline, the request status remains **pending** as {kib} retries the request. +By default, a query request times out after five minutes. The time out applies to the time it takes +to deliver the action request to an agent to run a query. If the action completes after the timeout period, +the results are still returned. + + +[float] +[[osquery-results]] +=== Osquery results +When you run live or scheduled queries, the results are automatically +stored in an {es} index, so that you can search, analyze, and visualize this data in {kib}. +For a list of the Osquery fields that can be returned in query results, +refer to https://docs.elastic.co/en/integrations/osquery_manager#exported-fields[exported fields]. +Query results can also include ECS fields, if the query has a defined ECS mapping. + +Osquery responses include the following information: + +* Everything prefaced with `osquery.` is part of the query response. These fields are not mapped to ECS by default. + +* Results include some ECS fields by default, such as `host.*` and `agent.*`, which provide information about the host that was queried. + +* For live queries, the `action_data.query` is the query that was sent. + +* For scheduled queries in a pack, the `action_id` has the format `pack__`. You can use this information to look up the query that was run. + +* By default, all query results are https://osquery.readthedocs.io/en/stable/deployment/logging/#snapshot-logs[snapshot logs] +that represent a point in time with a set of results, with no +https://osquery.readthedocs.io/en/stable/deployment/logging/#differential-logs[differentials]. + +* Osquery data is stored in the `logs-osquery_manager.result-` datastream, and the result row data is under the `osquery` property in the document. diff --git a/docs/osquery/exported-fields-reference.asciidoc b/docs/osquery/exported-fields-reference.asciidoc new file mode 100644 index 0000000000000..d359c484e4439 --- /dev/null +++ b/docs/osquery/exported-fields-reference.asciidoc @@ -0,0 +1,4 @@ +[[exported-fields-osquery]] +== Exported fields reference + +_Content coming soon._ diff --git a/docs/osquery/manage-integration.asciidoc b/docs/osquery/manage-integration.asciidoc new file mode 100644 index 0000000000000..e35b9ffcc2473 --- /dev/null +++ b/docs/osquery/manage-integration.asciidoc @@ -0,0 +1,111 @@ +[[manage-osquery-integration]] +== Manage the integration + +[float] +=== System requirements + +* {fleet-guide}/fleet-overview.html[Fleet] is enabled on your cluster, and +one or more {fleet-guide}/elastic-agent-installation.html[Elastic Agents] is enrolled. +* The https://docs.elastic.co/en/integrations/osquery_manager[*Osquery Manager*] integration +has been added and configured +for an agent policy through Fleet. +This integration supports x64 architecture on Windows, MacOS, and Linux platforms, +and ARM64 architecture on Linux. + +[NOTE] +========================= + +* The original {filebeat-ref}/filebeat-module-osquery.html[Filebeat Osquery module] +and the https://docs.elastic.co/en/integrations/osquery[Osquery] +integration collect logs from self-managed Osquery deployments. +The *Osquery Manager* integration manages Osquery deployments +and supports running and scheduling queries from {kib}. + +* *Osquery Manager* cannot be integrated with an Elastic Agent in standalone mode. +========================= + +[float] +=== Customize Osquery sub-feature privileges + +Depending on your https://www.elastic.co/subscriptions[subscription level], +you can further customize the sub-feature privileges +for *Osquery Manager*. These include options to grant specific access for running live queries, +running saved queries, saving queries, and scheduling packs. For example, +you can create roles for users who can only run live or saved queries, but who cannot save or schedule queries. +This is useful for teams who need in-depth and detailed control. + +[float] +=== Customize Osquery configuration +experimental[] By default, all Osquery Manager integrations share the same osquery configuration. However, you can customize how Osquery is configured by editing the Osquery Manager integration for each agent policy +you want to adjust. The custom configuration is then applied to all agents in the policy. +This powerful feature allows you to configure +https://osquery.readthedocs.io/en/stable/deployment/file-integrity-monitoring[File Integrity Monitoring], https://osquery.readthedocs.io/en/stable/deployment/process-auditing[Process auditing], +and https://osquery.readthedocs.io/en/stable/deployment/configuration/#configuration-specification[others]. + +[IMPORTANT] +========================= + +* Take caution when editing this configuration. The changes you make are distributed to all agents in the policy. + +* Take caution when editing `packs` using the Advanced *Osquery config* field. +Any changes you make to `packs` from this field are not reflected in the UI on the Osquery *Packs* page in {kib}, however, these changes are deployed to agents in the policy. +While this allows you to use advanced Osquery functionality like pack discovery queries, you do lose the ability to manage packs defined this way from the Osquery *Packs* page. +========================= + +. From the {kib} main menu, click *Fleet*, then the *Agent policies* tab. + +. Click the name of the agent policy where you want to adjust the Osquery configuration. The configuration changes you make only apply to the policy you select. + +. Click the name of the *Osquery Manager* integration, or add the integration first if the agent policy does not yet have it. + +. From the *Edit Osquery Manager integration* page, expand the *Advanced* section. + +. Edit the *Osquery config* JSON field to apply your preferred Osquery configuration. Note the following: + +* The field may already have content if you have scheduled packs for this agent policy. To keep these packs scheduled, do not remove the `packs` section. + +* Refer to the https://osquery.readthedocs.io/en/stable/[Osquery documentation] for configuration options. + +* Some fields are protected and cannot be set. A warning is displayed with details about which fields should be removed. + +* (Optional) To load a full configuration file, drag and drop an Osquery `.conf` file into the area at the bottom of the page. + +. Click *Save integration* to apply the custom configuration to all agents in the policy. ++ +As an example, the following configuration disables two tables. ++ +```ts +{ + "options":{ + "disable_tables":"curl,process_envs" + } +} +``` + +[float] +=== Upgrade Osquery versions + +The https://github.com/osquery/osquery/releases[Osquery version] available on an Elastic Agent +is associated to the version of Osquery Beat on the Agent. +To get the latest version of Osquery Beat, +https://www.elastic.co/guide/en/fleet/master/upgrade-elastic-agent.html[upgrade your Elastic Agent]. + +[float] +=== Debug issues +If you encounter issues with *Osquery Manager*, find the relevant logs for {elastic-agent} +and Osquerybeat in the agent directory. Refer to the {fleet-guide}/installation-layout.html[Fleet Installation layout] to find the log file location for your OS. + +```ts +../data/elastic-agent-*/logs/elastic-agent-json.log-* +../data/elastic-agent-*/logs/default/osquerybeat-json.log +``` + +To get more details in the logs, change the agent logging level to debug: + +. Open the main menu, and then select **Fleet**. + +. Select the agent that you want to debug. + +. On the **Logs** tab, change the **Agent logging level** to **debug**, and then click **Apply changes**. ++ +`agent.logging.level` is updated in `fleet.yml`, and the logging level is changed to `debug`. diff --git a/docs/osquery/osquery.asciidoc b/docs/osquery/osquery.asciidoc index e745835c87999..ab8058027934e 100644 --- a/docs/osquery/osquery.asciidoc +++ b/docs/osquery/osquery.asciidoc @@ -1,13 +1,13 @@ -[chapter] -[role="xpack"] [[osquery]] = Osquery +[partintro] +-- https://osquery.io[Osquery] is an open source tool that lets you query operating systems like a database, providing you with visibility into your infrastructure and operating systems. -Using basic SQL commands, you can ask questions about devices, such as servers, +Using basic SQL commands, you can ask questions about devices, such as servers, Docker containers, and computers running Linux, macOS, or Windows. The https://osquery.io/schema[extensive schema] helps with a variety of use cases, -including vulnerability detection, compliance monitoring, incident investigations, and more. +including vulnerability detection, compliance monitoring, incident investigations, and more. With Osquery in {kib}, you can: @@ -56,11 +56,11 @@ image::images/enter-query.png[Select saved query dropdown name showing query nam or to the drag-and-drop *Lens* editor to create visualizations. . To view more information about the request, such as failures, open the *Status* tab. . To save the query for future use, click *Save for later* and define the ID, -description, and other <>. +description, and other <>. [float] [[osquery-view-history]] -=== View or rerun previous live queries +== View or rerun previous live queries From the *Live queries history* section on the *Live queries* tab: @@ -77,8 +77,8 @@ image::images/live-query-check-results.png[Results of OSquery] == Schedule queries with packs Create packs to organize sets of queries. For example, you might create one pack that checks -for IT compliance-type issues, and another pack that monitors for evidence of malware. -You can schedule packs to run for one or more agent policies. When scheduled, queries in the pack are run at the set intervals for all agents in those policies. Scheduling packs is optional. +for IT compliance-type issues, and another pack that monitors for evidence of malware. +You can schedule packs to run for one or more agent policies. When scheduled, queries in the pack are run at the set intervals for all agents in those policies. Scheduling packs is optional. . Open the **Packs** tab. @@ -95,7 +95,7 @@ You can schedule packs to run for one or more agent policies. When scheduled, qu . Add queries to schedule: * To add a query to the pack, click *Add query*, and then either add a saved query or enter a new query. -Each query must include a unique query ID and the interval at which it should run. +Each query must include a unique query ID and the interval at which it should run. Optionally, set the minimum Osquery version and platform, or <>. When you add a saved query to a pack, this adds a copy of the query. A connection is not maintained between saved queries and packs. @@ -105,7 +105,7 @@ or <>. When you add a saved query to a pack, [float] [[osquery-schedule-status]] -=== View status of scheduled packs +== View status of scheduled packs . Open the **Packs** tab. @@ -151,222 +151,16 @@ To add or edit saved queries from the *Saved queries* tab: ** The operating system required to run the query. For information about supported platforms per table, refer to the https://osquery.io/schema[Osquery schema]. -. Click *Test configuration* to test the query and any mapped fields: +. Click *Test configuration* to test the query and any mapped fields: * From the *Test query* panel, select agents or groups to test the query, then click *Submit* to run a live query. Result columns with the image:images/mapped-icon.png[mapping] icon are mapped. Hover over the icon to see the mapped ECS field. -. Click *Save* or *Update*. +. Click *Save* or *Update*. -[float] -[[osquery-map-fields]] -== Map result fields to ECS - -When you save queries or add queries to a pack, you can optionally map Osquery results or static values to fields in -the {ecs-ref}/ecs-reference.html[Elastic Common Schema] (ECS). -This standardizes your Osquery data for use across detections, machine learning, -and any other areas that rely on ECS-compliant data. -When the query is run, the results include the original `osquery.` -and the mapped ECS fields. For example, if you update a query to map `osquery.name` to `user.name`, the query results include both fields. - -. Edit saved queries or queries in a pack to map fields: - -* For *Saved queries*: Open the *Saved queries* tab, and then click the edit icon for the query that you want to map. - -* For *packs*: Open the *Packs* tab, edit a pack, and then click the edit icon for the query that you want to map. - -. In the **ECS mapping** section, select an **ECS field** to map. - -. In the **Value** column, use the dropdown on the left to choose what type of value to map to the ECS field: - -** **Osquery value**: Select an Osquery field. The fields available are based on the SQL query entered, and only include fields that the query returns. When the query runs, the ECS field is set dynamically to the value of the Osquery field selected. - -** **Static value**: Enter a static value. When the query runs, the ECS field is set to the value entered. For example, static fields can be used to apply `tags` or your preferred `event.category` to the query results. - -. Map more fields, as needed. To remove any mapped rows, click the delete icon. - -. Save your changes. - -[NOTE] -========================= - -* Some ECS fields are restricted and cannot be mapped. These are not available in the ECS dropdown. - -* Some ECS fields are restricted to a set of allowed values, like {ecs-ref}/ecs-event.html#field-event-category[event.category]. Use the {ecs-ref}/ecs-field-reference.html[ECS Field Reference] for help when mapping fields. - -* Osquery date fields have a variety of data types (including integer, text, or bigint). When mapping an Osquery date field to an ECS date field, you might need to use SQL operators in the query to get an {es}-compatible -{ref}/date.html[date] type. -========================= - - -[float] -[[osquery-extended-tables]] -== Extended tables for Kubernetes queries -In addition to the Osquery schema, the Elastic-provided version of Osquery also includes the following tables to support Kubernetes containers. These can be queried with live or scheduled queries. - -* `host_users` +-- -* `host_groups` +include::advanced-osquery.asciidoc[] -* `host_processes` - -When querying these tables, the expectation is that the `/etc/passwd`, `/etc/group`, and `/proc` are available in the container under `/hostfs` as: -`/hostfs/etc/passwd`, `/hostfs/etc/group`, and `/hostfs/proc`. For information about the fields available in these tables, see the -https://docs.elastic.co/en/integrations/osquery_manager#exported-fields[exported fields] reference. - -[float] -[[osquery-status]] -== Osquery status - -A query can have the following status: - -[cols="2*<"] -|=== -| Successful | The query successfully completed. -| Failed | The query encountered a problem, such as an issue with the query or the agent was disconnected, and might have failed. -| Not yet responded | The query has not been sent to the agent. -| Expired | The action request timed out. The agent may be offline. -|=== - -NOTE: If an agent is offline, the request status remains **pending** as {kib} retries the request. -By default, a query request times out after five minutes. The time out applies to the time it takes -to deliver the action request to an agent to run a query. If the action completes after the timeout period, -the results are still returned. - - -[float] -[[osquery-results]] -== Osquery results -When you run live or scheduled queries, the results are automatically -stored in an {es} index, so that you can search, analyze, and visualize this data in {kib}. -For a list of the Osquery fields that can be returned in query results, -refer to https://docs.elastic.co/en/integrations/osquery_manager#exported-fields[exported fields]. -Query results can also include ECS fields, if the query has a defined ECS mapping. - -Osquery responses include the following information: - -* Everything prefaced with `osquery.` is part of the query response. These fields are not mapped to ECS by default. - -* Results include some ECS fields by default, such as `host.*` and `agent.*`, which provide information about the host that was queried. - -* For live queries, the `action_data.query` is the query that was sent. - -* For scheduled queries in a pack, the `action_id` has the format `pack__`. You can use this information to look up the query that was run. - -* By default, all query results are https://osquery.readthedocs.io/en/stable/deployment/logging/#snapshot-logs[snapshot logs] -that represent a point in time with a set of results, with no -https://osquery.readthedocs.io/en/stable/deployment/logging/#differential-logs[differentials]. - -* Osquery data is stored in the `logs-osquery_manager.result-` datastream, and the result row data is under the `osquery` property in the document. - -[float] -[[manage-osquery-integration]] -== Manage the integration +include::manage-integration.asciidoc[] -[float] -=== System requirements - -* {fleet-guide}/fleet-overview.html[Fleet] is enabled on your cluster, and -one or more {fleet-guide}/elastic-agent-installation.html[Elastic Agents] is enrolled. -* The https://docs.elastic.co/en/integrations/osquery_manager[*Osquery Manager*] integration -has been added and configured -for an agent policy through Fleet. -This integration supports x64 architecture on Windows, MacOS, and Linux platforms, -and ARM64 architecture on Linux. - -[NOTE] -========================= - -* The original {filebeat-ref}/filebeat-module-osquery.html[Filebeat Osquery module] -and the https://docs.elastic.co/en/integrations/osquery[Osquery] -integration collect logs from self-managed Osquery deployments. -The *Osquery Manager* integration manages Osquery deployments -and supports running and scheduling queries from {kib}. - -* *Osquery Manager* cannot be integrated with an Elastic Agent in standalone mode. -========================= - -[float] -=== Customize Osquery sub-feature privileges - -Depending on your https://www.elastic.co/subscriptions[subscription level], -you can further customize the sub-feature privileges -for *Osquery Manager*. These include options to grant specific access for running live queries, -running saved queries, saving queries, and scheduling packs. For example, -you can create roles for users who can only run live or saved queries, but who cannot save or schedule queries. -This is useful for teams who need in-depth and detailed control. - -[float] -=== Customize Osquery configuration -experimental[] By default, all Osquery Manager integrations share the same osquery configuration. However, you can customize how Osquery is configured by editing the Osquery Manager integration for each agent policy -you want to adjust. The custom configuration is then applied to all agents in the policy. -This powerful feature allows you to configure -https://osquery.readthedocs.io/en/stable/deployment/file-integrity-monitoring[File Integrity Monitoring], https://osquery.readthedocs.io/en/stable/deployment/process-auditing[Process auditing], -and https://osquery.readthedocs.io/en/stable/deployment/configuration/#configuration-specification[others]. - -[IMPORTANT] -========================= - -* Take caution when editing this configuration. The changes you make are distributed to all agents in the policy. - -* Take caution when editing `packs` using the Advanced *Osquery config* field. -Any changes you make to `packs` from this field are not reflected in the UI on the Osquery *Packs* page in {kib}, however, these changes are deployed to agents in the policy. -While this allows you to use advanced Osquery functionality like pack discovery queries, you do lose the ability to manage packs defined this way from the Osquery *Packs* page. -========================= - -. From the {kib} main menu, click *Fleet*, then the *Agent policies* tab. - -. Click the name of the agent policy where you want to adjust the Osquery configuration. The configuration changes you make only apply to the policy you select. - -. Click the name of the *Osquery Manager* integration, or add the integration first if the agent policy does not yet have it. - -. From the *Edit Osquery Manager integration* page, expand the *Advanced* section. - -. Edit the *Osquery config* JSON field to apply your preferred Osquery configuration. Note the following: - -* The field may already have content if you have scheduled packs for this agent policy. To keep these packs scheduled, do not remove the `packs` section. - -* Refer to the https://osquery.readthedocs.io/en/stable/[Osquery documentation] for configuration options. - -* Some fields are protected and cannot be set. A warning is displayed with details about which fields should be removed. - -* (Optional) To load a full configuration file, drag and drop an Osquery `.conf` file into the area at the bottom of the page. - -. Click *Save integration* to apply the custom configuration to all agents in the policy. -+ -As an example, the following configuration disables two tables. -+ -```ts -{ - "options":{ - "disable_tables":"curl,process_envs" - } -} -``` - -[float] -=== Upgrade Osquery versions - -The https://github.com/osquery/osquery/releases[Osquery version] available on an Elastic Agent -is associated to the version of Osquery Beat on the Agent. -To get the latest version of Osquery Beat, -https://www.elastic.co/guide/en/fleet/master/upgrade-elastic-agent.html[upgrade your Elastic Agent]. - -[float] -=== Debug issues -If you encounter issues with *Osquery Manager*, find the relevant logs for {elastic-agent} -and Osquerybeat in the agent directory. Refer to the {fleet-guide}/installation-layout.html[Fleet Installation layout] to find the log file location for your OS. - -```ts -../data/elastic-agent-*/logs/elastic-agent-json.log-* -../data/elastic-agent-*/logs/default/osquerybeat-json.log -``` - -To get more details in the logs, change the agent logging level to debug: - -. Open the main menu, and then select **Fleet**. - -. Select the agent that you want to debug. - -. On the **Logs** tab, change the **Agent logging level** to **debug**, and then click **Apply changes**. -+ -`agent.logging.level` is updated in `fleet.yml`, and the logging level is changed to `debug`. +include::exported-fields-reference.asciidoc[] From de25fb028012f527e188ce39b411eb1a53290522 Mon Sep 17 00:00:00 2001 From: spalger Date: Wed, 13 Apr 2022 14:54:51 -0500 Subject: [PATCH 037/305] skip flaky suite (#130177) --- .../public/services/active_cursor/use_active_cursor.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/charts/public/services/active_cursor/use_active_cursor.test.ts b/src/plugins/charts/public/services/active_cursor/use_active_cursor.test.ts index 04d9297ed1d8c..851dd0000be1c 100644 --- a/src/plugins/charts/public/services/active_cursor/use_active_cursor.test.ts +++ b/src/plugins/charts/public/services/active_cursor/use_active_cursor.test.ts @@ -15,7 +15,8 @@ import type { ActiveCursorSyncOption, ActiveCursorPayload } from './types'; import type { Chart, PointerEvent } from '@elastic/charts'; import type { Datatable } from '../../../../expressions/public'; -describe('useActiveCursor', () => { +// FLAKY: https://github.com/elastic/kibana/issues/130177 +describe.skip('useActiveCursor', () => { let cursor: ActiveCursorPayload['cursor']; let dispatchExternalPointerEvent: jest.Mock; From 774f4a0f18c30cc3c37a93864ad898c008a58510 Mon Sep 17 00:00:00 2001 From: spalger Date: Wed, 13 Apr 2022 14:56:37 -0500 Subject: [PATCH 038/305] skip flaky suite (#129467) --- x-pack/test/functional/apps/maps/auto_fit_to_bounds.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional/apps/maps/auto_fit_to_bounds.js b/x-pack/test/functional/apps/maps/auto_fit_to_bounds.js index 8af2e45b59838..2d5813e81c214 100644 --- a/x-pack/test/functional/apps/maps/auto_fit_to_bounds.js +++ b/x-pack/test/functional/apps/maps/auto_fit_to_bounds.js @@ -11,7 +11,8 @@ export default function ({ getPageObjects, getService }) { const PageObjects = getPageObjects(['maps']); const security = getService('security'); - describe('auto fit map to bounds', () => { + // FLAKY: https://github.com/elastic/kibana/issues/129467 + describe.skip('auto fit map to bounds', () => { describe('initial location', () => { before(async () => { await security.testUser.setRoles(['global_maps_all', 'test_logstash_reader']); From 482ae8a909dd2dbe56bc6244cb8816997da57a25 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 13 Apr 2022 15:12:46 -0500 Subject: [PATCH 039/305] [artifacts] Deploy Cloud image (#129650) * [artifacts] Publish release artifacts This adds the publish step to the release pipeline, which uses the release-manager CLI to upload a list Kibana artifacts. * cleanup * [artifacts] Test cloud image * tmp skip unrelated steps * build cloud artifact * fix tag * add missing artifacts * enable rm * fix syntax * fix tag * fix artifact * fix variable * source utils * fix path * fix version * skip steps * re-add pipeline steps * set permissions * Update .buildkite/scripts/steps/artifacts/publish.sh Co-authored-by: Chris * Revert "Update .buildkite/scripts/steps/artifacts/publish.sh" This reverts commit a6228f52cd75297f67a6d5505129c5257934f8ad. * export * support version qualifier * setup env * cleanup * consistency * \n * comment * unneccessary fallback * +x * hoist env args * source * link to artifacts * fix artifacts summary * relax docker glob * \n * fix summary * fix variable * rm es docker image * setup cloud env * rename deployment * exclude skipCloud * only run on snapshot builds * update step name * TEST_BROWSER_HEADLESS=1 * cleanup * newline * consistency * pass deployment id Co-authored-by: Chris --- .buildkite/pipelines/artifacts.yml | 7 ++ .buildkite/scripts/steps/artifacts/cloud.sh | 81 +++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 .buildkite/scripts/steps/artifacts/cloud.sh diff --git a/.buildkite/pipelines/artifacts.yml b/.buildkite/pipelines/artifacts.yml index 647f2c317569c..ab3201472b5c2 100644 --- a/.buildkite/pipelines/artifacts.yml +++ b/.buildkite/pipelines/artifacts.yml @@ -31,6 +31,13 @@ steps: queue: n2-2 timeout_in_minutes: 30 + - command: .buildkite/scripts/steps/artifacts/cloud.sh + label: 'Cloud Deployment' + agents: + queue: n2-2 + timeout_in_minutes: 30 + if: "build.env('RELEASE_BUILD') == null || build.env('RELEASE_BUILD') == '' || build.env('RELEASE_BUILD') == 'false'" + - wait - command: .buildkite/scripts/steps/artifacts/publish.sh diff --git a/.buildkite/scripts/steps/artifacts/cloud.sh b/.buildkite/scripts/steps/artifacts/cloud.sh new file mode 100644 index 0000000000000..8fa04a5d176b0 --- /dev/null +++ b/.buildkite/scripts/steps/artifacts/cloud.sh @@ -0,0 +1,81 @@ +#!/bin/bash + +set -euo pipefail + +.buildkite/scripts/bootstrap.sh + +source .buildkite/scripts/steps/artifacts/env.sh + +echo "--- Publish Cloud image" +mkdir -p target +cd target + +buildkite-agent artifact download "kibana-cloud-$FULL_VERSION-docker-image.tar.gz" . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" +docker load --input kibana-cloud-$FULL_VERSION-docker-image.tar.gz + +TAG="$FULL_VERSION-$GIT_COMMIT" +KIBANA_BASE_IMAGE="docker.elastic.co/kibana-ci/kibana-cloud:$FULL_VERSION" +KIBANA_TEST_IMAGE="docker.elastic.co/kibana-ci/kibana-cloud:$TAG" + +docker tag "$KIBANA_BASE_IMAGE" "$KIBANA_TEST_IMAGE" + +echo "$KIBANA_DOCKER_PASSWORD" | docker login -u "$KIBANA_DOCKER_USERNAME" --password-stdin docker.elastic.co +trap 'docker logout docker.elastic.co' EXIT + +docker push "$KIBANA_TEST_IMAGE" +docker logout docker.elastic.co + +cd - + +echo "--- Create deployment" +CLOUD_DEPLOYMENT_NAME="kibana-artifacts-$TAG" + +LOGS=$(mktemp --suffix ".json") +DEPLOYMENT_SPEC=$(mktemp --suffix ".json") + +jq ' + .name = "'$CLOUD_DEPLOYMENT_NAME'" | + .resources.kibana[0].plan.kibana.docker_image = "'$KIBANA_TEST_IMAGE'" | + .resources.kibana[0].plan.kibana.version = "'$FULL_VERSION'" | + .resources.elasticsearch[0].plan.elasticsearch.version = "'$FULL_VERSION'" | + .resources.enterprise_search[0].plan.enterprise_search.version = "'$FULL_VERSION'" | + .resources.integrations_server[0].plan.integrations_server.version = "'$FULL_VERSION'" + ' .buildkite/scripts/steps/cloud/deploy.json > "$DEPLOYMENT_SPEC" + +ecctl deployment create --track --output json --file "$DEPLOYMENT_SPEC" &> "$LOGS" +CLOUD_DEPLOYMENT_USERNAME=$(jq --slurp '.[]|select(.resources).resources[] | select(.credentials).credentials.username' "$LOGS") +CLOUD_DEPLOYMENT_PASSWORD=$(jq --slurp '.[]|select(.resources).resources[] | select(.credentials).credentials.password' "$LOGS") +CLOUD_DEPLOYMENT_ID=$(jq -r --slurp '.[0].id' "$LOGS") +CLOUD_DEPLOYMENT_STATUS_MESSAGES=$(jq --slurp '[.[]|select(.resources == null)]' "$LOGS") + +CLOUD_DEPLOYMENT_KIBANA_URL=$(ecctl deployment show "$CLOUD_DEPLOYMENT_ID" | jq -r '.resources.kibana[0].info.metadata.aliased_url') +CLOUD_DEPLOYMENT_ELASTICSEARCH_URL=$(ecctl deployment show "$CLOUD_DEPLOYMENT_ID" | jq -r '.resources.elasticsearch[0].info.metadata.aliased_url') + +# NOTE: disabled pending log sanitization +# echo "--- Setup FTR" +# export TEST_KIBANA_PROTOCOL=$(node -e "console.log(new URL('$CLOUD_DEPLOYMENT_KIBANA_URL').protocol)") +# export TEST_KIBANA_HOSTNAME=$(node -e "console.log(new URL('$CLOUD_DEPLOYMENT_KIBANA_URL').hostname)") +# export TEST_KIBANA_PORT=$(node -e "console.log(new URL('$CLOUD_DEPLOYMENT_KIBANA_URL').port)") +# export TEST_KIBANA_USERNAME=$CLOUD_DEPLOYMENT_USERNAME" +# export TEST_KIBANA_PASS=$CLOUD_DEPLOYMENT_PASSWORD" + +# export TEST_ES_PROTOCOL=$(node -e "console.log(new URL('$CLOUD_DEPLOYMENT_KIBANA_URL').protocol)") +# export TEST_ES_HOSTNAME==$(node -e "console.log(new URL('$CLOUD_DEPLOYMENT_KIBANA_URL').hostname)") +# export TEST_ES_PORT=$(node -e "console.log(new URL('$CLOUD_DEPLOYMENT_KIBANA_URL').port)") +# export TEST_ES_USER="$CLOUD_DEPLOYMENT_USERNAME" +# export TEST_ES_PASS="$CLOUD_DEPLOYMENT_PASSWORD" + +# export TEST_BROWSER_HEADLESS=1 + +# Error: attempted to use the "es" service to fetch Elasticsearch version info but the request failed: ConnectionError: self signed certificate in certificate chain +# export NODE_TLS_REJECT_UNAUTHORIZED=0 + +# echo "--- Run default functional tests" +# node --no-warnings scripts/functional_test_runner.js --include-tag=cloud -exclude-tag=skipCloud + +# echo "--- Run x-pack functional tests" +# cd x-pack +# node --no-warnings scripts/functional_test_runner.js --include-tag=cloud -exclude-tag=skipCloud + +echo "--- Shutdown deployment" +ecctl deployment shutdown "$CLOUD_DEPLOYMENT_ID" --force --track --output json &> "$LOGS" From 2b25d1c582cb8b4f4699806962ba963460a74653 Mon Sep 17 00:00:00 2001 From: Jack Date: Wed, 13 Apr 2022 16:31:39 -0400 Subject: [PATCH 040/305] Fix details panel alert tab rule name truncation and group scroll (#130174) --- .../detail_panel_alert_group_item/index.tsx | 10 +++++++--- .../detail_panel_alert_list_item/index.tsx | 4 ++-- .../detail_panel_alert_list_item/styles.ts | 15 ++++++++++++++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/session_view/public/components/detail_panel_alert_group_item/index.tsx b/x-pack/plugins/session_view/public/components/detail_panel_alert_group_item/index.tsx index c2f1e8d5a0494..a83e41d793e23 100644 --- a/x-pack/plugins/session_view/public/components/detail_panel_alert_group_item/index.tsx +++ b/x-pack/plugins/session_view/public/components/detail_panel_alert_group_item/index.tsx @@ -49,14 +49,18 @@ export const DetailPanelAlertGroupItem = ({ arrowDisplay="right" initialIsOpen={false} buttonContent={ - -

+ +

{dataOrDash(rule?.name)}

} - css={styles.alertItem} + css={styles.alertGroupItem} extraAction={ -

+ +

{dataOrDash(name)}

diff --git a/x-pack/plugins/session_view/public/components/detail_panel_alert_list_item/styles.ts b/x-pack/plugins/session_view/public/components/detail_panel_alert_list_item/styles.ts index 7672bb942ff32..403c6d3e2cacb 100644 --- a/x-pack/plugins/session_view/public/components/detail_panel_alert_list_item/styles.ts +++ b/x-pack/plugins/session_view/public/components/detail_panel_alert_list_item/styles.ts @@ -50,10 +50,21 @@ export const useStyles = (minimal = false, isInvestigated = false) => { } `; - const alertTitle: CSSObject = { + const alertGroupItem = css` + ${alertItem} + + & .euiAccordion__childWrapper { + overflow: hidden; + } + `; + + const alertTitleContainer: CSSObject = { display: minimal ? 'none' : 'initial', color: alertTitleColor, fontWeight: font.weight.semiBold, + }; + + const alertTitle: CSSObject = { textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap', @@ -98,6 +109,8 @@ export const useStyles = (minimal = false, isInvestigated = false) => { return { alertItem, + alertGroupItem, + alertTitleContainer, alertTitle, alertIcon, alertAccordionButton, From 23806d57570192fa2ba020d0bb654654f0a3849b Mon Sep 17 00:00:00 2001 From: Karl Godard Date: Wed, 13 Apr 2022 13:33:37 -0700 Subject: [PATCH 041/305] changed process route index to a wildcard to include all namespaces. Also decreased the maximum number of alerts loaded per session to half for performance reasons (#130183) Co-authored-by: mitodrummer --- x-pack/plugins/session_view/common/constants.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/session_view/common/constants.ts b/x-pack/plugins/session_view/common/constants.ts index ed0c21f89a8d6..0e1a7c16172f2 100644 --- a/x-pack/plugins/session_view/common/constants.ts +++ b/x-pack/plugins/session_view/common/constants.ts @@ -9,7 +9,7 @@ export const PROCESS_EVENTS_ROUTE = '/internal/session_view/process_events_route export const ALERTS_ROUTE = '/internal/session_view/alerts_route'; export const ALERT_STATUS_ROUTE = '/internal/session_view/alert_status_route'; export const SESSION_ENTRY_LEADERS_ROUTE = '/internal/session_view/session_entry_leaders_route'; -export const PROCESS_EVENTS_INDEX = 'logs-endpoint.events.process-default'; +export const PROCESS_EVENTS_INDEX = 'logs-endpoint.events.process-*'; export const PREVIEW_ALERTS_INDEX = '.preview.alerts-security.alerts-default'; export const ENTRY_SESSION_ENTITY_ID_PROPERTY = 'process.entry_leader.entity_id'; export const ALERT_UUID_PROPERTY = 'kibana.alert.uuid'; @@ -41,11 +41,11 @@ export const PROCESS_EVENTS_PER_PAGE = 1000; // causes a session to only list and highlight up to 1000 alerts, even though there could // be far greater than this amount. UX should be added to let the end user know this is // happening and to revise their rule to be more specific. -export const ALERTS_PER_PAGE = 1000; +export const ALERTS_PER_PAGE = 501; // when showing the count of alerts in details panel tab, if the number -// exceeds ALERT_COUNT_THRESHOLD we put a + next to it, e.g 999+ -export const ALERT_COUNT_THRESHOLD = 999; +// exceeds ALERT_COUNT_THRESHOLD we put a + next to it, e.g 500+ +export const ALERT_COUNT_THRESHOLD = 500; // react-query caching keys export const QUERY_KEY_PROCESS_EVENTS = 'sessionViewProcessEvents'; From 92fe9b52aca8ac3b5f98088d2728a04462b37127 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Wed, 13 Apr 2022 14:02:16 -0700 Subject: [PATCH 042/305] Remove spaces in install commands (#130185) --- .../components/enrollment_instructions/standalone/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/public/components/enrollment_instructions/standalone/index.tsx b/x-pack/plugins/fleet/public/components/enrollment_instructions/standalone/index.tsx index db36c16934e4b..a2feb6aade466 100644 --- a/x-pack/plugins/fleet/public/components/enrollment_instructions/standalone/index.tsx +++ b/x-pack/plugins/fleet/public/components/enrollment_instructions/standalone/index.tsx @@ -29,10 +29,10 @@ cd elastic-agent-${kibanaVersion}-windows-x86_64 .\\elastic-agent.exe install`; const linuxDebCommand = `curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-${kibanaVersion}-amd64.deb - sudo dpkg -i elastic-agent-${kibanaVersion}-amd64.deb \nsudo systemctl enable elastic-agent \nsudo systemctl start elastic-agent`; +sudo dpkg -i elastic-agent-${kibanaVersion}-amd64.deb \nsudo systemctl enable elastic-agent \nsudo systemctl start elastic-agent`; const linuxRpmCommand = `curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-${kibanaVersion}-x86_64.rpm - sudo rpm -vi elastic-agent-${kibanaVersion}-x86_64.rpm \nsudo systemctl enable elastic-agent \nsudo systemctl start elastic-agent`; +sudo rpm -vi elastic-agent-${kibanaVersion}-x86_64.rpm \nsudo systemctl enable elastic-agent \nsudo systemctl start elastic-agent`; const linuxCommand = isK8s === 'IS_KUBERNETES' ? KUBERNETES_RUN_INSTRUCTIONS : STANDALONE_RUN_INSTRUCTIONS_LINUX; From 3f6d46127bec248a201fc203165dfa1d2eab3ee5 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 13 Apr 2022 17:47:51 -0500 Subject: [PATCH 043/305] [artifacts] Add CI retries (#130194) --- .buildkite/pipelines/artifacts.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.buildkite/pipelines/artifacts.yml b/.buildkite/pipelines/artifacts.yml index ab3201472b5c2..eac479d4d450f 100644 --- a/.buildkite/pipelines/artifacts.yml +++ b/.buildkite/pipelines/artifacts.yml @@ -4,6 +4,10 @@ steps: agents: queue: c2-16 timeout_in_minutes: 60 + retry: + automatic: + - exit_status: '*' + limit: 1 - wait @@ -12,24 +16,40 @@ steps: agents: queue: n2-4-virt timeout_in_minutes: 30 + retry: + automatic: + - exit_status: '*' + limit: 1 - command: TEST_PACKAGE=rpm .buildkite/scripts/steps/package_testing/test.sh label: Artifact Testing agents: queue: n2-4-virt timeout_in_minutes: 30 + retry: + automatic: + - exit_status: '*' + limit: 1 - command: TEST_PACKAGE=docker .buildkite/scripts/steps/package_testing/test.sh label: Artifact Testing agents: queue: n2-4-virt timeout_in_minutes: 30 + retry: + automatic: + - exit_status: '*' + limit: 1 - command: .buildkite/scripts/steps/artifacts/docker_context.sh label: 'Docker Context Verification' agents: queue: n2-2 timeout_in_minutes: 30 + retry: + automatic: + - exit_status: '*' + limit: 1 - command: .buildkite/scripts/steps/artifacts/cloud.sh label: 'Cloud Deployment' @@ -37,6 +57,10 @@ steps: queue: n2-2 timeout_in_minutes: 30 if: "build.env('RELEASE_BUILD') == null || build.env('RELEASE_BUILD') == '' || build.env('RELEASE_BUILD') == 'false'" + retry: + automatic: + - exit_status: '*' + limit: 1 - wait From cfae0832767062471ec86351586bdaf9844c47c7 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 13 Apr 2022 19:48:43 -0500 Subject: [PATCH 044/305] skip failing test suite (#129337) --- .../functional_with_es_ssl/apps/triggers_actions_ui/details.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 4069f2f64c027..111499463ee2a 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 @@ -136,7 +136,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { return response; } - describe('Rule Details', function () { + // Failing: See https://github.com/elastic/kibana/issues/129337 + describe.skip('Rule Details', function () { describe('Header', function () { const testRunUuid = uuid.v4(); before(async () => { From 1dfce2a03f4870421886b976bcaee10d35a74566 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 13 Apr 2022 19:48:47 -0500 Subject: [PATCH 045/305] skip failing test suite (#129337) --- .../functional_with_es_ssl/apps/triggers_actions_ui/details.ts | 1 + 1 file changed, 1 insertion(+) 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 111499463ee2a..27c398b9940dc 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 @@ -136,6 +136,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { return response; } + // Failing: See https://github.com/elastic/kibana/issues/129337 // Failing: See https://github.com/elastic/kibana/issues/129337 describe.skip('Rule Details', function () { describe('Header', function () { From 41d8194ce93c2e73e175340d88ef08eecd2fa834 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 14 Apr 2022 06:13:56 +0200 Subject: [PATCH 046/305] [Exploratory view] Add readme file (#127329) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ester Martí Vilaseca Co-authored-by: Dominique Clarke --- x-pack/plugins/observability/README.md | 3 + .../shared/exploratory_view/README.md | 161 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 x-pack/plugins/observability/public/components/shared/exploratory_view/README.md diff --git a/x-pack/plugins/observability/README.md b/x-pack/plugins/observability/README.md index f0f66f01def53..aef8cdc59d110 100644 --- a/x-pack/plugins/observability/README.md +++ b/x-pack/plugins/observability/README.md @@ -36,6 +36,9 @@ When both of the these are set to `true`, your alerts should show on the alerts The Observability plugin maintains a navigation registry for Observability solutions, and exposes a shared page template component. Please refer to the docs in [the component directory](public/components/shared/page_template) for more information on registering your solution's navigation structure, and rendering the navigation via the shared component. +## Exploratory view component +A shared component for visualizing observability data types via lens embeddable. [For further details.](./public/components/shared/exploratory_view/README.md) + ## Unit testing Note: Run the following commands from `kibana/x-pack/plugins/observability`. diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/README.md b/x-pack/plugins/observability/public/components/shared/exploratory_view/README.md new file mode 100644 index 0000000000000..6aea217a1aaa8 --- /dev/null +++ b/x-pack/plugins/observability/public/components/shared/exploratory_view/README.md @@ -0,0 +1,161 @@ +# Exploratory view component + +This component is used in observability plugin to show lens embeddable based observability visualizations. +The view is populated using configs stored as json within the view for each data type. + +This readme file contains few of the concepts being used in the component. + +Basic workflow for how exploratory view works, it looks like this + + +![Exploratory view workflow](https://i.imgur.com/Kgyfd29.png) + + +## Report Type + +The exploratory view report type controls how the data is visualized in the lens embeddable. The report type defines a set of constraints over the x and y axis. For example, the `kpi-over-time` report type is a time series chart type that plots key performance indicators over time, while the `data-distribution` chart plots the percentage of documents over key performance indicators. Current available data types can be found at `exploratory_view/configurations/constants`. + +Each report type has one or more available visualizations to plot data from one or more data types. + +## Data Types + +Each available visualization is backed by a data type. A data type consists of a set of configuration for displaying domain-specific visualizations for observability data. Some example data types include apm, metrics, and logs. + +For each respective data type, we fetch index pattern string from the app plugin contract, leveraging existing hasData API we have to return the index pattern string as well as a `hasData` boolean from each plugin. + +In most cases, there will be a 1-1 relation between apps and data types. + +### Observability `dataViews` + +Once we have index pattern string for each data type, a respective `dataView` is created. If there is an existing dataView for an index pattern, we will fetch and reuse it. + +After the dataView is created we also set field formats to promote human-readability. For example, we set format for monitor duration field, which is monitor.duration.us, from microseconds to seconds for browser monitors. + +### Visualization Configuration + +Each data type may have one or more visualization configurations. The data type to visualization configuration can be found in [`exploratory_view/obs_exploratory_view`](https://github.com/elastic/kibana/blob/main/x-pack/plugins/observability/public/components/shared/exploratory_view/obsv_exploratory_view.tsx#L86) + +Each visualization configuration is mapped to a single report type. + +Visualization configurations are used to define the UI we display for each report type and data type combination in the series builder. +Visualization configuration define UI options and display, including available `metrics`, available `filters`, available `breakdown` options, definitions for human-readable `labels`, and more. +The configuration also defines any custom base filters, which usually get pushed to a query, but are not displayed on the UI. You can also set more custom options on the configuration like colors which get used while rendering the chart. + +Visualization configuration can be found at [`exploratory_view/configurations`](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/shared/exploratory_view/configurations), where each data type typically has a folder that holds one or more visualization configurations. + +The configuration defined ultimately influences the lens embeddable attributes which get pushed to lens embeddable, rendering the chart. + +Some options in configuration are: + +#### Definition fields +They are also filters, but usually main filters, around which usually app UI is based. +For apm, it could be service name and for uptime, monitor name. + +#### Filters +You can define base filters in kql form or data plugin filter format, filters are strongly typed. + +#### Breakdown fields +List of fields from an index pattern, UI will use this to populate breakdown option select. + +#### Labels +You can set key/value map for your field labels. UI will use these to set labels for data view fields. + +Sample config +``` +{ + reportType: ReportTypes.KPI, + defaultSeriesType: 'bar_stacked', + xAxisColumn: { + sourceField: '@timestamp', + }, + yAxisColumns: [ + { + sourceField: REPORT_METRIC_FIELD, + operationType: 'median', + }, + ], + hasOperationType: false, + filterFields: ['observer.geo.name', 'monitor.type', 'tags'], // these fields get's resolved from relevant dataView + breakdownFields: [ + 'observer.geo.name', + 'monitor.type', + 'monitor.name', + PERCENTILE, + ], // these fields get's resolved from relevant dataView + baseFilters: [], + palette: { type: 'palette', name: 'status' }, + definitionFields: [ + { field: 'monitor.name', nested: SYNTHETICS_STEP_NAME, singleSelection: true }, + { field: 'url.full', filters: buildExistsFilter('summary.up', dataView) }, + ], + metricOptions: [ + { + label: MONITORS_DURATION_LABEL, + field: 'monitor.duration.us', + columnType: OPERATION_COLUMN, + } + ], + labels: { ...FieldLabels, [SUMMARY_UP]: UP_LABEL, [SUMMARY_DOWN]: DOWN_LABEL }, + } +``` + + + +## Lens Embeddable + +Lens embeddable is what actually renders the chart in exploratory view. + +Exploratory view generates the lens embeddable attributes as json and pass it to the component. + +Based on configuration, exploratory view generates layers and columns. + +Add a link to lens embeddable readme + +#### Example +A simple usage of lens embeddable example and playground options +[embedded_lens_example](../../../../../../examples/embedded_lens_example) + +## Exploratory view Embeddable + +The primary purpose of the exploratory view is to embed it in observability solutions like uptime to replace +existing static visualizations, + +For that purpose, all the configuration options we define in the exploratory view can be used as an embeddable +via a component that is exposed using observability plugin contract, +usage looks like this + +`const ExploratoryViewComponent = props.plugins.observability.ExploratoryViewEmbeddable; +` + +``` + +``` + +there is an example in kibana example which you can view using +`yarn start --run-examples` and view the code at [Exploratory view embeddable](../../../../../../examples/exploratory_view_example) + +#### Example +A simple usage of lens embeddable example and playground options, run kibana with +`yarn start --run-example` to see this example in action +source code is defined at [embedded_lens_example](../../../../../../examples/embedded_lens_example) \ No newline at end of file From b84383e937e0106fc9346f94ddda29509d930c54 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 14 Apr 2022 05:19:49 +0100 Subject: [PATCH 047/305] fix(NA): do not remote cache npm directories copies on rules_nodejs v5 (#130214) * fix(NA): bazel remote cache traffic * chore(NA): include local patch to fix the caches node_modules problem --- WORKSPACE.bazel | 2 ++ ...e_npm_directory_copies_from_remote_cache.patch | 15 +++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 src/dev/bazel/rules_nodejs_patches/exclude_npm_directory_copies_from_remote_cache.patch diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index 8100e93bcd4df..8bc076b0e8f0b 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -10,6 +10,8 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Fetch Node.js rules http_archive( name = "build_bazel_rules_nodejs", + patch_args = ["-p1"], + patches = ["//:src/dev/bazel/rules_nodejs_patches/exclude_npm_directory_copies_from_remote_cache.patch"], sha256 = "2b2004784358655f334925e7eadc7ba80f701144363df949b3293e1ae7a2fb7b", urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.4.0/rules_nodejs-5.4.0.tar.gz"], ) diff --git a/src/dev/bazel/rules_nodejs_patches/exclude_npm_directory_copies_from_remote_cache.patch b/src/dev/bazel/rules_nodejs_patches/exclude_npm_directory_copies_from_remote_cache.patch new file mode 100644 index 0000000000000..71a99ced83d72 --- /dev/null +++ b/src/dev/bazel/rules_nodejs_patches/exclude_npm_directory_copies_from_remote_cache.patch @@ -0,0 +1,15 @@ +diff --git a/third_party/github.com/bazelbuild/bazel-skylib/rules/private/copy_file_private.bzl b/third_party/github.com/bazelbuild/bazel-skylib/rules/private/copy_file_private.bzl +index a719174c..273322d0 100644 +--- a/third_party/github.com/bazelbuild/bazel-skylib/rules/private/copy_file_private.bzl ++++ b/third_party/github.com/bazelbuild/bazel-skylib/rules/private/copy_file_private.bzl +@@ -30,7 +30,9 @@ _execution_requirements = { + # Also, remote-execution does not allow source directory inputs, see + # https://github.com/bazelbuild/bazel/commit/c64421bc35214f0414e4f4226cc953e8c55fa0d2 + # So we must not attempt to execute remotely in that case. +- "no-remote-exec": "1", ++ # no-remote | Prevents the action or test from being executed remotely or cached remotely. ++ # | This is equivalent to using both `no-remote-cache` and `no-remote-exec`. ++ "no-remote": "1", + } + + def _hash_file(file): From b5817af7665b728a8e7a4c0dfe8fbe12e3a9d40d Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Thu, 14 Apr 2022 10:57:46 +0300 Subject: [PATCH 048/305] [Cases] Add bulk attachments internal route (#129092) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../plugins/cases/common/api/cases/comment.ts | 3 + x-pack/plugins/cases/common/constants.ts | 8 + .../server/client/attachments/bulk_create.ts | 88 +++ .../cases/server/client/attachments/client.ts | 3 + x-pack/plugins/cases/server/client/mocks.ts | 1 + .../common/models/case_with_comments.ts | 126 +++- x-pack/plugins/cases/server/plugin.ts | 3 +- .../server/routes/api/get_internal_routes.ts | 11 + .../api/internal/bulk_create_attachments.ts | 40 ++ .../server/services/attachments/index.ts | 20 + x-pack/plugins/cases/server/services/mocks.ts | 2 + .../server/services/user_actions/index.ts | 47 +- .../cases_api_integration/common/lib/utils.ts | 75 ++- .../tests/common/comments/post_comment.ts | 108 +--- .../security_and_spaces/tests/common/index.ts | 6 + .../internal/bulk_create_attachments.ts | 584 ++++++++++++++++++ .../tests/common/comments/post_comment.ts | 8 +- .../spaces_only/tests/common/index.ts | 5 + .../internal/bulk_create_attachments.ts | 71 +++ 19 files changed, 1091 insertions(+), 118 deletions(-) create mode 100644 x-pack/plugins/cases/server/client/attachments/bulk_create.ts create mode 100644 x-pack/plugins/cases/server/routes/api/get_internal_routes.ts create mode 100644 x-pack/plugins/cases/server/routes/api/internal/bulk_create_attachments.ts create mode 100644 x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/bulk_create_attachments.ts create mode 100644 x-pack/test/cases_api_integration/spaces_only/tests/common/internal/bulk_create_attachments.ts diff --git a/x-pack/plugins/cases/common/api/cases/comment.ts b/x-pack/plugins/cases/common/api/cases/comment.ts index 900f90156d431..8cdab3dbd597d 100644 --- a/x-pack/plugins/cases/common/api/cases/comment.ts +++ b/x-pack/plugins/cases/common/api/cases/comment.ts @@ -153,12 +153,15 @@ export const FindQueryParamsRt = rt.partial({ ...SavedObjectFindOptionsRt.props, }); +export const BulkCreateCommentRequestRt = rt.array(CommentRequestRt); + export type FindQueryParams = rt.TypeOf; export type AttributesTypeActions = rt.TypeOf; export type AttributesTypeAlerts = rt.TypeOf; export type AttributesTypeUser = rt.TypeOf; export type CommentAttributes = rt.TypeOf; export type CommentRequest = rt.TypeOf; +export type BulkCreateCommentRequest = rt.TypeOf; export type CommentResponse = rt.TypeOf; export type CommentResponseUserType = rt.TypeOf; export type CommentResponseAlertsType = rt.TypeOf; diff --git a/x-pack/plugins/cases/common/constants.ts b/x-pack/plugins/cases/common/constants.ts index a1ac829b33cce..1fd3b5b7cda5c 100644 --- a/x-pack/plugins/cases/common/constants.ts +++ b/x-pack/plugins/cases/common/constants.ts @@ -70,6 +70,14 @@ export const CASE_DETAILS_ALERTS_URL = `${CASE_DETAILS_URL}/alerts` as const; export const CASE_METRICS_DETAILS_URL = `${CASES_URL}/metrics/{case_id}` as const; +/** + * Internal routes + */ + +export const CASES_INTERNAL_URL = '/internal/cases' as const; +export const INTERNAL_BULK_CREATE_ATTACHMENTS_URL = + `${CASES_INTERNAL_URL}/{case_id}/attachments/_bulk_create` as const; + /** * Action routes */ diff --git a/x-pack/plugins/cases/server/client/attachments/bulk_create.ts b/x-pack/plugins/cases/server/client/attachments/bulk_create.ts new file mode 100644 index 0000000000000..6e855cc0fc542 --- /dev/null +++ b/x-pack/plugins/cases/server/client/attachments/bulk_create.ts @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import Boom from '@hapi/boom'; +import { pipe } from 'fp-ts/lib/pipeable'; +import { fold } from 'fp-ts/lib/Either'; +import { identity } from 'fp-ts/lib/function'; + +import { SavedObjectsUtils } from '../../../../../../src/core/server'; + +import { + BulkCreateCommentRequest, + BulkCreateCommentRequestRt, + CaseResponse, + CommentRequest, + throwErrors, +} from '../../../common/api'; + +import { CaseCommentModel } from '../../common/models'; +import { createCaseError } from '../../common/error'; +import { CasesClientArgs } from '..'; + +import { decodeCommentRequest } from '../utils'; +import { Operations, OwnerEntity } from '../../authorization'; + +export interface BulkCreateArgs { + caseId: string; + attachments: BulkCreateCommentRequest; +} + +/** + * Create an attachment to a case. + * + * @ignore + */ +export const bulkCreate = async ( + args: BulkCreateArgs, + clientArgs: CasesClientArgs +): Promise => { + const { attachments, caseId } = args; + + pipe( + BulkCreateCommentRequestRt.decode(attachments), + fold(throwErrors(Boom.badRequest), identity) + ); + + attachments.forEach((attachment) => { + decodeCommentRequest(attachment); + }); + + const { logger, authorization } = clientArgs; + + try { + const [attachmentsWithIds, entities]: [Array<{ id: string } & CommentRequest>, OwnerEntity[]] = + attachments.reduce<[Array<{ id: string } & CommentRequest>, OwnerEntity[]]>( + ([a, e], attachment) => { + const savedObjectID = SavedObjectsUtils.generateId(); + return [ + [...a, { id: savedObjectID, ...attachment }], + [...e, { owner: attachment.owner, id: savedObjectID }], + ]; + }, + [[], []] + ); + + await authorization.ensureAuthorized({ + operation: Operations.createComment, + entities, + }); + + const model = await CaseCommentModel.create(caseId, clientArgs); + const updatedModel = await model.bulkCreate({ + attachments: attachmentsWithIds, + }); + + return await updatedModel.encodeWithComments(); + } catch (error) { + throw createCaseError({ + message: `Failed while bulk creating attachment to case id: ${caseId} error: ${error}`, + error, + logger, + }); + } +}; diff --git a/x-pack/plugins/cases/server/client/attachments/client.ts b/x-pack/plugins/cases/server/client/attachments/client.ts index ab77ae3f01836..63b039890aff9 100644 --- a/x-pack/plugins/cases/server/client/attachments/client.ts +++ b/x-pack/plugins/cases/server/client/attachments/client.ts @@ -12,6 +12,7 @@ import { CasesClientInternal } from '../client_internal'; import { IAllCommentsResponse, ICaseResponse, ICommentsResponse } from '../typedoc_interfaces'; import { CasesClientArgs } from '../types'; import { AddArgs, addComment } from './add'; +import { bulkCreate, BulkCreateArgs } from './bulk_create'; import { DeleteAllArgs, deleteAll, DeleteArgs, deleteComment } from './delete'; import { find, @@ -33,6 +34,7 @@ export interface AttachmentsSubClient { * Adds an attachment to a case. */ add(params: AddArgs): Promise; + bulkCreate(params: BulkCreateArgs): Promise; /** * Deletes all attachments associated with a single case. */ @@ -77,6 +79,7 @@ export const createAttachmentsSubClient = ( ): AttachmentsSubClient => { const attachmentSubClient: AttachmentsSubClient = { add: (params: AddArgs) => addComment(params, clientArgs), + bulkCreate: (params: BulkCreateArgs) => bulkCreate(params, clientArgs), deleteAll: (deleteAllArgs: DeleteAllArgs) => deleteAll(deleteAllArgs, clientArgs), delete: (deleteArgs: DeleteArgs) => deleteComment(deleteArgs, clientArgs), find: (findArgs: FindArgs) => find(findArgs, clientArgs), diff --git a/x-pack/plugins/cases/server/client/mocks.ts b/x-pack/plugins/cases/server/client/mocks.ts index ecedc7cb05071..6ad4663f1e5ea 100644 --- a/x-pack/plugins/cases/server/client/mocks.ts +++ b/x-pack/plugins/cases/server/client/mocks.ts @@ -46,6 +46,7 @@ type AttachmentsSubClientMock = jest.Mocked; const createAttachmentsSubClientMock = (): AttachmentsSubClientMock => { return { add: jest.fn(), + bulkCreate: jest.fn(), deleteAll: jest.fn(), delete: jest.fn(), find: jest.fn(), diff --git a/x-pack/plugins/cases/server/common/models/case_with_comments.ts b/x-pack/plugins/cases/server/common/models/case_with_comments.ts index 14c0b6aec5eac..2e65755aabdc4 100644 --- a/x-pack/plugins/cases/server/common/models/case_with_comments.ts +++ b/x-pack/plugins/cases/server/common/models/case_with_comments.ts @@ -188,17 +188,9 @@ export class CaseCommentModel { id: string; }): Promise { try { - this.validateCreateCommentRequest(commentReq); + this.validateCreateCommentRequest([commentReq]); - let references = this.buildRefsToCase(); - - if (commentReq.type === CommentType.user && commentReq?.comment) { - const commentStringReferences = getOrUpdateLensReferences( - this.params.lensEmbeddableFactory, - commentReq.comment - ); - references = [...references, ...commentStringReferences]; - } + const references = [...this.buildRefsToCase(), ...this.getCommentReferences(commentReq)]; const [comment, commentableCase] = await Promise.all([ this.params.attachmentService.create({ @@ -215,7 +207,7 @@ export class CaseCommentModel { ]); await Promise.all([ - commentableCase.handleAlertComments(comment, commentReq), + commentableCase.handleAlertComments([commentReq]), this.createCommentUserAction(comment, commentReq), ]); @@ -229,12 +221,15 @@ export class CaseCommentModel { } } - private validateCreateCommentRequest(req: CommentRequest) { - if (req.type === CommentType.alert && this.caseInfo.attributes.status === CaseStatuses.closed) { + private validateCreateCommentRequest(req: CommentRequest[]) { + if ( + req.some((attachment) => attachment.type === CommentType.alert) && + this.caseInfo.attributes.status === CaseStatuses.closed + ) { throw Boom.badRequest('Alert cannot be attached to a closed case'); } - if (req.owner !== this.caseInfo.attributes.owner) { + if (req.some((attachment) => attachment.owner !== this.caseInfo.attributes.owner)) { throw Boom.badRequest('The owner field of the comment must match the case'); } } @@ -249,20 +244,38 @@ export class CaseCommentModel { ]; } - private async handleAlertComments(comment: SavedObject, req: CommentRequest) { - if ( - comment.attributes.type === CommentType.alert && - this.caseInfo.attributes.settings.syncAlerts - ) { - await this.updateAlertsStatus(req); + private getCommentReferences(commentReq: CommentRequest) { + let references: SavedObjectReference[] = []; + + if (commentReq.type === CommentType.user && commentReq?.comment) { + const commentStringReferences = getOrUpdateLensReferences( + this.params.lensEmbeddableFactory, + commentReq.comment + ); + references = [...references, ...commentStringReferences]; } + + return references; } - private async updateAlertsStatus(req: CommentRequest) { - const alertsToUpdate = createAlertUpdateRequest({ - comment: req, - status: this.caseInfo.attributes.status, - }); + private async handleAlertComments(attachments: CommentRequest[]) { + const alerts = attachments.filter( + (attachment) => + attachment.type === CommentType.alert && this.caseInfo.attributes.settings.syncAlerts + ); + + await this.updateAlertsStatus(alerts); + } + + private async updateAlertsStatus(alerts: CommentRequest[]) { + const alertsToUpdate = alerts + .map((alert) => + createAlertUpdateRequest({ + comment: alert, + status: this.caseInfo.attributes.status, + }) + ) + .flat(); await this.params.alertsService.updateAlertsStatus(alertsToUpdate); } @@ -285,6 +298,19 @@ export class CaseCommentModel { }); } + private async bulkCreateCommentUserAction(attachments: Array<{ id: string } & CommentRequest>) { + await this.params.userActionService.bulkCreateAttachmentCreation({ + unsecuredSavedObjectsClient: this.params.unsecuredSavedObjectsClient, + caseId: this.caseInfo.id, + attachments: attachments.map(({ id, ...attachment }) => ({ + id, + owner: attachment.owner, + attachment, + })), + user: this.params.user, + }); + } + private formatForEncoding(totalComment: number) { return { id: this.caseInfo.id, @@ -322,4 +348,54 @@ export class CaseCommentModel { }); } } + public async bulkCreate({ + attachments, + }: { + attachments: Array<{ id: string } & CommentRequest>; + }): Promise { + try { + this.validateCreateCommentRequest(attachments); + + const caseReference = this.buildRefsToCase(); + + const [newlyCreatedAttachments, commentableCase] = await Promise.all([ + this.params.attachmentService.bulkCreate({ + unsecuredSavedObjectsClient: this.params.unsecuredSavedObjectsClient, + attachments: attachments.map(({ id, ...attachment }) => { + return { + attributes: transformNewComment({ + createdDate: new Date().toISOString(), + ...attachment, + ...this.params.user, + }), + references: [...caseReference, ...this.getCommentReferences(attachment)], + id, + }; + }), + }), + this.updateCaseUserAndDate(new Date().toISOString()), + ]); + + const savedObjectsWithoutErrors = newlyCreatedAttachments.saved_objects.filter( + (attachment) => attachment.error == null + ); + + const attachmentsWithoutErrors = attachments.filter((attachment) => + savedObjectsWithoutErrors.some((so) => so.id === attachment.id) + ); + + await Promise.all([ + commentableCase.handleAlertComments(attachmentsWithoutErrors), + this.bulkCreateCommentUserAction(attachmentsWithoutErrors), + ]); + + return commentableCase; + } catch (error) { + throw createCaseError({ + message: `Failed bulk creating attachments on a commentable case, case id: ${this.caseInfo.id}: ${error}`, + error, + logger: this.params.logger, + }); + } + } } diff --git a/x-pack/plugins/cases/server/plugin.ts b/x-pack/plugins/cases/server/plugin.ts index 5eba2f75cdaaa..d1a585b2aed21 100644 --- a/x-pack/plugins/cases/server/plugin.ts +++ b/x-pack/plugins/cases/server/plugin.ts @@ -39,6 +39,7 @@ import { getExternalRoutes } from './routes/api/get_external_routes'; import { TaskManagerSetupContract, TaskManagerStartContract } from '../../task_manager/server'; import { UsageCollectionSetup } from '../../../../src/plugins/usage_collection/server'; import { createCasesTelemetry, scheduleCasesTelemetryTask } from './telemetry'; +import { getInternalRoutes } from './routes/api/get_internal_routes'; export interface PluginsSetup { actions: ActionsPluginSetup; @@ -130,7 +131,7 @@ export class CasePlugin { registerRoutes({ router, - routes: getExternalRoutes(), + routes: [...getExternalRoutes(), ...getInternalRoutes()], logger: this.logger, kibanaVersion: this.kibanaVersion, telemetryUsageCounter, diff --git a/x-pack/plugins/cases/server/routes/api/get_internal_routes.ts b/x-pack/plugins/cases/server/routes/api/get_internal_routes.ts new file mode 100644 index 0000000000000..10d379c080abb --- /dev/null +++ b/x-pack/plugins/cases/server/routes/api/get_internal_routes.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { bulkCreateAttachmentsRoute } from './internal/bulk_create_attachments'; +import { CaseRoute } from './types'; + +export const getInternalRoutes = () => [bulkCreateAttachmentsRoute] as CaseRoute[]; diff --git a/x-pack/plugins/cases/server/routes/api/internal/bulk_create_attachments.ts b/x-pack/plugins/cases/server/routes/api/internal/bulk_create_attachments.ts new file mode 100644 index 0000000000000..1940cd442eb27 --- /dev/null +++ b/x-pack/plugins/cases/server/routes/api/internal/bulk_create_attachments.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import { INTERNAL_BULK_CREATE_ATTACHMENTS_URL } from '../../../../common/constants'; +import { BulkCreateCommentRequest } from '../../../../common/api'; +import { createCaseError } from '../../../common/error'; +import { createCasesRoute } from '../create_cases_route'; +import { escapeHatch } from '../utils'; + +export const bulkCreateAttachmentsRoute = createCasesRoute({ + method: 'post', + path: INTERNAL_BULK_CREATE_ATTACHMENTS_URL, + params: { + params: schema.object({ + case_id: schema.string(), + }), + body: schema.arrayOf(escapeHatch), + }, + handler: async ({ context, request, response }) => { + try { + const casesClient = await context.cases.getCasesClient(); + const caseId = request.params.case_id; + const attachments = request.body as BulkCreateCommentRequest; + + return response.ok({ + body: await casesClient.attachments.bulkCreate({ caseId, attachments }), + }); + } catch (error) { + throw createCaseError({ + message: `Failed to bulk create attachments in route case id: ${request.params.case_id}: ${error}`, + error, + }); + } + }, +}); diff --git a/x-pack/plugins/cases/server/services/attachments/index.ts b/x-pack/plugins/cases/server/services/attachments/index.ts index 1b52a6c2bf153..d9656182a5219 100644 --- a/x-pack/plugins/cases/server/services/attachments/index.ts +++ b/x-pack/plugins/cases/server/services/attachments/index.ts @@ -51,6 +51,14 @@ interface CreateAttachmentArgs extends ClientArgs { id: string; } +interface BulkCreateAttachments extends ClientArgs { + attachments: Array<{ + attributes: AttachmentAttributes; + references: SavedObjectReference[]; + id: string; + }>; +} + interface UpdateArgs { attachmentId: string; updatedAttributes: AttachmentPatchAttributes; @@ -245,6 +253,18 @@ export class AttachmentService { } } + public async bulkCreate({ unsecuredSavedObjectsClient, attachments }: BulkCreateAttachments) { + try { + this.log.debug(`Attempting to bulk create attachments`); + return await unsecuredSavedObjectsClient.bulkCreate( + attachments.map((attachment) => ({ type: CASE_COMMENT_SAVED_OBJECT, ...attachment })) + ); + } catch (error) { + this.log.error(`Error on bulk create attachments: ${error}`); + throw error; + } + } + public async update({ unsecuredSavedObjectsClient, attachmentId, diff --git a/x-pack/plugins/cases/server/services/mocks.ts b/x-pack/plugins/cases/server/services/mocks.ts index 8e21db9ccb4e0..e402da2a09753 100644 --- a/x-pack/plugins/cases/server/services/mocks.ts +++ b/x-pack/plugins/cases/server/services/mocks.ts @@ -74,6 +74,7 @@ export const createUserActionServiceMock = (): CaseUserActionServiceMock => { bulkCreateCaseDeletion: jest.fn(), bulkCreateUpdateCase: jest.fn(), bulkCreateAttachmentDeletion: jest.fn(), + bulkCreateAttachmentCreation: jest.fn(), createUserAction: jest.fn(), create: jest.fn(), getAll: jest.fn(), @@ -102,6 +103,7 @@ export const createAttachmentServiceMock = (): AttachmentServiceMock => { get: jest.fn(), delete: jest.fn(), create: jest.fn(), + bulkCreate: jest.fn(), update: jest.fn(), bulkUpdate: jest.fn(), getAllAlertsAttachToCase: jest.fn(), diff --git a/x-pack/plugins/cases/server/services/user_actions/index.ts b/x-pack/plugins/cases/server/services/user_actions/index.ts index c80d2d6da4c98..b7de52d8708fa 100644 --- a/x-pack/plugins/cases/server/services/user_actions/index.ts +++ b/x-pack/plugins/cases/server/services/user_actions/index.ts @@ -91,7 +91,7 @@ interface BulkCreateBulkUpdateCaseUserActions extends ClientArgs { user: User; } -interface BulkCreateAttachmentDeletionUserAction extends Omit { +interface BulkCreateAttachmentUserAction extends Omit { attachments: Array<{ id: string; owner: string; attachment: CommentRequest }>; } @@ -241,18 +241,19 @@ export class CaseUserActionService { await this.bulkCreate({ unsecuredSavedObjectsClient, actions: userActionsWithReferences }); } - public async bulkCreateAttachmentDeletion({ + private async bulkCreateAttachment({ unsecuredSavedObjectsClient, caseId, attachments, user, - }: BulkCreateAttachmentDeletionUserAction): Promise { - this.log.debug(`Attempting to create a create case user action`); + action = Actions.create, + }: BulkCreateAttachmentUserAction): Promise { + this.log.debug(`Attempting to create a bulk create case user action`); const userActionsWithReferences = attachments.reduce( (acc, attachment) => { const userActionBuilder = this.builderFactory.getBuilder(ActionTypes.comment); - const deleteCommentUserAction = userActionBuilder?.build({ - action: Actions.delete, + const commentUserAction = userActionBuilder?.build({ + action, caseId, user, owner: attachment.owner, @@ -260,11 +261,11 @@ export class CaseUserActionService { payload: { attachment: attachment.attachment }, }); - if (deleteCommentUserAction == null) { + if (commentUserAction == null) { return acc; } - return [...acc, deleteCommentUserAction]; + return [...acc, commentUserAction]; }, [] ); @@ -272,6 +273,36 @@ export class CaseUserActionService { await this.bulkCreate({ unsecuredSavedObjectsClient, actions: userActionsWithReferences }); } + public async bulkCreateAttachmentDeletion({ + unsecuredSavedObjectsClient, + caseId, + attachments, + user, + }: BulkCreateAttachmentUserAction): Promise { + await this.bulkCreateAttachment({ + unsecuredSavedObjectsClient, + caseId, + attachments, + user, + action: Actions.delete, + }); + } + + public async bulkCreateAttachmentCreation({ + unsecuredSavedObjectsClient, + caseId, + attachments, + user, + }: BulkCreateAttachmentUserAction): Promise { + await this.bulkCreateAttachment({ + unsecuredSavedObjectsClient, + caseId, + attachments, + user, + action: Actions.create, + }); + } + public async createUserAction({ unsecuredSavedObjectsClient, action, diff --git a/x-pack/test/cases_api_integration/common/lib/utils.ts b/x-pack/test/cases_api_integration/common/lib/utils.ts index 9c56db80e45fc..824b49d28b76c 100644 --- a/x-pack/test/cases_api_integration/common/lib/utils.ts +++ b/x-pack/test/cases_api_integration/common/lib/utils.ts @@ -17,6 +17,7 @@ import type { Client } from '@elastic/elasticsearch'; import type SuperTest from 'supertest'; import { ObjectRemover as ActionsRemover } from '../../../alerting_api_integration/common/lib'; import { + CASES_INTERNAL_URL, CASES_URL, CASE_CONFIGURE_CONNECTORS_URL, CASE_CONFIGURE_URL, @@ -49,8 +50,10 @@ import { CasesByAlertId, CaseResolveResponse, CaseMetricsResponse, + BulkCreateCommentRequest, + CommentType, } from '../../../../plugins/cases/common/api'; -import { getPostCaseRequest } from './mock'; +import { getPostCaseRequest, postCaseReq } from './mock'; import { getCaseUserActionUrl } from '../../../../plugins/cases/common/api/helpers'; import { SignalHit } from '../../../../plugins/security_solution/server/lib/detection_engine/signals/types'; import { ActionResult, FindActionResult } from '../../../../plugins/actions/server/types'; @@ -656,6 +659,31 @@ export const createComment = async ({ return theCase; }; +export const bulkCreateAttachments = async ({ + supertest, + caseId, + params, + auth = { user: superUser, space: null }, + expectedHttpCode = 200, +}: { + supertest: SuperTest.SuperTest; + caseId: string; + params: BulkCreateCommentRequest; + auth?: { user: User; space: string | null }; + expectedHttpCode?: number; +}): Promise => { + const { body: theCase } = await supertest + .post( + `${getSpaceUrlPrefix(auth.space)}${CASES_INTERNAL_URL}/${caseId}/attachments/_bulk_create` + ) + .auth(auth.user.username, auth.user.password) + .set('kbn-xsrf', 'true') + .send(params) + .expect(expectedHttpCode); + + return theCase; +}; + export const updateCase = async ({ supertest, params, @@ -1143,3 +1171,48 @@ export const extractWarningValueFromWarningHeader = (warningHeader: string) => { const warningValue = warningHeader.substring(firstQuote + 1, lastQuote); return warningValue; }; + +export const getAttachments = (numberOfAttachments: number): BulkCreateCommentRequest => { + return [...Array(numberOfAttachments)].map((index) => { + if (index % 0) { + return { + type: CommentType.user, + comment: `Test ${index + 1}`, + owner: 'securitySolutionFixture', + }; + } + + return { + type: CommentType.alert, + alertId: `test-id-${index + 1}`, + index: `test-index-${index + 1}`, + rule: { + id: `rule-test-id-${index + 1}`, + name: `Test ${index + 1}`, + }, + owner: 'securitySolutionFixture', + }; + }); +}; + +export const createCaseAndBulkCreateAttachments = async ({ + supertest, + numberOfAttachments = 3, + auth = { user: superUser, space: null }, + expectedHttpCode = 200, +}: { + supertest: SuperTest.SuperTest; + numberOfAttachments?: number; + auth?: { user: User; space: string | null }; + expectedHttpCode?: number; +}): Promise<{ theCase: CaseResponse; attachments: BulkCreateCommentRequest }> => { + const postedCase = await createCase(supertest, postCaseReq); + const attachments = getAttachments(numberOfAttachments); + const patchedCase = await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: attachments, + }); + + return { theCase: patchedCase, attachments }; +}; diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/post_comment.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/post_comment.ts index 9c208139330ea..9c2dbb9d58d08 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/post_comment.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/post_comment.ts @@ -10,12 +10,12 @@ import expect from '@kbn/expect'; import { ALERT_WORKFLOW_STATUS } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; -import { CASES_URL } from '../../../../../../plugins/cases/common/constants'; import { DETECTION_ENGINE_QUERY_SIGNALS_URL } from '../../../../../../plugins/security_solution/common/constants'; import { CommentType, AttributesTypeUser, AttributesTypeAlerts, + CaseStatuses, } from '../../../../../../plugins/cases/common/api'; import { defaultUser, @@ -35,6 +35,7 @@ import { removeServerGeneratedPropertiesFromUserAction, removeServerGeneratedPropertiesFromSavedObject, superUserSpace1Auth, + updateCase, } from '../../../../common/lib/utils'; import { createSignalsIndex, @@ -263,34 +264,29 @@ export default ({ getService }: FtrProviderContext): void => { } }); - it('400s when case is missing', async () => { + it('404s when the case does not exist', async () => { await createComment({ supertest, caseId: 'not-exists', - params: { - // @ts-expect-error - bad: 'comment', - }, - expectedHttpCode: 400, + params: postCommentUserReq, + expectedHttpCode: 404, }); }); it('400s when adding an alert to a closed case', async () => { const postedCase = await createCase(supertest, postCaseReq); - - await supertest - .patch(CASES_URL) - .set('kbn-xsrf', 'true') - .send({ + await updateCase({ + supertest, + params: { cases: [ { id: postedCase.id, version: postedCase.version, - status: 'closed', + status: CaseStatuses.closed, }, ], - }) - .expect(200); + }, + }); await createComment({ supertest, @@ -313,78 +309,28 @@ export default ({ getService }: FtrProviderContext): void => { await esArchiver.unload('x-pack/test/functional/es_archives/auditbeat/hosts'); }); - it('should change the status of the alert if sync alert is on', async () => { - const rule = getRuleForSignalTesting(['auditbeat-*']); - const postedCase = await createCase(supertest, postCaseReq); - - await supertest - .patch(CASES_URL) - .set('kbn-xsrf', 'true') - .send({ - cases: [ - { - id: postedCase.id, - version: postedCase.version, - status: 'in-progress', - }, - ], - }) - .expect(200); - - const { id } = await createRule(supertest, log, rule); - await waitForRuleSuccessOrStatus(supertest, log, id); - await waitForSignalsToBePresent(supertest, log, 1, [id]); - const signals = await getSignalsByIds(supertest, log, [id]); - - const alert = signals.hits.hits[0]; - expect(alert._source?.[ALERT_WORKFLOW_STATUS]).eql('open'); - - await createComment({ - supertest, - caseId: postedCase.id, - params: { - alertId: alert._id, - index: alert._index, - rule: { - id: 'id', - name: 'name', - }, - owner: 'securitySolutionFixture', - type: CommentType.alert, - }, - }); - - await es.indices.refresh({ index: alert._index }); - - const { body: updatedAlert } = await supertest - .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) - .set('kbn-xsrf', 'true') - .send(getQuerySignalIds([alert._id])) - .expect(200); - - expect(updatedAlert.hits.hits[0]._source[ALERT_WORKFLOW_STATUS]).eql('acknowledged'); - }); - - it('should NOT change the status of the alert if sync alert is off', async () => { + const bulkCreateAlertsAndVerifyAlertStatus = async ( + syncAlerts: boolean, + expectedAlertStatus: string + ) => { const rule = getRuleForSignalTesting(['auditbeat-*']); const postedCase = await createCase(supertest, { ...postCaseReq, - settings: { syncAlerts: false }, + settings: { syncAlerts }, }); - await supertest - .patch(CASES_URL) - .set('kbn-xsrf', 'true') - .send({ + await updateCase({ + supertest, + params: { cases: [ { id: postedCase.id, version: postedCase.version, - status: 'in-progress', + status: CaseStatuses['in-progress'], }, ], - }) - .expect(200); + }, + }); const { id } = await createRule(supertest, log, rule); await waitForRuleSuccessOrStatus(supertest, log, id); @@ -417,7 +363,15 @@ export default ({ getService }: FtrProviderContext): void => { .send(getQuerySignalIds([alert._id])) .expect(200); - expect(updatedAlert.hits.hits[0]._source[ALERT_WORKFLOW_STATUS]).eql('open'); + expect(updatedAlert.hits.hits[0]._source[ALERT_WORKFLOW_STATUS]).eql(expectedAlertStatus); + }; + + it('should change the status of the alert if sync alert is on', async () => { + await bulkCreateAlertsAndVerifyAlertStatus(true, 'acknowledged'); + }); + + it('should NOT change the status of the alert if sync alert is off', async () => { + await bulkCreateAlertsAndVerifyAlertStatus(false, 'open'); }); }); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts index a4733d0c87038..f70c8593d3c94 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts @@ -39,6 +39,12 @@ export default ({ loadTestFile }: FtrProviderContext): void => { loadTestFile(require.resolve('./metrics/get_case_metrics_actions')); loadTestFile(require.resolve('./metrics/get_case_metrics_connectors')); + /** + * Internal routes + */ + + loadTestFile(require.resolve('./internal/bulk_create_attachments')); + // NOTE: Migrations are not included because they can inadvertently remove the .kibana indices which removes the users and spaces // which causes errors in any tests after them that relies on those }); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/bulk_create_attachments.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/bulk_create_attachments.ts new file mode 100644 index 0000000000000..73aefa716429d --- /dev/null +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/bulk_create_attachments.ts @@ -0,0 +1,584 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { omit } from 'lodash/fp'; +import expect from '@kbn/expect'; +import { ALERT_WORKFLOW_STATUS } from '@kbn/rule-data-utils'; +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; + +import { DETECTION_ENGINE_QUERY_SIGNALS_URL } from '../../../../../../plugins/security_solution/common/constants'; +import { + BulkCreateCommentRequest, + CaseResponse, + CaseStatuses, + CommentRequest, + CommentType, +} from '../../../../../../plugins/cases/common/api'; +import { + defaultUser, + postCaseReq, + postCommentUserReq, + postCommentAlertReq, + getPostCaseRequest, +} from '../../../../common/lib/mock'; +import { + deleteAllCaseItems, + createCase, + getCaseUserActions, + removeServerGeneratedPropertiesFromUserAction, + removeServerGeneratedPropertiesFromSavedObject, + superUserSpace1Auth, + createCaseAndBulkCreateAttachments, + bulkCreateAttachments, + updateCase, +} from '../../../../common/lib/utils'; +import { + createSignalsIndex, + deleteSignalsIndex, + deleteAllAlerts, + getRuleForSignalTesting, + waitForRuleSuccessOrStatus, + waitForSignalsToBePresent, + getSignalsByIds, + createRule, + getQuerySignalIds, +} from '../../../../../detection_engine_api_integration/utils'; +import { + globalRead, + noKibanaPrivileges, + obsOnly, + obsOnlyRead, + obsSecRead, + secOnly, + secOnlyRead, + superUser, +} from '../../../../common/lib/authentication/users'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + const es = getService('es'); + const log = getService('log'); + + const validateComments = ( + comments: CaseResponse['comments'], + attachments: BulkCreateCommentRequest + ) => { + comments?.forEach((attachment, index) => { + const comment = removeServerGeneratedPropertiesFromSavedObject(attachment); + + expect(comment).to.eql({ + ...attachments[index], + created_by: defaultUser, + pushed_at: null, + pushed_by: null, + updated_by: null, + }); + }); + }; + + describe('bulk_create_attachments', () => { + afterEach(async () => { + await deleteAllCaseItems(es); + }); + + describe('creation', () => { + it('should no create an attachment on empty request', async () => { + const { theCase } = await createCaseAndBulkCreateAttachments({ + supertest, + numberOfAttachments: 0, + }); + + expect(theCase.comments?.length).to.be(0); + }); + + it('should create one attachment', async () => { + const { theCase, attachments } = await createCaseAndBulkCreateAttachments({ + supertest, + numberOfAttachments: 1, + }); + + validateComments(theCase.comments, attachments); + }); + + it('should bulk create multiple attachments', async () => { + const { theCase, attachments } = await createCaseAndBulkCreateAttachments({ + supertest, + }); + + expect(theCase.totalComment).to.eql(attachments.length); + expect(theCase.updated_by).to.eql(defaultUser); + + validateComments(theCase.comments, attachments); + }); + + it('creates the correct user action', async () => { + const { theCase, attachments } = await createCaseAndBulkCreateAttachments({ + supertest, + }); + + const userActions = await getCaseUserActions({ supertest, caseID: theCase.id }); + + userActions.slice(1).forEach((userAction, index) => { + const userActionWithoutServerGeneratedAttributes = + removeServerGeneratedPropertiesFromUserAction(userAction); + + expect(userActionWithoutServerGeneratedAttributes).to.eql({ + type: 'comment', + action: 'create', + created_by: defaultUser, + payload: { + comment: { + ...attachments[index], + }, + }, + case_id: theCase.id, + comment_id: theCase.comments?.find((comment) => comment.id === userAction.comment_id) + ?.id, + owner: 'securitySolutionFixture', + }); + }); + }); + }); + + describe('errors', () => { + it('400s when attempting to create a comment with a different owner than the case', async () => { + const postedCase = await createCase( + supertest, + getPostCaseRequest({ owner: 'securitySolutionFixture' }) + ); + + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [ + { + type: CommentType.user, + comment: 'test', + owner: 'securitySolutionFixture', + }, + { + type: CommentType.user, + comment: 'test', + owner: 'observabilityFixture', + }, + ], + expectedHttpCode: 400, + }); + }); + + it('400s when type is missing', async () => { + const postedCase = await createCase(supertest, postCaseReq); + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [ + { + type: CommentType.user, + comment: 'test', + owner: 'securitySolutionFixture', + }, + { + // @ts-expect-error + bad: 'comment', + }, + ], + expectedHttpCode: 400, + }); + }); + + it('400s when missing attributes for type user', async () => { + const postedCase = await createCase(supertest, postCaseReq); + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [ + { + type: CommentType.user, + comment: 'test', + owner: 'securitySolutionFixture', + }, + // @ts-expect-error + { + type: CommentType.user, + }, + ], + expectedHttpCode: 400, + }); + }); + + it('400s when adding excess attributes for type user', async () => { + const postedCase = await createCase(supertest, postCaseReq); + + for (const attribute of ['alertId', 'index']) { + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [ + { + type: CommentType.user, + comment: 'test', + owner: 'securitySolutionFixture', + }, + { + type: CommentType.user, + [attribute]: attribute, + comment: 'a comment', + owner: 'securitySolutionFixture', + }, + ], + expectedHttpCode: 400, + }); + } + }); + + it('400s when missing attributes for type alert', async () => { + const postedCase = await createCase(supertest, postCaseReq); + + const allRequestAttributes = { + type: CommentType.alert, + index: 'test-index', + alertId: 'test-id', + rule: { + id: 'id', + name: 'name', + }, + owner: 'securitySolutionFixture', + }; + + for (const attribute of ['alertId', 'index']) { + const requestAttributes = omit(attribute, allRequestAttributes); + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [ + { + type: CommentType.user, + comment: 'test', + owner: 'securitySolutionFixture', + }, + // @ts-expect-error + requestAttributes, + ], + expectedHttpCode: 400, + }); + } + }); + + it('400s when adding excess attributes for type alert', async () => { + const postedCase = await createCase(supertest, postCaseReq); + + for (const attribute of ['comment']) { + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [ + { + type: CommentType.user, + comment: 'test', + owner: 'securitySolutionFixture', + }, + { + type: CommentType.alert, + [attribute]: attribute, + alertId: 'test-id', + index: 'test-index', + rule: { + id: 'id', + name: 'name', + }, + owner: 'securitySolutionFixture', + }, + ], + expectedHttpCode: 400, + }); + } + }); + + it('404s when the case does not exist', async () => { + await bulkCreateAttachments({ + supertest, + caseId: 'not-exists', + params: [ + { + type: CommentType.user, + comment: 'test', + owner: 'securitySolutionFixture', + }, + ], + expectedHttpCode: 404, + }); + }); + + it('400s when adding an alert to a closed case', async () => { + const postedCase = await createCase(supertest, postCaseReq); + await updateCase({ + supertest, + params: { + cases: [ + { + id: postedCase.id, + version: postedCase.version, + status: CaseStatuses.closed, + }, + ], + }, + }); + + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [ + { + type: CommentType.alert, + alertId: 'test-id', + index: 'test-index', + rule: { + id: 'id', + name: 'name', + }, + owner: 'securitySolutionFixture', + }, + ], + expectedHttpCode: 400, + }); + }); + + it('400s when adding an alert with other attachments to a closed case', async () => { + const postedCase = await createCase(supertest, postCaseReq); + await updateCase({ + supertest, + params: { + cases: [ + { + id: postedCase.id, + version: postedCase.version, + status: CaseStatuses.closed, + }, + ], + }, + }); + + await createCaseAndBulkCreateAttachments({ supertest, expectedHttpCode: 400 }); + }); + }); + + describe('alerts', () => { + beforeEach(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/auditbeat/hosts'); + await createSignalsIndex(supertest, log); + }); + + afterEach(async () => { + await deleteSignalsIndex(supertest, log); + await deleteAllAlerts(supertest, log); + await esArchiver.unload('x-pack/test/functional/es_archives/auditbeat/hosts'); + }); + + const bulkCreateAlertsAndVerifyAlertStatus = async ( + syncAlerts: boolean, + expectedAlertStatus: string + ) => { + const rule = getRuleForSignalTesting(['auditbeat-*']); + const postedCase = await createCase(supertest, { + ...postCaseReq, + settings: { syncAlerts }, + }); + + await updateCase({ + supertest, + params: { + cases: [ + { + id: postedCase.id, + version: postedCase.version, + status: CaseStatuses['in-progress'], + }, + ], + }, + }); + + const { id } = await createRule(supertest, log, rule); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 1, [id]); + const signals = await getSignalsByIds(supertest, log, [id]); + const attachments: CommentRequest[] = []; + const indices: string[] = []; + const ids: string[] = []; + + signals.hits.hits.forEach((alert) => { + expect(alert._source?.[ALERT_WORKFLOW_STATUS]).eql('open'); + attachments.push({ + alertId: alert._id, + index: alert._index, + rule: { + id: 'id', + name: 'name', + }, + owner: 'securitySolutionFixture', + type: CommentType.alert, + }); + + indices.push(alert._index); + ids.push(alert._id); + }); + + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: attachments, + }); + + await es.indices.refresh({ index: indices }); + + const { body: updatedAlerts } = await supertest + .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) + .set('kbn-xsrf', 'true') + .send(getQuerySignalIds(ids)) + .expect(200); + + updatedAlerts.hits.hits.forEach( + (alert: { _source: { 'kibana.alert.workflow_status': string } }) => { + expect(alert._source[ALERT_WORKFLOW_STATUS]).eql(expectedAlertStatus); + } + ); + }; + + it('should change the status of the alerts if sync alert is on', async () => { + await bulkCreateAlertsAndVerifyAlertStatus(true, 'acknowledged'); + }); + + it('should NOT change the status of the alert if sync alert is off', async () => { + await bulkCreateAlertsAndVerifyAlertStatus(false, 'open'); + }); + }); + + describe('alert format', () => { + type AlertComment = CommentType.alert; + + for (const [alertId, index, type] of [ + ['1', ['index1', 'index2'], CommentType.alert], + [['1', '2'], 'index', CommentType.alert], + ]) { + it(`throws an error with an alert comment with contents id: ${alertId} indices: ${index} type: ${type}`, async () => { + const postedCase = await createCase(supertest, postCaseReq); + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: [{ ...postCommentAlertReq, alertId, index, type: type as AlertComment }], + expectedHttpCode: 400, + }); + }); + } + + it('does not throw an error with correct alert formatting', async () => { + const postedCase = await createCase(supertest, postCaseReq); + const attachments = [ + { + ...postCommentAlertReq, + alertId: '1', + index: ['index1'], + type: CommentType.alert as const, + }, + { + ...postCommentAlertReq, + alertId: ['1', '2'], + index: ['index', 'other-index'], + type: CommentType.alert as const, + }, + ]; + + await bulkCreateAttachments({ + supertest, + caseId: postedCase.id, + params: attachments, + expectedHttpCode: 200, + }); + }); + }); + + describe('rbac', () => { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + + afterEach(async () => { + await deleteAllCaseItems(es); + }); + + it('should bulk create attachments when the user has the correct permissions for that owner', async () => { + const postedCase = await createCase( + supertestWithoutAuth, + getPostCaseRequest({ owner: 'securitySolutionFixture' }), + 200, + superUserSpace1Auth + ); + + await bulkCreateAttachments({ + supertest: supertestWithoutAuth, + caseId: postedCase.id, + params: [postCommentUserReq], + auth: { user: secOnly, space: 'space1' }, + }); + }); + + it('should not create a comment when the user does not have permissions for that owner', async () => { + const postedCase = await createCase( + supertestWithoutAuth, + getPostCaseRequest({ owner: 'observabilityFixture' }), + 200, + { user: obsOnly, space: 'space1' } + ); + + await bulkCreateAttachments({ + supertest: supertestWithoutAuth, + caseId: postedCase.id, + params: [{ ...postCommentUserReq, owner: 'observabilityFixture' }], + auth: { user: secOnly, space: 'space1' }, + expectedHttpCode: 403, + }); + }); + + for (const user of [globalRead, secOnlyRead, obsOnlyRead, obsSecRead, noKibanaPrivileges]) { + it(`User ${ + user.username + } with role(s) ${user.roles.join()} - should not create a comment`, async () => { + const postedCase = await createCase( + supertestWithoutAuth, + getPostCaseRequest({ owner: 'securitySolutionFixture' }), + 200, + superUserSpace1Auth + ); + + await bulkCreateAttachments({ + supertest: supertestWithoutAuth, + caseId: postedCase.id, + params: [postCommentUserReq], + auth: { user, space: 'space1' }, + expectedHttpCode: 403, + }); + }); + } + + it('should not create a comment in a space the user does not have permissions for', async () => { + const postedCase = await createCase( + supertestWithoutAuth, + getPostCaseRequest({ owner: 'securitySolutionFixture' }), + 200, + { user: superUser, space: 'space2' } + ); + + await bulkCreateAttachments({ + supertest: supertestWithoutAuth, + caseId: postedCase.id, + params: [postCommentUserReq], + auth: { user: secOnly, space: 'space2' }, + expectedHttpCode: 403, + }); + }); + }); + }); +}; diff --git a/x-pack/test/cases_api_integration/spaces_only/tests/common/comments/post_comment.ts b/x-pack/test/cases_api_integration/spaces_only/tests/common/comments/post_comment.ts index 72356d0d314ff..22c7aa6925bcb 100644 --- a/x-pack/test/cases_api_integration/spaces_only/tests/common/comments/post_comment.ts +++ b/x-pack/test/cases_api_integration/spaces_only/tests/common/comments/post_comment.ts @@ -11,13 +11,11 @@ import { FtrProviderContext } from '../../../../common/ftr_provider_context'; import { AttributesTypeUser } from '../../../../../../plugins/cases/common/api'; import { nullUser, postCaseReq, postCommentUserReq } from '../../../../common/lib/mock'; import { - deleteCasesByESQuery, - deleteCasesUserActions, - deleteComments, createCase, createComment, removeServerGeneratedPropertiesFromSavedObject, getAuthWithSuperUser, + deleteAllCaseItems, } from '../../../../common/lib/utils'; // eslint-disable-next-line import/no-default-export @@ -28,9 +26,7 @@ export default ({ getService }: FtrProviderContext): void => { describe('post_comment', () => { afterEach(async () => { - await deleteCasesByESQuery(es); - await deleteComments(es); - await deleteCasesUserActions(es); + await deleteAllCaseItems(es); }); it('should post a comment in space1', async () => { diff --git a/x-pack/test/cases_api_integration/spaces_only/tests/common/index.ts b/x-pack/test/cases_api_integration/spaces_only/tests/common/index.ts index 251a545f10681..0b18a56bdcd11 100644 --- a/x-pack/test/cases_api_integration/spaces_only/tests/common/index.ts +++ b/x-pack/test/cases_api_integration/spaces_only/tests/common/index.ts @@ -29,5 +29,10 @@ export default ({ loadTestFile }: FtrProviderContext): void => { loadTestFile(require.resolve('./configure/get_configure')); loadTestFile(require.resolve('./configure/patch_configure')); loadTestFile(require.resolve('./configure/post_configure')); + + /** + * Internal routes + */ + loadTestFile(require.resolve('./internal/bulk_create_attachments')); }); }; diff --git a/x-pack/test/cases_api_integration/spaces_only/tests/common/internal/bulk_create_attachments.ts b/x-pack/test/cases_api_integration/spaces_only/tests/common/internal/bulk_create_attachments.ts new file mode 100644 index 0000000000000..c713c3bf74e4b --- /dev/null +++ b/x-pack/test/cases_api_integration/spaces_only/tests/common/internal/bulk_create_attachments.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; + +import { AttributesTypeUser } from '../../../../../../plugins/cases/common/api'; +import { nullUser, postCaseReq, postCommentUserReq } from '../../../../common/lib/mock'; +import { + createCase, + removeServerGeneratedPropertiesFromSavedObject, + getAuthWithSuperUser, + bulkCreateAttachments, + deleteAllCaseItems, +} from '../../../../common/lib/utils'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const es = getService('es'); + const authSpace1 = getAuthWithSuperUser(); + + describe('bulk_create_attachments', () => { + afterEach(async () => { + await deleteAllCaseItems(es); + }); + + it('should bulk create attachments in space1', async () => { + const postedCase = await createCase(supertestWithoutAuth, postCaseReq, 200, authSpace1); + const patchedCase = await bulkCreateAttachments({ + supertest: supertestWithoutAuth, + caseId: postedCase.id, + params: [postCommentUserReq], + auth: authSpace1, + }); + + const comment = removeServerGeneratedPropertiesFromSavedObject( + patchedCase.comments![0] as AttributesTypeUser + ); + + expect(comment).to.eql({ + type: postCommentUserReq.type, + comment: postCommentUserReq.comment, + created_by: nullUser, + pushed_at: null, + pushed_by: null, + updated_by: null, + owner: 'securitySolutionFixture', + }); + + // updates the case correctly after adding a comment + expect(patchedCase.totalComment).to.eql(patchedCase.comments!.length); + expect(patchedCase.updated_by).to.eql(nullUser); + }); + + it('should not post a comment on a case in a different space', async () => { + const postedCase = await createCase(supertestWithoutAuth, postCaseReq, 200, authSpace1); + await bulkCreateAttachments({ + supertest: supertestWithoutAuth, + caseId: postedCase.id, + params: [postCommentUserReq], + auth: getAuthWithSuperUser('space2'), + expectedHttpCode: 404, + }); + }); + }); +}; From 2887930757964e442e7ccd8d7d1b366fd5c81d51 Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Thu, 14 Apr 2022 10:11:47 +0200 Subject: [PATCH 049/305] [Security Solution][Detection & Response] Open alerts by Rule (#129021) * rule alerts table initial implementation * move section code to its own directory * alerts filter by rule uuid * toggle query added, translations and navigation * lower case text * use selector properly * tests * all permission checks implemented + remaining tests * fix test with search bar * rename hook file * add useCallback * fix imports Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/common/lib/kibana/hooks.ts | 39 ++-- .../rule_alerts_table/index.tsx | 8 + .../rule_alerts_table/mock_data.ts | 142 +++++++++++++ .../rule_alerts_table.test.tsx | 144 +++++++++++++ .../rule_alerts_table/rule_alerts_table.tsx | 138 +++++++++++++ .../use_rule_alerts_items.test.ts | 137 +++++++++++++ .../use_rule_alerts_items.ts | 176 ++++++++++++++++ .../detection_response/translations.ts | 70 +++++++ .../components/detection_response/util.tsx | 39 ++++ .../pages/detection_response.test.tsx | 191 ++++++++++++++++++ .../overview/pages/detection_response.tsx | 123 +++++------ .../public/overview/pages/translations.ts | 29 ++- 12 files changed, 1148 insertions(+), 88 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/index.tsx create mode 100644 x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/mock_data.ts create mode 100644 x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/rule_alerts_table.test.tsx create mode 100644 x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/rule_alerts_table.tsx create mode 100644 x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts create mode 100644 x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.ts create mode 100644 x-pack/plugins/security_solution/public/overview/components/detection_response/translations.ts create mode 100644 x-pack/plugins/security_solution/public/overview/components/detection_response/util.tsx create mode 100644 x-pack/plugins/security_solution/public/overview/pages/detection_response.test.tsx diff --git a/x-pack/plugins/security_solution/public/common/lib/kibana/hooks.ts b/x-pack/plugins/security_solution/public/common/lib/kibana/hooks.ts index ebf361914ca3b..d7285c34b57c8 100644 --- a/x-pack/plugins/security_solution/public/common/lib/kibana/hooks.ts +++ b/x-pack/plugins/security_solution/public/common/lib/kibana/hooks.ts @@ -169,19 +169,19 @@ export const useGetUserCasesPermissions = () => { * Returns a full URL to the provided page path by using * kibana's `getUrlForApp()` */ + +export type GetAppUrl = (param: { + appId?: string; + deepLinkId?: string; + path?: string; + absolute?: boolean; +}) => string; + export const useAppUrl = () => { const { getUrlForApp } = useKibana().services.application; - const getAppUrl = useCallback( - ({ - appId = APP_UI_ID, - ...options - }: { - appId?: string; - deepLinkId?: string; - path?: string; - absolute?: boolean; - }) => getUrlForApp(appId, options), + const getAppUrl = useCallback( + ({ appId = APP_UI_ID, ...options }) => getUrlForApp(appId, options), [getUrlForApp] ); return { getAppUrl }; @@ -191,18 +191,19 @@ export const useAppUrl = () => { * Navigate to any app using kibana's `navigateToApp()` * or by url using `navigateToUrl()` */ + +export type NavigateTo = ( + param: { + url?: string; + appId?: string; + } & NavigateToAppOptions +) => void; + export const useNavigateTo = () => { const { navigateToApp, navigateToUrl } = useKibana().services.application; - const navigateTo = useCallback( - ({ - url, - appId = APP_UI_ID, - ...options - }: { - url?: string; - appId?: string; - } & NavigateToAppOptions) => { + const navigateTo = useCallback( + ({ url, appId = APP_UI_ID, ...options }) => { if (url) { navigateToUrl(url); } else { diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/index.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/index.tsx new file mode 100644 index 0000000000000..3be512cbb38a1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/index.tsx @@ -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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { RuleAlertsTable } from './rule_alerts_table'; diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/mock_data.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/mock_data.ts new file mode 100644 index 0000000000000..8fb1279d75fff --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/mock_data.ts @@ -0,0 +1,142 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { RuleAlertsItem, SeverityRuleAlertsAggsResponse } from './use_rule_alerts_items'; + +export const from = '2022-04-05T12:00:00.000Z'; +export const to = '2022-04-08T12:00:00.000Z'; + +export const severityRuleAlertsQuery = { + size: 0, + query: { + bool: { + filter: [ + { term: { 'kibana.alert.workflow_status': 'open' } }, + { range: { '@timestamp': { gte: from, lte: to } } }, + ], + }, + }, + aggs: { + alertsByRule: { + terms: { + // top 4 rules sorted by severity counters + field: 'kibana.alert.rule.uuid', + size: 4, + order: [{ critical: 'desc' }, { high: 'desc' }, { medium: 'desc' }, { low: 'desc' }], + }, + aggs: { + // severity aggregations for sorting + critical: { filter: { term: { 'kibana.alert.severity': 'critical' } } }, + high: { filter: { term: { 'kibana.alert.severity': 'high' } } }, + medium: { filter: { term: { 'kibana.alert.severity': 'medium' } } }, + low: { filter: { term: { 'kibana.alert.severity': 'low' } } }, + // get the newest alert to extract timestamp and rule name + lastRuleAlert: { + top_hits: { + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + }, + }, + }, +}; + +export const mockSeverityRuleAlertsResponse: { aggregations: SeverityRuleAlertsAggsResponse } = { + aggregations: { + alertsByRule: { + buckets: [ + { + key: '79ec0270-b4c5-11ec-970e-8f7c5a7144f7', + doc_count: 54, + lastRuleAlert: { + hits: { + total: { + value: 54, + }, + hits: [ + { + _source: { + 'kibana.alert.rule.name': 'RULE_1', + '@timestamp': '2022-04-05T15:58:35.079Z', + 'kibana.alert.severity': 'critical', + }, + }, + ], + }, + }, + }, + { + key: '955c79d0-b403-11ec-b5a7-6dc1ed01bdd7', + doc_count: 112, + lastRuleAlert: { + hits: { + total: { + value: 112, + }, + hits: [ + { + _source: { + 'kibana.alert.rule.name': 'RULE_2', + '@timestamp': '2022-04-05T15:58:47.164Z', + 'kibana.alert.severity': 'high', + }, + }, + ], + }, + }, + }, + { + key: '13bc7bc0-b1d6-11ec-a799-67811b37527a', + doc_count: 170, + lastRuleAlert: { + hits: { + total: { + value: 170, + }, + hits: [ + { + _source: { + 'kibana.alert.rule.name': 'RULE_3', + '@timestamp': '2022-04-05T15:56:16.606Z', + 'kibana.alert.severity': 'low', + }, + }, + ], + }, + }, + }, + ], + }, + }, +}; + +export const severityRuleAlertsResponseParsed: RuleAlertsItem[] = [ + { + alert_count: 54, + id: '79ec0270-b4c5-11ec-970e-8f7c5a7144f7', + last_alert_at: '2022-04-05T15:58:35.079Z', + name: 'RULE_1', + severity: 'critical', + }, + { + alert_count: 112, + id: '955c79d0-b403-11ec-b5a7-6dc1ed01bdd7', + last_alert_at: '2022-04-05T15:58:47.164Z', + name: 'RULE_2', + severity: 'high', + }, + { + alert_count: 170, + id: '13bc7bc0-b1d6-11ec-a799-67811b37527a', + last_alert_at: '2022-04-05T15:56:16.606Z', + name: 'RULE_3', + severity: 'low', + }, +]; diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/rule_alerts_table.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/rule_alerts_table.test.tsx new file mode 100644 index 0000000000000..f41e05a2c04dc --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/rule_alerts_table.test.tsx @@ -0,0 +1,144 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { TestProviders } from '../../../../common/mock'; +import { RuleAlertsTable, RuleAlertsTableProps } from './rule_alerts_table'; +import { RuleAlertsItem, UseRuleAlertsItems } from './use_rule_alerts_items'; +import moment from 'moment'; +import { SecurityPageName } from '../../../../../common/constants'; + +const mockGetAppUrl = jest.fn(); +jest.mock('../../../../common/lib/kibana/hooks', () => { + const original = jest.requireActual('../../../../common/lib/kibana/hooks'); + return { + ...original, + useNavigation: () => ({ + getAppUrl: mockGetAppUrl, + }), + }; +}); + +type UseRuleAlertsItemsReturn = ReturnType; +const defaultUseRuleAlertsItemsReturn: UseRuleAlertsItemsReturn = { + items: [], + isLoading: false, + updatedAt: Date.now(), +}; +const mockUseRuleAlertsItems = jest.fn(() => defaultUseRuleAlertsItemsReturn); +const mockUseRuleAlertsItemsReturn = (param: Partial) => { + mockUseRuleAlertsItems.mockReturnValueOnce({ ...defaultUseRuleAlertsItemsReturn, ...param }); +}; +jest.mock('./use_rule_alerts_items', () => ({ + useRuleAlertsItems: () => mockUseRuleAlertsItems(), +})); + +const defaultProps: RuleAlertsTableProps = { + signalIndexName: '', +}; +const items: RuleAlertsItem[] = [ + { + id: 'ruleId', + name: 'ruleName', + last_alert_at: moment().subtract(1, 'day').format(), + alert_count: 10, + severity: 'high', + }, +]; + +describe('RuleAlertsTable', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render empty table', () => { + const result = render( + + + + ); + + expect(result.getByTestId('severityRuleAlertsPanel')).toBeInTheDocument(); + expect(result.getByText('No alerts to display')).toBeInTheDocument(); + expect(result.getByTestId('severityRuleAlertsButton')).toBeInTheDocument(); + }); + + it('should render a loading table', () => { + mockUseRuleAlertsItemsReturn({ isLoading: true }); + const result = render( + + + + ); + + expect(result.getByText('Updating...')).toBeInTheDocument(); + expect(result.getByTestId('severityRuleAlertsButton')).toBeInTheDocument(); + expect(result.getByTestId('severityRuleAlertsTable')).toHaveClass('euiBasicTable-loading'); + }); + + it('should render the updated at subtitle', () => { + mockUseRuleAlertsItemsReturn({ isLoading: false }); + const result = render( + + + + ); + + expect(result.getByText('Updated now')).toBeInTheDocument(); + }); + + it('should render the table columns', () => { + mockUseRuleAlertsItemsReturn({ items }); + const result = render( + + + + ); + + const columnHeaders = result.getAllByRole('columnheader'); + expect(columnHeaders.at(0)).toHaveTextContent('Rule name'); + expect(columnHeaders.at(1)).toHaveTextContent('Last alert'); + expect(columnHeaders.at(2)).toHaveTextContent('Alert count'); + expect(columnHeaders.at(3)).toHaveTextContent('Severity'); + }); + + it('should render the table items', () => { + mockUseRuleAlertsItemsReturn({ items }); + const result = render( + + + + ); + + expect(result.getByTestId('severityRuleAlertsTable-name')).toHaveTextContent('ruleName'); + expect(result.getByTestId('severityRuleAlertsTable-lastAlertAt')).toHaveTextContent( + 'yesterday' + ); + expect(result.getByTestId('severityRuleAlertsTable-alertCount')).toHaveTextContent('10'); + expect(result.getByTestId('severityRuleAlertsTable-severity')).toHaveTextContent('High'); + }); + + it('should generate the table items links', () => { + const linkUrl = '/fake/link'; + mockGetAppUrl.mockReturnValue(linkUrl); + mockUseRuleAlertsItemsReturn({ items }); + + const result = render( + + + + ); + + expect(mockGetAppUrl).toBeCalledWith({ + deepLinkId: SecurityPageName.rules, + path: `id/${items[0].id}`, + }); + + expect(result.getByTestId('severityRuleAlertsTable-name')).toHaveAttribute('href', linkUrl); + }); +}); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/rule_alerts_table.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/rule_alerts_table.tsx new file mode 100644 index 0000000000000..7a053fd0366dd --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/rule_alerts_table.tsx @@ -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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo } from 'react'; +import { capitalize } from 'lodash'; +import { + EuiBasicTable, + EuiBasicTableColumn, + EuiButton, + EuiEmptyPrompt, + EuiHealth, + EuiLink, + EuiPanel, + EuiSpacer, + EuiToolTip, +} from '@elastic/eui'; +import { FormattedRelative } from '@kbn/i18n-react'; +import { Severity } from '@kbn/securitysolution-io-ts-alerting-types'; +import { HeaderSection } from '../../../../common/components/header_section'; + +import { LastUpdatedAt, SEVERITY_COLOR } from '../util'; +import * as i18n from '../translations'; +import { useRuleAlertsItems, RuleAlertsItem } from './use_rule_alerts_items'; +import { useNavigation, NavigateTo, GetAppUrl } from '../../../../common/lib/kibana'; +import { SecurityPageName } from '../../../../../common/constants'; +import { useQueryToggle } from '../../../../common/containers/query_toggle'; + +export interface RuleAlertsTableProps { + signalIndexName: string | null; +} + +export type GetTableColumns = (params: { + getAppUrl: GetAppUrl; + navigateTo: NavigateTo; +}) => Array>; + +const DETECTION_RESPONSE_RULE_ALERTS_QUERY_ID = + 'detection-response-rule-alerts-severity-table' as const; + +export const getTableColumns: GetTableColumns = ({ getAppUrl, navigateTo }) => [ + { + field: 'name', + name: i18n.RULE_ALERTS_COLUMN_RULE_NAME, + render: (name: string, { id }) => { + const url = getAppUrl({ deepLinkId: SecurityPageName.rules, path: `id/${id}` }); + return ( + + {/* eslint-disable-next-line @elastic/eui/href-or-on-click */} + { + if (ev) { + ev.preventDefault(); + } + navigateTo({ url }); + }} + > + {name} + + + ); + }, + }, + { + field: 'last_alert_at', + name: i18n.RULE_ALERTS_COLUMN_LAST_ALERT, + 'data-test-subj': 'severityRuleAlertsTable-lastAlertAt', + render: (lastAlertAt: string) => , + }, + { + field: 'alert_count', + name: i18n.RULE_ALERTS_COLUMN_ALERT_COUNT, + 'data-test-subj': 'severityRuleAlertsTable-alertCount', + }, + { + field: 'severity', + name: i18n.RULE_ALERTS_COLUMN_SEVERITY, + 'data-test-subj': 'severityRuleAlertsTable-severity', + render: (severity: Severity) => ( + {capitalize(severity)} + ), + }, +]; + +export const RuleAlertsTable = React.memo(({ signalIndexName }) => { + const { getAppUrl, navigateTo } = useNavigation(); + const { toggleStatus, setToggleStatus } = useQueryToggle(DETECTION_RESPONSE_RULE_ALERTS_QUERY_ID); + const { items, isLoading, updatedAt } = useRuleAlertsItems({ + signalIndexName, + queryId: DETECTION_RESPONSE_RULE_ALERTS_QUERY_ID, + skip: !toggleStatus, + }); + + const navigateToAlerts = useCallback(() => { + navigateTo({ deepLinkId: SecurityPageName.alerts }); + }, [navigateTo]); + + const columns = useMemo( + () => getTableColumns({ getAppUrl, navigateTo }), + [getAppUrl, navigateTo] + ); + + return ( + + } + /> + {toggleStatus && ( + <> + {i18n.NO_ALERTS_FOUND}
} titleSize="xs" /> + } + /> + + + {i18n.OPEN_ALL_ALERTS_BUTTON} + + + )} + + ); +}); +RuleAlertsTable.displayName = 'RuleAlertsTable'; diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts new file mode 100644 index 0000000000000..85d4c8e5b6a93 --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react-hooks'; +import { TestProviders } from '../../../../common/mock'; +import { + from, + mockSeverityRuleAlertsResponse, + severityRuleAlertsQuery, + severityRuleAlertsResponseParsed, + to, +} from './mock_data'; +import { + useRuleAlertsItems, + UseRuleAlertsItems, + UseRuleAlertsItemsProps, +} from './use_rule_alerts_items'; + +const dateNow = new Date('2022-04-08T12:00:00.000Z').valueOf(); +const mockDateNow = jest.fn().mockReturnValue(dateNow); +Date.now = jest.fn(() => mockDateNow()) as unknown as DateConstructor['now']; + +const defaultUseQueryAlertsReturn = { + loading: false, + data: null, + setQuery: () => {}, + response: '', + request: '', + refetch: () => {}, +}; +const mockUseQueryAlerts = jest.fn().mockReturnValue(defaultUseQueryAlertsReturn); +jest.mock('../../../../detections/containers/detection_engine/alerts/use_query', () => { + return { + useQueryAlerts: (...props: unknown[]) => mockUseQueryAlerts(...props), + }; +}); + +const mockUseGlobalTime = jest + .fn() + .mockReturnValue({ from, to, setQuery: jest.fn(), deleteQuery: jest.fn() }); +jest.mock('../../../../common/containers/use_global_time', () => { + return { + useGlobalTime: (...props: unknown[]) => mockUseGlobalTime(...props), + }; +}); + +// helper function to render the hook +const renderUseRuleAlertsItems = (props: Partial = {}) => + renderHook>( + () => + useRuleAlertsItems({ + queryId: 'test', + signalIndexName: 'signal-alerts', + ...props, + }), + { + wrapper: TestProviders, + } + ); + +describe('useRuleAlertsItems', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockDateNow.mockReturnValue(dateNow); + mockUseQueryAlerts.mockReturnValue(defaultUseQueryAlertsReturn); + }); + + it('should return default values', () => { + const { result } = renderUseRuleAlertsItems(); + + expect(result.current).toEqual({ + items: [], + isLoading: false, + updatedAt: dateNow, + }); + expect(mockUseQueryAlerts).toBeCalledWith({ + query: severityRuleAlertsQuery, + indexName: 'signal-alerts', + skip: false, + }); + }); + + it('should return parsed items', () => { + mockUseQueryAlerts.mockReturnValue({ + ...defaultUseQueryAlertsReturn, + data: mockSeverityRuleAlertsResponse, + }); + + const { result } = renderUseRuleAlertsItems(); + + expect(result.current).toEqual({ + items: severityRuleAlertsResponseParsed, + isLoading: false, + updatedAt: dateNow, + }); + }); + + it('should return new updatedAt', () => { + const newDateNow = new Date('2022-04-08T14:00:00.000Z').valueOf(); + mockDateNow.mockReturnValue(newDateNow); // setUpdatedAt call + mockDateNow.mockReturnValueOnce(dateNow); // initialization call + + mockUseQueryAlerts.mockReturnValue({ + ...defaultUseQueryAlertsReturn, + data: mockSeverityRuleAlertsResponse, + }); + + const { result } = renderUseRuleAlertsItems(); + + expect(mockDateNow).toHaveBeenCalled(); + expect(result.current).toEqual({ + items: severityRuleAlertsResponseParsed, + isLoading: false, + updatedAt: newDateNow, + }); + }); + + it('should skip the query', () => { + const { result } = renderUseRuleAlertsItems({ skip: true }); + + expect(mockUseQueryAlerts).toBeCalledWith({ + query: severityRuleAlertsQuery, + indexName: 'signal-alerts', + skip: true, + }); + + expect(result.current).toEqual({ + items: [], + isLoading: false, + updatedAt: dateNow, + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.ts new file mode 100644 index 0000000000000..2fd107f3caf39 --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.ts @@ -0,0 +1,176 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback, useEffect, useState } from 'react'; +import { Severity } from '@kbn/securitysolution-io-ts-alerting-types'; +import { useGlobalTime } from '../../../../common/containers/use_global_time'; +import { useQueryAlerts } from '../../../../detections/containers/detection_engine/alerts/use_query'; +import { useQueryInspector } from '../../../../common/components/page/manage_query'; + +// Formatted item result +export interface RuleAlertsItem { + id: string; + name: string; + last_alert_at: string; + alert_count: number; + severity: Severity; +} + +// Raw aggregation response +export interface SeverityRuleAlertsAggsResponse { + alertsByRule: { + buckets?: Array<{ + key: string; + doc_count: number; + lastRuleAlert: { + hits: { + total: { + value: number; + }; + hits: [ + { + _source: { + '@timestamp': string; + 'kibana.alert.rule.name': string; + 'kibana.alert.severity': Severity; + }; + } + ]; + }; + }; + }>; + }; +} + +const getSeverityRuleAlertsQuery = ({ from, to }: { from: string; to: string }) => ({ + size: 0, + query: { + bool: { + filter: [ + { term: { 'kibana.alert.workflow_status': 'open' } }, + { range: { '@timestamp': { gte: from, lte: to } } }, + ], + }, + }, + aggs: { + alertsByRule: { + terms: { + // top 4 rules sorted by severity counters + field: 'kibana.alert.rule.uuid', + size: 4, + order: [{ critical: 'desc' }, { high: 'desc' }, { medium: 'desc' }, { low: 'desc' }], + }, + aggs: { + // severity aggregations for sorting + critical: { filter: { term: { 'kibana.alert.severity': 'critical' } } }, + high: { filter: { term: { 'kibana.alert.severity': 'high' } } }, + medium: { filter: { term: { 'kibana.alert.severity': 'medium' } } }, + low: { filter: { term: { 'kibana.alert.severity': 'low' } } }, + // get the newest alert to extract timestamp and rule name + lastRuleAlert: { + top_hits: { + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + }, + }, + }, +}); + +const getRuleAlertsItemsFromAggs = ( + aggregations?: SeverityRuleAlertsAggsResponse +): RuleAlertsItem[] => { + const buckets = aggregations?.alertsByRule.buckets ?? []; + return buckets.map((bucket) => { + const lastAlert = bucket.lastRuleAlert.hits.hits[0]._source; + return { + id: bucket.key, + alert_count: bucket.lastRuleAlert.hits.total.value, + name: lastAlert['kibana.alert.rule.name'], + last_alert_at: lastAlert['@timestamp'], + severity: lastAlert['kibana.alert.severity'], + }; + }); +}; + +export interface UseRuleAlertsItemsProps { + queryId: string; + signalIndexName: string | null; + skip?: boolean; +} +export type UseRuleAlertsItems = (props: UseRuleAlertsItemsProps) => { + items: RuleAlertsItem[]; + isLoading: boolean; + updatedAt: number; +}; + +export const useRuleAlertsItems: UseRuleAlertsItems = ({ + queryId, + signalIndexName, + skip = false, +}) => { + const [items, setItems] = useState([]); + const [updatedAt, setUpdatedAt] = useState(Date.now()); + const { to, from, deleteQuery, setQuery } = useGlobalTime(); + + const { + loading: isLoading, + data, + setQuery: setAlertsQuery, + response, + request, + refetch: refetchQuery, + } = useQueryAlerts<{}, SeverityRuleAlertsAggsResponse>({ + query: getSeverityRuleAlertsQuery({ + from, + to, + }), + indexName: signalIndexName, + skip, + }); + + useEffect(() => { + setAlertsQuery( + getSeverityRuleAlertsQuery({ + from, + to, + }) + ); + }, [setAlertsQuery, from, to]); + + useEffect(() => { + if (data == null) { + setItems([]); + } else { + setItems(getRuleAlertsItemsFromAggs(data.aggregations)); + } + setUpdatedAt(Date.now()); + }, [data]); + + const refetch = useCallback(() => { + if (!skip && refetchQuery) { + refetchQuery(); + } + }, [skip, refetchQuery]); + + useQueryInspector({ + deleteQuery, + inspect: { + dsl: [request], + response: [response], + }, + refetch, + setQuery, + queryId, + loading: isLoading, + }); + + return { items, isLoading, updatedAt }; +}; diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/translations.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/translations.ts new file mode 100644 index 0000000000000..81e3bff33545d --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/translations.ts @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const UPDATING = i18n.translate('xpack.securitySolution.detectionResponse.updating', { + defaultMessage: 'Updating...', +}); +export const UPDATED = i18n.translate('xpack.securitySolution.detectionResponse.updated', { + defaultMessage: 'Updated', +}); +export const RULE_ALERTS_SECTION_TITLE = i18n.translate( + 'xpack.securitySolution.detectionResponse.ruleAlertsSectionTitle', + { + defaultMessage: 'Open alerts by rule', + } +); +export const NO_ALERTS_FOUND = i18n.translate( + 'xpack.securitySolution.detectionResponse.noRuleAlerts', + { + defaultMessage: 'No alerts to display', + } +); +export const RULE_ALERTS_COLUMN_RULE_NAME = i18n.translate( + 'xpack.securitySolution.detectionResponse.ruleAlertsColumnRuleName', + { + defaultMessage: 'Rule name', + } +); +export const RULE_ALERTS_COLUMN_LAST_ALERT = i18n.translate( + 'xpack.securitySolution.detectionResponse.ruleAlertsColumnLastAlert', + { + defaultMessage: 'Last alert', + } +); +export const RULE_ALERTS_COLUMN_ALERT_COUNT = i18n.translate( + 'xpack.securitySolution.detectionResponse.ruleAlertsColumnAlertCount', + { + defaultMessage: 'Alert count', + } +); +export const RULE_ALERTS_COLUMN_SEVERITY = i18n.translate( + 'xpack.securitySolution.detectionResponse.ruleAlertsColumnSeverity', + { + defaultMessage: 'Severity', + } +); +export const OPEN_RULE_DETAIL_TOOLTIP = i18n.translate( + 'xpack.securitySolution.detectionResponse.openRuleDetailTooltip', + { + defaultMessage: 'Open rule detail', + } +); +export const OPEN_RULE_ALERTS_TOOLTIP = i18n.translate( + 'xpack.securitySolution.detectionResponse.openRuleAlertsTooltip', + { + defaultMessage: 'Open rule alerts', + } +); + +export const OPEN_ALL_ALERTS_BUTTON = i18n.translate( + 'xpack.securitySolution.detectionResponse.openAllAlertsButton', + { + defaultMessage: 'View all open alerts', + } +); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/util.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/util.tsx new file mode 100644 index 0000000000000..4ceba66773397 --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/util.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { FormattedRelative } from '@kbn/i18n-react'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import * as i18n from './translations'; + +export const SEVERITY_COLOR = { + critical: '#EF6550', + high: '#EE9266', + medium: '#F3B689', + low: '#F8D9B2', +} as const; + +export interface LastUpdatedAtProps { + updatedAt: number; + isUpdating: boolean; +} +export const LastUpdatedAt: React.FC = ({ isUpdating, updatedAt }) => ( + + {isUpdating ? ( + {i18n.UPDATING} + ) : ( + + <>{i18n.UPDATED} + + + )} + +); diff --git a/x-pack/plugins/security_solution/public/overview/pages/detection_response.test.tsx b/x-pack/plugins/security_solution/public/overview/pages/detection_response.test.tsx new file mode 100644 index 0000000000000..8cd387978e97d --- /dev/null +++ b/x-pack/plugins/security_solution/public/overview/pages/detection_response.test.tsx @@ -0,0 +1,191 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { MemoryRouter } from 'react-router-dom'; +import { render } from '@testing-library/react'; +import { DetectionResponse } from './detection_response'; +import { TestProviders } from '../../common/mock'; + +jest.mock('../components/detection_response/rule_alerts_table', () => ({ + RuleAlertsTable: () =>
, +})); +// TODO: add all sections mocks + +jest.mock('../../common/components/search_bar', () => ({ + SiemSearchBar: () =>
, +})); + +const defaultUseSourcererReturn = { + indicesExist: true, + loading: false, + indexPattern: '', +}; +const mockUseSourcererDataView = jest.fn(() => defaultUseSourcererReturn); +jest.mock('../../common/containers/sourcerer', () => ({ + useSourcererDataView: () => mockUseSourcererDataView(), +})); + +const defaultUseUserInfoReturn = { + signalIndexName: '', + canUserREAD: true, + hasIndexRead: true, +}; +const mockUseUserInfo = jest.fn(() => defaultUseUserInfoReturn); +jest.mock('../../detections/components/user_info', () => ({ + useUserInfo: () => mockUseUserInfo(), +})); + +const defaultUseCasesPermissionsReturn = { read: true }; +const mockUseCasesPermissions = jest.fn(() => defaultUseCasesPermissionsReturn); +jest.mock('../../common/lib/kibana/hooks', () => { + const original = jest.requireActual('../../common/lib/kibana/hooks'); + return { + ...original, + useGetUserCasesPermissions: () => mockUseCasesPermissions(), + }; +}); + +describe('DetectionResponse', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockUseSourcererDataView.mockReturnValue(defaultUseSourcererReturn); + mockUseUserInfo.mockReturnValue(defaultUseUserInfoReturn); + mockUseCasesPermissions.mockReturnValue(defaultUseCasesPermissionsReturn); + }); + + it('should render default page', () => { + const result = render( + + + + + + ); + + expect(result.queryByTestId('detectionResponsePage')).toBeInTheDocument(); + expect(result.queryByTestId('mock_globalDatePicker')).toBeInTheDocument(); + expect(result.queryByTestId('detectionResponseSections')).toBeInTheDocument(); + expect(result.queryByTestId('detectionResponseLoader')).not.toBeInTheDocument(); + expect(result.getByText('Detection & Response')).toBeInTheDocument(); + }); + + it('should render landing page if index not exist', () => { + mockUseSourcererDataView.mockReturnValue({ + ...defaultUseSourcererReturn, + indicesExist: false, + }); + + const result = render( + + + + + + ); + + expect(result.getByTestId('siem-landing-page')).toBeInTheDocument(); + expect(result.queryByTestId('detectionResponsePage')).not.toBeInTheDocument(); + expect(result.queryByTestId('mock_globalDatePicker')).not.toBeInTheDocument(); + }); + + it('should render loader if sourcerer is loading', () => { + mockUseSourcererDataView.mockReturnValue({ + ...defaultUseSourcererReturn, + loading: true, + }); + + const result = render( + + + + + + ); + + expect(result.queryByTestId('detectionResponsePage')).toBeInTheDocument(); + expect(result.queryByTestId('mock_globalDatePicker')).toBeInTheDocument(); + expect(result.queryByTestId('detectionResponseLoader')).toBeInTheDocument(); + expect(result.queryByTestId('detectionResponseSections')).not.toBeInTheDocument(); + }); + + it('should not render alerts data sections if user has not index read permission', () => { + mockUseUserInfo.mockReturnValue({ + ...defaultUseUserInfoReturn, + hasIndexRead: false, + }); + + const result = render( + + + + + + ); + + expect(result.queryByTestId('detectionResponsePage')).toBeInTheDocument(); + expect(result.queryByTestId('mock_RuleAlertsTable')).not.toBeInTheDocument(); + // TODO: assert other alert sections are not in the document + // TODO: assert cases sections are in the document + }); + + it('should not render alerts data sections if user has not kibana read permission', () => { + mockUseUserInfo.mockReturnValue({ + ...defaultUseUserInfoReturn, + canUserREAD: false, + }); + + const result = render( + + + + + + ); + + expect(result.queryByTestId('detectionResponsePage')).toBeInTheDocument(); + expect(result.queryByTestId('mock_RuleAlertsTable')).not.toBeInTheDocument(); + // TODO: assert all alert sections are not in the document + // TODO: assert all cases sections are in the document + }); + + it('should not render cases data sections if user has not cases read permission', () => { + mockUseCasesPermissions.mockReturnValue({ read: false }); + + const result = render( + + + + + + ); + + expect(result.queryByTestId('detectionResponsePage')).toBeInTheDocument(); + expect(result.queryByTestId('mock_RuleAlertsTable')).toBeInTheDocument(); + // TODO: assert all alert sections are in the document + // TODO: assert all cases sections are not in the document + }); + + it('should render page permissions message if user has any read permission', () => { + mockUseCasesPermissions.mockReturnValue({ read: false }); + mockUseUserInfo.mockReturnValue({ + ...defaultUseUserInfoReturn, + hasIndexRead: false, + }); + + const result = render( + + + + + + ); + + expect(result.queryByTestId('detectionResponsePage')).not.toBeInTheDocument(); + expect(result.queryByTestId('noPermissionPage')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/overview/pages/detection_response.tsx b/x-pack/plugins/security_solution/public/overview/pages/detection_response.tsx index f3dc4d400c9c2..719cb88b62043 100644 --- a/x-pack/plugins/security_solution/public/overview/pages/detection_response.tsx +++ b/x-pack/plugins/security_solution/public/overview/pages/detection_response.tsx @@ -4,89 +4,92 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useEffect, useMemo, useState } from 'react'; -import { FormattedRelative } from '@kbn/i18n-react'; -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import React, { useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; import { SiemSearchBar } from '../../common/components/search_bar'; import { SecuritySolutionPageWrapper } from '../../common/components/page_wrapper'; -// import { useGlobalTime } from '../../common/containers/use_global_time'; - import { SpyRoute } from '../../common/utils/route/spy_routes'; import { SecurityPageName } from '../../app/types'; import { useSourcererDataView } from '../../common/containers/sourcerer'; -import { useAlertsPrivileges } from '../../detections/containers/detection_engine/alerts/use_alerts_privileges'; +import { useUserInfo } from '../../detections/components/user_info'; import { HeaderPage } from '../../common/components/header_page'; -import { useShallowEqualSelector } from '../../common/hooks/use_selector'; -import { DETECTION_RESPONSE_TITLE, UPDATED, UPDATING } from './translations'; -import { inputsSelectors } from '../../common/store/selectors'; +import { useKibana, useGetUserCasesPermissions } from '../../common/lib/kibana'; +import { RuleAlertsTable } from '../components/detection_response/rule_alerts_table'; import { LandingPageComponent } from '../../common/components/landing_page'; +import * as i18n from './translations'; +import { EmptyPage } from '../../common/components/empty_page'; -const DetectionResponseComponent = () => { - const getGlobalQuery = useMemo(() => inputsSelectors.globalQuery(), []); - const { indicesExist, indexPattern, loading: isSourcererLoading } = useSourcererDataView(); - const [updatedAt, setUpdatedAt] = useState(Date.now()); - // TODO: link queries with global time queries - // const { to, from, deleteQuery, setQuery, isInitializing } = useGlobalTime(); - - const queriesLoading: boolean = useShallowEqualSelector( - (state) => !!getGlobalQuery(state).find((query) => query.loading) +const NoPrivilegePage: React.FC = () => { + const { docLinks } = useKibana().services; + const emptyPageActions = useMemo( + () => ({ + feature: { + icon: 'documents', + label: i18n.GO_TO_DOCUMENTATION, + url: `${docLinks.links.siem.privileges}`, + target: '_blank', + }, + }), + [docLinks] ); - - useEffect(() => { - if (!queriesLoading) { - setUpdatedAt(Date.now()); - } - }, [queriesLoading]); - - const showUpdating = useMemo( - () => queriesLoading || isSourcererLoading, - [queriesLoading, isSourcererLoading] + return ( + ); +}; - const { hasIndexRead, hasKibanaREAD } = useAlertsPrivileges(); +const DetectionResponseComponent = () => { + const { indicesExist, indexPattern, loading: isSourcererLoading } = useSourcererDataView(); + const { signalIndexName, canUserREAD, hasIndexRead } = useUserInfo(); + const canReadCases = useGetUserCasesPermissions()?.read; + const canReadAlerts = canUserREAD && hasIndexRead; + + if (!canReadAlerts && !canReadCases) { + return ; + } return ( <> {indicesExist ? ( <> - - + + - - {showUpdating ? ( - {UPDATING} - ) : ( - - <>{UPDATED} - + + {isSourcererLoading ? ( + + ) : ( + + + + {canReadAlerts && {'[alerts chart]'}} + {canReadCases && {'[cases chart]'}} + - )} - - - - + {canReadAlerts && ( - {hasIndexRead && hasKibanaREAD && <>{'[alerts charts]'}} + - {'[cases chart]'} - - + )} - {'[rules table]'} - {'[cases table]'} - - - {'[hosts table]'} - {'[users table]'} - - - + {canReadCases && {'[cases table]'}} + + {canReadAlerts && ( + + + {'[hosts table]'} + {'[users table]'} + + + )} + + )} ) : ( diff --git a/x-pack/plugins/security_solution/public/overview/pages/translations.ts b/x-pack/plugins/security_solution/public/overview/pages/translations.ts index b45216f2f528e..414326dd0539b 100644 --- a/x-pack/plugins/security_solution/public/overview/pages/translations.ts +++ b/x-pack/plugins/security_solution/public/overview/pages/translations.ts @@ -57,14 +57,25 @@ export const VIEW_EVENTS = i18n.translate('xpack.securitySolution.overview.viewE export const DETECTION_RESPONSE_TITLE = i18n.translate( 'xpack.securitySolution.detectionResponse.pageTitle', { - defaultMessage: 'Detection & Response - SOC', + defaultMessage: 'Detection & Response', + } +); +export const NO_PERMISSIONS_MSG = i18n.translate( + 'xpack.securitySolution.detectionResponse.noPagePermissionsMessage', + { + defaultMessage: + 'To view this page you must update privileges. For more information, contact your Kibana administrator.', + } +); +export const NO_PERMISSIONS_TITLE = i18n.translate( + 'xpack.securitySolution.detectionResponse.noPermissionsTitle', + { + defaultMessage: 'Privileges required', + } +); +export const GO_TO_DOCUMENTATION = i18n.translate( + 'xpack.securitySolution.detectionResponse.goToDocumentationButton', + { + defaultMessage: 'View documentation', } ); - -export const UPDATING = i18n.translate('xpack.securitySolution.detectionResponse.updating', { - defaultMessage: 'Updating...', -}); - -export const UPDATED = i18n.translate('xpack.securitySolution.detectionResponse.updated', { - defaultMessage: 'Updated', -}); From 4d50cb31ebcd54522ca49f91e86079e6c87a70d3 Mon Sep 17 00:00:00 2001 From: Or Ouziel Date: Thu, 14 Apr 2022 11:22:39 +0300 Subject: [PATCH 050/305] [Cloud Posture] fix findings flaky test (#129876) --- .../public/pages/findings/findings_table.test.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_table.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_table.test.tsx index 2d7955dfd0213..55c8a4a703867 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_table.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_table.test.tsx @@ -14,7 +14,7 @@ import type { CspFinding } from './types'; const chance = new Chance(); -const getFakeFindings = (): CspFinding & { id: string } => ({ +const getFakeFindings = (name: string): CspFinding & { id: string } => ({ id: chance.word(), result: { evaluation: chance.weighted(['passed', 'failed'], [0.5, 0.5]), @@ -23,7 +23,7 @@ const getFakeFindings = (): CspFinding & { id: string } => ({ }, }, rule: { - name: chance.word(), + name, description: chance.paragraph(), impact: chance.word(), remediation: chance.word(), @@ -54,8 +54,7 @@ const getFakeFindings = (): CspFinding & { id: string } => ({ type TableProps = PropsOf; -// FLAKY: https://github.com/elastic/kibana/issues/126664 -describe.skip('', () => { +describe('', () => { it('renders the zero state when status success and data has a length of zero ', async () => { const props: TableProps = { status: 'success', @@ -73,7 +72,8 @@ describe.skip('', () => { }); it('renders the table with provided items', () => { - const data = Array.from({ length: 10 }, getFakeFindings); + const names = chance.unique(chance.sentence, 10); + const data = names.map(getFakeFindings); const props: TableProps = { status: 'success', From adbdf274ceae83693b33b7ad066fa1894a26ac64 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 14 Apr 2022 10:47:55 +0200 Subject: [PATCH 051/305] [Uptime] Update query index pattern (#130043) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/uptime/common/constants/ui.ts | 2 ++ .../hooks/use_inline_errors.test.tsx | 3 +-- .../monitor_management/hooks/use_inline_errors.ts | 9 ++++----- .../hooks/use_inline_errors_count.test.tsx | 3 +-- .../hooks/use_inline_errors_count.ts | 9 ++++----- .../browser/browser_test_results.test.tsx | 4 ++-- .../browser/use_browser_run_once_monitors.ts | 12 ++++-------- .../simple/simple_test_results.test.tsx | 4 ++-- .../simple/use_simple_run_once_monitors.ts | 11 ++++------- .../lib/synthetics_service/hydrate_saved_object.ts | 3 ++- 10 files changed, 26 insertions(+), 34 deletions(-) diff --git a/x-pack/plugins/uptime/common/constants/ui.ts b/x-pack/plugins/uptime/common/constants/ui.ts index 155c6ea80242f..a736e3296161e 100644 --- a/x-pack/plugins/uptime/common/constants/ui.ts +++ b/x-pack/plugins/uptime/common/constants/ui.ts @@ -82,3 +82,5 @@ export const FILTER_FIELDS = { LOCATION: 'observer.geo.name', TYPE: 'monitor.type', }; + +export const SYNTHETICS_INDEX_PATTERN = 'synthetics-*'; diff --git a/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors.test.tsx index 649b009687e33..28d0bdd0eff86 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors.test.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors.test.tsx @@ -63,10 +63,9 @@ describe('useInlineErrors', function () { size: 1000, sort: [{ '@timestamp': 'desc' }], }, - index: 'heartbeat-8*,heartbeat-7*,synthetics-*', + index: 'synthetics-*', }, [ - 'heartbeat-8*,heartbeat-7*,synthetics-*', { error: { monitorList: null, serviceLocations: null, enablement: null }, enablement: null, diff --git a/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors.ts b/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors.ts index 3753d95b8e858..ce4db22c37587 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors.ts +++ b/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors.ts @@ -8,12 +8,13 @@ import { useSelector } from 'react-redux'; import moment from 'moment'; import { useMemo } from 'react'; -import { monitorManagementListSelector, selectDynamicSettings } from '../../../state/selectors'; +import { monitorManagementListSelector } from '../../../state/selectors'; import { useEsSearch } from '../../../../../observability/public'; import { Ping } from '../../../../common/runtime_types'; import { EXCLUDE_RUN_ONCE_FILTER } from '../../../../common/constants/client_defaults'; import { useUptimeRefreshContext } from '../../../contexts/uptime_refresh_context'; import { useInlineErrorsCount } from './use_inline_errors_count'; +import { SYNTHETICS_INDEX_PATTERN } from '../../../../common/constants'; const sortFieldMap: Record = { name: 'monitor.name', @@ -71,8 +72,6 @@ export function useInlineErrors({ }) { const monitorList = useSelector(monitorManagementListSelector); - const { settings } = useSelector(selectDynamicSettings); - const { lastRefresh } = useUptimeRefreshContext(); const configIds = monitorList.list.monitors.map((monitor) => monitor.id); @@ -81,7 +80,7 @@ export function useInlineErrors({ const { data, loading } = useEsSearch( { - index: doFetch ? settings?.heartbeatIndices : '', + index: doFetch ? SYNTHETICS_INDEX_PATTERN : '', body: { size: 1000, query: { @@ -93,7 +92,7 @@ export function useInlineErrors({ sort: [{ [sortFieldMap[sortField]]: sortOrder }], }, }, - [settings?.heartbeatIndices, monitorList, lastRefresh, doFetch, sortField, sortOrder], + [monitorList, lastRefresh, doFetch, sortField, sortOrder], { name: 'getInvalidMonitors' } ); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors_count.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors_count.test.tsx index e973e3dd1a7f1..64926b9a6bef4 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors_count.test.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors_count.test.tsx @@ -62,10 +62,9 @@ describe('useInlineErrorsCount', function () { }, size: 0, }, - index: 'heartbeat-8*,heartbeat-7*,synthetics-*', + index: 'synthetics-*', }, [ - 'heartbeat-8*,heartbeat-7*,synthetics-*', { error: { monitorList: null, serviceLocations: null, enablement: null }, list: { monitors: [], page: 1, perPage: 10, total: null, syncErrors: null }, diff --git a/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors_count.ts b/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors_count.ts index adda7c433b29c..0cad414ca7124 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors_count.ts +++ b/x-pack/plugins/uptime/public/components/monitor_management/hooks/use_inline_errors_count.ts @@ -7,21 +7,20 @@ import { useSelector } from 'react-redux'; import { useMemo } from 'react'; -import { monitorManagementListSelector, selectDynamicSettings } from '../../../state/selectors'; +import { monitorManagementListSelector } from '../../../state/selectors'; import { useEsSearch } from '../../../../../observability/public'; import { useUptimeRefreshContext } from '../../../contexts/uptime_refresh_context'; import { getInlineErrorFilters } from './use_inline_errors'; +import { SYNTHETICS_INDEX_PATTERN } from '../../../../common/constants'; export function useInlineErrorsCount() { const monitorList = useSelector(monitorManagementListSelector); - const { settings } = useSelector(selectDynamicSettings); - const { lastRefresh } = useUptimeRefreshContext(); const { data, loading } = useEsSearch( { - index: settings?.heartbeatIndices, + index: SYNTHETICS_INDEX_PATTERN, body: { size: 0, query: { @@ -36,7 +35,7 @@ export function useInlineErrorsCount() { }, }, }, - [settings?.heartbeatIndices, monitorList, lastRefresh], + [monitorList, lastRefresh], { name: 'getInvalidMonitorsCount' } ); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.test.tsx index d164e19705838..edeb0c57eb31d 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.test.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.test.tsx @@ -47,8 +47,8 @@ describe('BrowserTestRunResult', function () { }, sort: [{ '@timestamp': 'desc' }], }, - index: 'heartbeat-8*,heartbeat-7*,synthetics-*', - size: 10, + index: 'synthetics-*', + size: 1000, }, }, {} diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.ts b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.ts index 04605373f369e..18a523b95fd55 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.ts +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.ts @@ -4,15 +4,13 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import { useSelector } from 'react-redux'; import { useEffect, useState } from 'react'; -import { selectDynamicSettings } from '../../../../state/selectors'; import { JourneyStep } from '../../../../../common/runtime_types'; import { createEsParams, useEsSearch, useFetcher } from '../../../../../../observability/public'; import { useTickTick } from '../use_tick_tick'; import { fetchJourneySteps } from '../../../../state/api/journey'; import { isStepEnd } from '../../../synthetics/check_steps/steps_list'; +import { SYNTHETICS_INDEX_PATTERN } from '../../../../../common/constants'; export const useBrowserEsResults = ({ configId, @@ -23,11 +21,9 @@ export const useBrowserEsResults = ({ testRunId?: string; lastRefresh: number; }) => { - const { settings } = useSelector(selectDynamicSettings); - return useEsSearch( createEsParams({ - index: settings?.heartbeatIndices, + index: SYNTHETICS_INDEX_PATTERN, body: { sort: [ { @@ -60,9 +56,9 @@ export const useBrowserEsResults = ({ }, }, }, - size: 10, + size: 1000, }), - [configId, settings?.heartbeatIndices, lastRefresh], + [configId, lastRefresh], { name: 'TestRunData' } ); }; diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.test.tsx index 1d5dfef8a67e7..da27837a34e8c 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.test.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.test.tsx @@ -39,8 +39,8 @@ describe('SimpleTestResults', function () { }, sort: [{ '@timestamp': 'desc' }], }, - index: 'heartbeat-8*,heartbeat-7*,synthetics-*', - size: 10, + index: 'synthetics-*', + size: 1000, }, }, {} diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/use_simple_run_once_monitors.ts b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/use_simple_run_once_monitors.ts index fc43844103f25..21ce49b22b8fe 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/use_simple_run_once_monitors.ts +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/use_simple_run_once_monitors.ts @@ -5,12 +5,11 @@ * 2.0. */ -import { useSelector } from 'react-redux'; import { useMemo } from 'react'; -import { selectDynamicSettings } from '../../../../state/selectors'; import { Ping } from '../../../../../common/runtime_types'; import { createEsParams, useEsSearch } from '../../../../../../observability/public'; import { useTickTick } from '../use_tick_tick'; +import { SYNTHETICS_INDEX_PATTERN } from '../../../../../common/constants'; export const useSimpleRunOnceMonitors = ({ configId, @@ -21,11 +20,9 @@ export const useSimpleRunOnceMonitors = ({ }) => { const { refreshTimer, lastRefresh } = useTickTick(2 * 1000, false); - const { settings } = useSelector(selectDynamicSettings); - const { data, loading } = useEsSearch( createEsParams({ - index: settings?.heartbeatIndices, + index: SYNTHETICS_INDEX_PATTERN, body: { sort: [ { @@ -58,9 +55,9 @@ export const useSimpleRunOnceMonitors = ({ }, }, }, - size: 10, + size: 1000, }), - [configId, settings?.heartbeatIndices, lastRefresh], + [configId, lastRefresh], { name: 'TestRunData' } ); diff --git a/x-pack/plugins/uptime/server/lib/synthetics_service/hydrate_saved_object.ts b/x-pack/plugins/uptime/server/lib/synthetics_service/hydrate_saved_object.ts index 6002d1bd8f1ec..d595bfaa5400e 100644 --- a/x-pack/plugins/uptime/server/lib/synthetics_service/hydrate_saved_object.ts +++ b/x-pack/plugins/uptime/server/lib/synthetics_service/hydrate_saved_object.ts @@ -10,6 +10,7 @@ import { UptimeESClient } from '../lib'; import { UptimeServerSetup } from '../adapters'; import { DecryptedSyntheticsMonitorSavedObject } from '../../../common/types'; import { SyntheticsMonitor, MonitorFields, Ping } from '../../../common/runtime_types'; +import { SYNTHETICS_INDEX_PATTERN } from '../../../common/constants'; export const hydrateSavedObjects = async ({ monitors, @@ -125,7 +126,7 @@ const fetchSampleMonitorDocuments = async (esClient: UptimeESClient, configIds: }, }, 'getHydrateQuery', - 'synthetics-*' + SYNTHETICS_INDEX_PATTERN ); return data.body.hits.hits.map( From 37ebf93c027f5159513b9213171d638f9360e6af Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Thu, 14 Apr 2022 12:11:59 +0200 Subject: [PATCH 052/305] [Discover] Unskip security tests (#130083) --- .../overview/__snapshots__/overview.test.tsx.snap | 1 + .../public/components/overview/overview.tsx | 1 + .../discover/feature_controls/discover_security.ts | 3 +-- .../discover/feature_controls/discover_spaces.ts | 12 ++++++------ 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap b/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap index 1a52bf05b9238..37bb37a21c201 100644 --- a/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap +++ b/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap @@ -682,6 +682,7 @@ exports[`Overview when there is no user data view 1`] = ` Object { "actions": Object { "elasticAgent": Object { + "data-test-subj": "kbnOverviewAddIntegrations", "description": "Use Elastic Agent or Beats to collect data and build out Analytics solutions.", "title": "Add integrations", }, diff --git a/src/plugins/kibana_overview/public/components/overview/overview.tsx b/src/plugins/kibana_overview/public/components/overview/overview.tsx index b387715710ce4..9d403ac167e6b 100644 --- a/src/plugins/kibana_overview/public/components/overview/overview.tsx +++ b/src/plugins/kibana_overview/public/components/overview/overview.tsx @@ -98,6 +98,7 @@ export const Overview: FC = ({ newsFetchResult, solutions, features }) => defaultMessage: 'Use Elastic Agent or Beats to collect data and build out Analytics solutions.', }), + 'data-test-subj': 'kbnOverviewAddIntegrations', }, }, docsLink: docLinks.links.kibana.guide, diff --git a/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts b/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts index 7032f25debb8f..0a12de3fb44d6 100644 --- a/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts +++ b/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts @@ -31,8 +31,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.timePicker.setDefaultAbsoluteRange(); } - // Failing: See https://github.com/elastic/kibana/issues/106631 - describe.skip('discover feature controls security', () => { + describe('discover feature controls security', () => { before(async () => { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/discover/feature_controls/security' diff --git a/x-pack/test/functional/apps/discover/feature_controls/discover_spaces.ts b/x-pack/test/functional/apps/discover/feature_controls/discover_spaces.ts index 936dd49255205..9adcfc552031c 100644 --- a/x-pack/test/functional/apps/discover/feature_controls/discover_spaces.ts +++ b/x-pack/test/functional/apps/discover/feature_controls/discover_spaces.ts @@ -28,14 +28,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.timePicker.setDefaultAbsoluteRange(); } - // Failing: See https://github.com/elastic/kibana/issues/113067 - describe.skip('spaces', () => { + describe('spaces', () => { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); }); - // FLAKY: https://github.com/elastic/kibana/issues/60559 - describe.skip('space with no features disabled', () => { + describe('space with no features disabled', () => { before(async () => { // we need to load the following in every situation as deleting // a space deletes all of the associated saved objects @@ -174,13 +172,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await spacesService.delete('custom_space_no_index_patterns'); }); - it('Navigates to Kibana home rather than index pattern management when no index patterns exist', async () => { + it('Navigates to Kibana Analytics overview when no data views exist', async () => { await PageObjects.common.navigateToUrl('discover', '', { basePath: '/s/custom_space_no_index_patterns', ensureCurrentUrl: false, shouldUseHashForSubUrl: false, }); - await testSubjects.existOrFail('homeApp', { timeout: config.get('timeouts.waitFor') }); + await testSubjects.existOrFail('kbnOverviewAddIntegrations', { + timeout: config.get('timeouts.waitFor'), + }); }); }); }); From 6dbe26f2f740ab3d43bacd5a5e732a06fa599847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20G=C3=B3mez?= Date: Thu, 14 Apr 2022 13:04:56 +0200 Subject: [PATCH 053/305] [Unified observability] Track disabled features when loading overview page (#130230) --- .../pages/overview/old_overview_page.tsx | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/observability/public/pages/overview/old_overview_page.tsx b/x-pack/plugins/observability/public/pages/overview/old_overview_page.tsx index f396f594e0779..237909d94028e 100644 --- a/x-pack/plugins/observability/public/pages/overview/old_overview_page.tsx +++ b/x-pack/plugins/observability/public/pages/overview/old_overview_page.tsx @@ -19,7 +19,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useMemo, useRef, useCallback, useState } from 'react'; +import React, { useMemo, useRef, useCallback, useState, useEffect } from 'react'; import { observabilityFeatureId } from '../../../common'; import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; import { useTrackPageview, useUiTracker } from '../..'; @@ -52,6 +52,9 @@ interface Props { routeParams: RouteParams<'/overview'>; } export type BucketSize = ReturnType; + +const CAPABILITIES_KEYS = ['logs', 'infrastructure', 'apm', 'uptime']; + function calculateBucketSize({ start, end }: { start?: number; end?: number }) { if (start && end) { return getBucketSize({ start, end, minInterval: '60s' }); @@ -72,9 +75,14 @@ export function OverviewPage({ routeParams }: Props) { const [isFlyoutVisible, setIsFlyoutVisible] = useState(false); const indexNames = useAlertIndexNames(); - const { cases, docLinks, http } = useKibana().services; - const { ObservabilityPageTemplate, config } = usePluginContext(); + const { + cases, + docLinks, + http, + application: { capabilities }, + } = useKibana().services; + const { ObservabilityPageTemplate, config } = usePluginContext(); const { relativeStart, relativeEnd, absoluteStart, absoluteEnd } = useDatePickerContext(); const { data: newsFeed } = useFetcher(() => getNewsFeed({ http }), [http]); @@ -112,6 +120,20 @@ export function OverviewPage({ routeParams }: Props) { const CasesContext = cases.ui.getCasesContext(); const userPermissions = useGetUserCasesPermissions(); + useEffect(() => { + if (hasAnyData !== true) { + return; + } + + CAPABILITIES_KEYS.forEach((feature) => { + if (capabilities[feature].show === false) { + trackMetric({ + metric: `oblt_disabled_feature_${feature === 'infrastructure' ? 'metrics' : feature}`, + }); + } + }); + }, [capabilities, hasAnyData, trackMetric]); + if (hasAnyData === undefined) { return ; } From 9fb1b0672f348a529987e51ebd3ebfed4363bed8 Mon Sep 17 00:00:00 2001 From: Daniel Mitterdorfer Date: Thu, 14 Apr 2022 13:22:21 +0200 Subject: [PATCH 054/305] Add a performance test for Discover with many fields (#129464) * Add a dataset with many fields for functional tests With this commit we add a new dataset that can be used in functional tests. The dataset is contains 50 documents based on the Elasticsearch indices stats API of an empty cluster. Each document defines around 5000 properties. It can be used to check rendering performance e.g. in the discover view. Closes #126687 * Add performance test for many fields * [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' * Add to hourly tests Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../functional/performance_playwright.sh | 4 + .../es_archiver/many_fields/data.json.gz | Bin 0 -> 990533 bytes .../es_archiver/many_fields/mappings.json | 38111 ++++++++++++++++ .../kbn_archiver/many_fields_data_view.json | 18 + .../performance/tests/playwright/index.ts | 1 + .../tests/playwright/many_fields_discover.ts | 56 + 6 files changed, 38190 insertions(+) create mode 100644 test/functional/fixtures/es_archiver/many_fields/data.json.gz create mode 100644 test/functional/fixtures/es_archiver/many_fields/mappings.json create mode 100644 test/functional/fixtures/kbn_archiver/many_fields_data_view.json create mode 100644 x-pack/test/performance/tests/playwright/many_fields_discover.ts diff --git a/.buildkite/scripts/steps/functional/performance_playwright.sh b/.buildkite/scripts/steps/functional/performance_playwright.sh index d739f136992e7..5f5eafb827218 100644 --- a/.buildkite/scripts/steps/functional/performance_playwright.sh +++ b/.buildkite/scripts/steps/functional/performance_playwright.sh @@ -20,7 +20,11 @@ sleep 120 cd "$XPACK_DIR" +<<<<<<< HEAD +journeys=("ecommerce_dashboard" "flight_dashboard" "web_logs_dashboard" "promotion_tracking_dashboard" "many_fields_discover") +======= journeys=("login" "ecommerce_dashboard" "flight_dashboard" "web_logs_dashboard" "promotion_tracking_dashboard") +>>>>>>> origin/main for i in "${journeys[@]}"; do echo "JOURNEY[${i}] is running" diff --git a/test/functional/fixtures/es_archiver/many_fields/data.json.gz b/test/functional/fixtures/es_archiver/many_fields/data.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..78c564e96da2ac06ab53824993507da1a9ab8dd5 GIT binary patch literal 990533 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 q9?*+X4 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 lKww8N~EwhJP!7 zGGr4;b|~^&o^2i!nk-uENfXtRDF7f2L@nJ~z#oU35w6S#>93NK`XMmOtyw~wq-&`b zCyV7vP+x#5G0`Z8D%H>6Pul$N=?`ud!MPSM@$DE5s79zCaw&pgfA)CjE~+5m%5^A- zJWuy%r#$S8zrT}T-k={d{8_yH@C?RO9L*0kHq2fb0~1S6EfQm-U^B`Zme9PJeiH#M zM$)qYiXh#>JW;6`*@C!V(-lb6JXzpp0m9a9^{CL}8x_t0PI>hzWtm9x_Gj;in0&qq zIb|7K39 z4hJ}qNOKX_%+E-P2z<-Nd6Y;*Wr7}op#&pP9$~5|(iFNrSpFl)-u*!!xfUS$#?ajH zE2t&ZJ9>lQ&GXV>=V{u1hma6aZgQ+lIV?_y9e53leTugf;<1;XT|d7m-9q3u>fej^ zycn)d1l8|2KcA|dP5F8TS&0`OYBTBQu9l7MZ9g`8-Cf`JCMExMAX+P;#$74njAC)m zYcZEYn87LiN30om(hPkPYYCsknwj9YC)H*=3$VFQV(sRWSbK6@*#9Kfw*E(~)qwyi z?FcfYP5A7zWgy6&=`1QpB%bWocuf;o0ILSbT~+_gUG4v0?rJ$8ceP7f6QU_2qh8-5 zMQU>H#2XH6x$PKFZjO152!zV;S0!&{-lPzuEtpWO!`+AL6L#enpF-g}FL; zkxm>IL6MA|uYQAuns~~QA2W)UkwRO<{FH5wldffEr_+=7ig8_%MNH)Eb?_DU2JXfW z>R}Gj{g8UPrfw{}Tlg!-n1`u{Oq@Vgn7lzY?Aq@swqOE~3lW zZk=kQ8!E!EF>BaiwhH`tL9W#2T@F~E_n3_Tk64Qkupap&*2+kkGHq)&B+#4hiu5|W zz35?I)+%8_yeK;f68Xva`uej3(fG~HvIxA&BRnH6O&4&rXODIY@mbDphnu56*4mN5 zU<<3-eT@jY)TZ3_|SjC8eg!F zFEv5CFLI(AJ;z0TgL&oyi^!+2=5pQ*5Z1Cjg|*3cuFKVYTbFa0-DXOBZVpZ5i#erE zo-NtmWK0nNlQ0OUD4HC(sS#HH3GME?uR`IpN%PuW9j$xQNweI`Kb^qe3xSl9b3IgP z_hMy$rxz^}Ko>@bve_+Yq(g_w=6So=T@M$dOgAxct-06xcwb)Lx={gqw3oP;oXtL= zzlm)BJGARA7u_ND!NdE0Sx+eI*25gbSq~C-GyQXV;z+4_dWSRkyVdOvhFAj=Uz{=Z zA#$Uv>pjC`9%Jjg1>Z=$&Bt)6B$)@j+yk6VJW0eXg6wb7djf~(Ich{$hv+UWw=iR> zhv-@yhv-yTZs0KfI>2t=pMTZ!L`Vk>(%CXcJVX~}gZjT;HV9VQ0`e8n(`-MlF|`cV z5jXjVyu-o9s3B zOL`eyFSm{c?-}j!&K_Rm_VTCXfft+u1JuF-tkOfzF@l)`&#?vuxd(&im->1ja3vNE z6cF)2zcGvC+-%P+KlX>I?!w z(Dv@I(lLL#*Nd*bt0%D=!9YUq)4W>B~<1+61}E6BD2 z+gx;pG}4ac7Lh#st?z~rQ&QQ0#awH_Phw4e&ja_S zV8mb>TF-6|U1|W@&{c#Ux@u2vloM#tp8Th*%@o^Dohrx3t|UyyT%@t2Sp?s2kUtR` zGJ3xu{^VVV^A*)hi9EEzSoE{Sz+#WS3D&m$)8D!+zd&0U&3FUGUPo4FLl;4-= zT9VFqYr{5~;I`yXqbD$%7zrbzA)`r^pA(GRmySU!=TvuKM=F2HtKJ_IGRONS?YOIy zWE`6g|4=`)uL%8@OR01*%caRdNo7I_dn7a61L=B*!8LZew1N44wY{s^>XftAygq@J z&VY(qjmluC^Ouo?;`BzTL=J9+Mv_4B0?cR*<-N+<lVYcf2^)SE0=R#5QhWB0F+IIaOA&YE2O4Q-0maXI~`wYJizDdATP@w!SJ_5 zj#?2UL-WzP89!#Yb`^T(<)nelfZG4nvY{6Ms}}nId&G8miTxKdUEFIQuy-+cwDR&z zin9lEuWT-#l5l6dJ@HQL=xLHY`@Zu{apfhmQ`h}z_iE$e=j6CX{r#!I?en*1^BdQpvA$?PX~)h`pEo`>^hVpDi&i zJ?8C$M`Gt+1+oMEJbCmD|8Bi$f+FX1h-FY11f$@hu)Y~=@nai}BP0`MtQOxBLuWHb zo!QjFO<>dZ_p<9;NMQ^%*NPni8&oIOXH&*%oA(f)M$jnVgWS0Zc4q>2mC~v=H<|9qJFPC& z*uFs@i!XKVHTJ|5O{+iNMJi=))(|67`%^w7amsR9DNVA22DzT>MH{pRQ!0aAJ_dp} zo~G~9Fko4)X~G#-^z#0}Xt4I7S4*VTvhU0jo6=aaick;+CdzAtQ(g;*G+EQ6muxeA zLp>otXGJ|_^fZU=fG$? zx~xdom-yDJVICL{M+FqAVU*Ok9W>QfXoa79qgq+^U zNJo~(FOckrE_xz)DM;=--+L8GDDYkWR585GWN=e(;Dw^D(;y4VC;>@I-0o2JdaI%3 ztq&H7Guj6HmuNHfpL!zORN>(?+vztD@1R2O&wAdrDY`J1l(8-}eT!Zw#Txn};vG1J zKJRx1gNw8LFTcc70|RXt3qIb- z!6WgK8ZXEOrsdia|0thkBl$UxQSaPjE@w8%Iuu-NA<^DXp&LC6EF{MMc9vf2kKo!l zoPcWKa{3;W_jgn(B7yeT?(tz$4Re%w6CSwpKp#MaJ-R0?YpU$5^qe8Q;7@(*8qBmT<1?5julrGQO#1 z1G#^Z$tp6Ow)R^q$cP6$clYjU{knaBw8Sn4VZrToV%~tOgpLUQ)h{&~j~7>U4pGv+ zKvraZ89EnDX;|Ewy}b60JsXc4Exf&=p~pKISKGnf#x=hf)^9?_#tH*3j4PO6nA4H9 zbTpb$jaQwxCXwHa5B1|_OX|36$H~%J*tZeUy2vP_>VwiHD&hokQ$j`zUA*ky2T7%w zyrmK2=~x&MDVBtHIcJRHnD@_g_2Oz-YFwMGQw`m98d3~{_!CkLTeC;U$S@OmmLcLT zo0Bf+UsfXhcikTe#gkyV$w?Jqe=#Mt?^fAU~?X%qP%DB zAL+sF(~KMLYxXQ|#M+}Fp$7q62&c$etVL1ED0q5Pu9fUUmx9tR1maMcI`k@_B&v#=^>X$>&z=56(eSpqhB znWZGofnDuL5W}|sl_*Y%RWaH@^5#9Bw(G)8R%%$9tD}@(QM7p-xN_#?jbo&!nu)?j zmL|F!BcL-7oN1{xtNqNd_*Y2dsdRa8q-pUiKBlrv@krDfn8FSjTtT&`(hjm1HStX2 z8s;ubv_f11u4pSJdBZHs;7zVYOBGwB4CAq-ngtghr{3Bpsq`vyf8*J;STD}ADozQa z*8hpgy(VVry3@Y2ddsQ8oX~BwOV+yH7A<={zAw$5y*#Yrr<%xhe5kLz&rdiaCC)et zi?vwP-+t6Kipx3{OjXbNP8{)yA&@ssXv+n!?oP^tP{^7=JNup_Asp+sKCy8lIKVh_ zz7%k1?OD#G*Uj&@Ez#V99La>cxbf_^z1!(ra0J?9tTW4QVHV$nDLwVcG``YYz*43Y zxV~

{aib)cjSo+>wKx7UKrqqai($AKy=M>?1q{gR9f?fy8JG1h8Xh#=NbNV{Y`V zQDq)^cu{NEOZ89SZ%a%od|Yqf;-V%4dlM*;W1`%8PY0L-VLL`u8r0n9`^lP&O}oAR zik{KoA|0>O*ZVuAux^d8uwt;#-i!UEwy@)3LsMK z%+4nx>FC$V%W?1qF#qUkz9pE&2dZY`5DIgeim0&pGfk5!Fui0i1%R%WcJv=zEgaC* zT>o!f&Ew7Jp4X@?FL0f=ED7Igek7$J6~((evkm(cYaFt}2$+VaQ!`#tS9)I{0bQ@6 zpj^v4EfF5~x;R?t$w9l#?ZaI~9hO^*Uf3W3IR^LHB4sK#)irs>HN^i4dh~0Ig$~H+ zLchq?mL5}JsC_!R1GiA9pgv+ma2CfHX%uMt9m*nyS_%iSCEbN*HcsJ~p6(h^7iu1t z(w~1|u^P)$xu%$oRtUylvTK`D>XGVEQdU+s9Dz&5PTqao&Yco?D^ICq!8DfRl&l%p zbI0G^UtS^EA|IchVJ^D4v@@z7o3m=fEd=?kRGOey8sJ<;9TlDy$9tk{hhI|>Zb9oB zVCb8_u8pZ$=V<(%35EZz!Qd$Jrf?>%g>`x|@HL#cut%sS_xHg*o}{TtrW%qwdquD( zR*SlccyEF_kMt`yL7&?zccl4aJ@ji^!?U}*V%{U>8)0(m9=Cd~gd1+SZ*(fxTJF02 zn45h5ddbH~xpP;MU_-@oTYQo3=<}&O`3t5w41_F(akluN@q3C0z8>QdX7WbePgf=k zruP9aeh|1kIcxML_l`vy1<()MPw;=Hgkcac@JKz>XL!!~r1n02GGs(2cTZX=?{Y?2;JrZ7; zyM(rIoph9>zg0loxbI@iPRPSkwt}>{v%SU5|LjPzy*1E4BMVv|D~_%lx9_)_B+S&@ zzh7XAc3F@aO+V}4k)eKgF{eY>VB%F+Ph}7XQjR+e1ESy^{)J|n^aU+MpnnZFi%E~q zEa&8xY*L_9N>ijA85*zw72t;>+Sl5@oC&bcAz~NCt?q7$5f^B*I+PM>y3NbZ4;W(id z2zbQ3zq%R_j`&Ac1N&E319rz+lPp5NMS$9rL%CwHJn=po=`NXp7;=yvL2Sa?h4UDl zSzQ+wZgOnG`VEG!>0{?HlDIi?-!{dj%Zn26$ofVzCK!DwQ8{oe#JITSHJ4(uxRP z0u@Io8J_I_;A+ls84g=A+9xYqjrS@^&R(b1-is)IaW&&) zrq+(x_|m9AzH^3o6+gTBAd+8p4?jYyayma<5C4&K(Pgt4Tdbf&&8)Qs62)~JpDNy? z5tddaStvIIKlFc6q$8Vpl^Pc3a>Aj@xcEUMZUihZFu_s`@ofmwJFMbCL8%d^Ll zJ-6p&@TVOnqE%r#G3KMOjP~$-t9kz35$Es;WnW&BGZxe1jipKno|!#PGNYmy*gYUOU^wr^Q4RPYd^N{@G76U>hXYlc%VsT+T2hKg9=YjyyeZO&b-$Ek^pDhnG)7abcD_bA~462#c(#sNucx;CYCrv z`_tE7ld+pwY@)29dN`ZO4ovsM{cTwz@_`*ot}4A8Y1}0Yaif5gCq3LTKxxHX8lG}! zNium*u$hXcZp!IACYo{3W(357D@J7=8*4`H8oS0prPk|tJwf>%m*Gw=z>H_&9+;R) zFw8)|_UzG*P^(yiGkT(q0KoE&vO9adYiV5`=rAePj2q=;aQpb94FMq6r+qR59t^c% zd6g;J4WkW}y`(AUYRns~XCUtb7|GxF;zW4g=i0a(7=RsT>?da5Yk!Q&oI_0&Y+O38 zjaqe6tlH4+PziiFQ-Kujh}VghAdX|$E-gfXi~-iR1QXF1WE1l&-_B1uJh_zk7G?7R ziQbJCc0b)*jC%H}6N7`6h$K(IkJYK*GW5fWY6dtxA0DmJd{o3`{8&c$toGa3P^fkn zf4+aEc(ZwsNcQ{xO7TRP)O8oHLOI587J#@KumBH;tF6Bm;Qb$5jRL#fb?yJc)zXx0 z)>)#=Gw)fy!<#UBxSVy_S59QPcVi<@w0UnfiEdr2rVrc8a=F^n{xX|W?BLx>{wrpf z0-}}+*jW4kKCoU{{QRJ&Qe&lWd`de3 zLln8gJM6X1`|0T$f5uIK39-EyB>6!;`((ut%b%$o&R}}W8!pCJ0~KGWQPsghrP#|o z!!#^=cA&T>!f5kqgfUX&UNvbiZ39{eJt51GRCGoBPNAV7+`#eRxk2tz-oVj+x`D$$ zXan{&0UJyHL1|Td!Kbj_Ds9%l+#q8S{eTi0ib`_FKD z@INfn?gAdrr=>{?lnE1^XL%H(SpG!NuA43|1R2nMNztMAlw> z#})fJW;!9-^MH}<3A}?H@?kM1g{kKh-olCJlvBOfvw@pumO7BnimYmAU}6V;FH9%V z(mpeyXmTmXZKXS`v&G0xaPj22!j!W1FJ3pHmwfyDa1VxOFUrchCi#1 zf4nl>aqi5cHXOn`XY{B6UrmIs@AL4DwM2iZ-d?gypMkW0kuDJ*>@DuK9^kYFScOf3><=Bz24a=wg-v>&_` z0ag4RZ!b$)D}}-?!>$L55W_Yt$su%(n`~w*`O?C1K~;m@#8BtRGKmnwNq@R1YCX^4*3ebj8n$XrcZ3sU(eAT`jCal#4ee@&$j+o>hkTULq#00OI%o}~`i!1(B#rjT zIN#7(ru5&OwggpXM7gQKQGLk+QqrzjjL`;8L)T3EOz6%hG0epj$T_1kK4qy~z>Dhf z4A(^;Rvo_Sj6_WFA7Ve4a!U)z$5M%jRPC$wt%y~xjSR+8gJ;RrQ~nMX^Nf(OU6d;K(S<|01iy&@B-60 z*JtQZhsa()p&X#biv+ekgmsYd_A<%dyZ^ zQbms_;Rvz+4_A|Y$JIRl!_}l5zhP2a|H`rUX$O4@@=p4PtEF582_+!ITm^N1PJ@YO zzu5U^CKQ5yvV+22OM=2aIQB$mMJ%3k3ab-7+|;T7Z(=_3Sc7H>-Vuvlizv=iUQdFm znz97M){5nG>U~Fe>vW?4ie`Yd5PW0#F$Fe{5PV`QpGMGasP{V;;K^F6ot5NSCzG)K z5{Q_27kRB+$O{O)R5mEkm?^-L8QQi^!9OOG^EZB-TTj*3rKplj1f@18izb5Ga^yf< zE$M%8wKX8FrU1m%sspzAJb}2{#{c4KZg0*1;cAxyK$xePf$yB3pw$cTd_7*=>H+9}a07In z-`-LI<<~kJX=Pm6uKn28Z!hP-5AU5&*{BHQh^~gThMXazNBbGW^uEW<4)g1={k13O zL@SJB=!Un^^S^z@2zW08Q!70+U5P216H`O%Zl0;uZN{UtUjQo0%aChaEiT+#8%xjd zcDvRQk8aIx&UR1!3`GmIs=s1Y)T9=J$cKN&C`oFfQkc2l8n1FeNC%b|4er%cp@ns9 zhw7`MSELVr`P(>LI{OqEmIiy5!B+>d5vWMLg(;qrEQBGlXgnitQFx=~7GkKnydo$L z8=C;>O&>d4cZR^lD+J0Zw~q?_U<9fz*r}tad)KK$5v3=Bjo%f@USl~p zdf}a9d`IxJ|J49*9!oWrV|b@J>fx-__pLLggKv@O(|$4-z>HiQj;TJoUrqaq68T1? zg23Ck0mYwW&}-wtl*m9E7DFSmw-E6QzM<2$V3fv*V5)0cyWo>+)@ll}z~iwpps!{v zj{okfy~W{(@?RGJFxh?xKxs9QPSrdgC2Vy}C3}GpRkaPMplo4puZZ~FV(^#VcokRF zS!8nUk3AEH<(jsBfhH=Mis(S1zin^#9%UoTtL1rfK+65@3rh`qa}-DpfA1->)z6;g zCm$zMN)3WuBm|vj@P*}=I#ShgBt;tVS;1U0DoTQdy(-czb{#3M&^Xd+_swt9wn;HH zEj?3AdMaX+%^}ow3OYD$v;D7T0f9LLT_$CvsTek2zl}M5_u}_XigrtRfX!&8oNlb& zK)C_D~luasQYiE(&->kMaa)~iTW zjiX0ZlKHc(-rF>yNK@2cxKAHta*xy)m5NysdH1G@k0O21WT-;utG{@d*eM#L* zZpvVcA)?ZfnO=h8_)uA^p~J{;BJJ>%xLzaftprPVN8XYQkx_q{;fpYHTc4TuVKqH( zih0Khn%jRbE8;|MlEji}Z5=@yGqF7mQhed6VI*SJJ?~dkwY}Q$;8~xU0csQZEK0S# zf;?M7_Oc9=qQI(Qrh$NG)4fJgeplp5fapb<^5?_{2PvijHu(){th%t3{aDCynSAQ{ z8ir4Mpk~3J#zvjbwo?OrT|)LXvE+kL$IP$r}<##f68B3$vFZ5&tDL^hOj^HnMjn zqQo)vMzc)KH!`m27bVFzo#&8UVNo~& zZi2&%GyB~ie#fgDdodb-CP=1G7WHne&1PU#@S;^aa&%8dx7K(&C6Wqf`puWN)C_iw zKyBhSGgR5i;EVf#&YtI%;S5SK!fy+a_OB}tj+0tN7EW>;i=TIJ?ULX!Ot4zgkyx;--`-m3bXrYzghPFm4+n$s>COIb5vnKKksW5G9I!Z%>pFNZGi z+XP3Zh&RvZJl;|(?nn5OshNmS`k}%)FXIk0TobfBI9Z{{RP&Z?w>oGGWV0=v5TdZV zrMc~s<9Q!RbvOW5-`?|q@Mnk$C~ioX?uI_8O{|n{%A|aWZct9GmcbqAI+*V>e=+)J ztnqvCWxQ4xcL!6PDLy`2kk4Iii6?!Z_R6@}0yg4!aBK{aKH6~MU2JXkbOrk(6OnZS zzd{pPk5kA9Alfx|*tr)YvnM#C-1-Ojfof!05LXPuiDr`H1 zBIoor#gR1Ik*wKm-(bRKaB$cHJ5siLkB%8RY;Cr!h&e8ec6yJZ4D(_Q;nn2Uj5Hfd ztYn>k!)2Z?Q++!K+S=>0Kll#8&<<#Av>xDv*KVz5seetSV#rd9usde>4_RyY#q@Rp zMAovk8~-6|6V3mSwbXye8tgl=hWL)Gr5!%~RorrVeZCLI0;aau%zWkR*U}h<>lJZ^ z>yMKL#z*R}3ta%Y2=GO!h(%P(kgnJ^W|nH zIb8oh5|ID&DyWpArOFKmTq>@qG6D)4;;<_{iGf zd3kge9t> z+zhhDm8@>!t%%t80-u_I7afjCQ`g@3$O3Fb1|n;~X1agK8XE$r^Zy`g!FAd_F)-YY zYCXhRt7UpIPk-Zsx(eAZEYBfe{g2xS(4c;{$1uv_kRuFBTP>hLy~j`lyEeIuQvA9? zef@m9f#RB9j&7B_9OI2-S0}ple%m{;mSW51qC_{vaM5*9IL~mwy(aJimdp>-i#ZFX zA6ifuO;hw?aKw^P7*`!qP#6U|K|sMF5WF_4;c*_UDpeY2OB0SYjIj$}{r^MO1cAuf zv=0zj8~6`d+h}I_hpc_(_u)LmM$2p#&DRO>%H~}QC-mlfLG1wWYcRyG$ad&h9NxhD z{TQy)krTOWnt4{S36}8vZ$7V zHt4@pd;3fhGNGE+WrRyVGK$(rs}ZkNT0I1Mb%9`cE~B5w2FA^aH>DFr01e~#bL|;&=tqPFL}0NM?v!3D?Ckr-m{&TGl{EA zCdERtKJx^>2LtTBQ}*(xh$tvbc2obAm`xm%?E`>&mL=q@~-7!f;B#4u&35h?U-<7qQcV*4`pR)E< zafUc42bC2OP>-4hrRS-^Ck@VzIZNrVl_WINX-)i+nuaBHIn5sV%a=&YS{M;9l1Cap z(@zDVFUR&zK7;QdErrtd(j9{BMNBIo-E=k;p3U)nnfp&!3ks-A4^ar*m;Ya7t@&M9 z>-oQwwd8-w+CrJea9XJ}v2g~=HamY_sqcB3A{$50mI7PIH@MMa0`GUzt;_p5O=D&< z88m$Lrw_snlI5-UP$)ff1``7QwOpRexIGTO2?P-P?9w}P%4{NUV zlOzzD=_^r2lbeO=ggBVeMS;qiv{Pm&rh@+s(m5=e@I5Y@dzQx8BA9Uf?FB7d0b0#PZ%B2I#;AYH8?AN1cx0 zuvxyn%LF{sk`qYuqb{74=s;x+;{PaX$HwhE!72=IJ>Eg}BlCggz|)OUH|KxK+Fsh} zB+UOPYeGO}E%X0RS$nSjf0VVEsSWu5x3c#5f0Q*nvHwR|JNT!pW&W?SW&l*y5P`~C zv08?^(?4ac66sx8n*l0o=Uc$k1?+q3LX@b?1em%Yy#uB$gk1lnE*`JmQx{>t)I~{H z)tnh==Rkb^>SfLDl+S*oG)hK9{(v505^`< zn=T!ko@1Ve&+uMa1Ec~Q!wh(zBYx2?e)2c(BEnM!e(qZmqrFeYo~D&E=i~ z6Avcvmg7S4gM`6q#-L^V4&LFlEDwtnkeAQZ8icBq!ye5!9wi5mgtS^o&3K&_OoEEe1BngfjnBsMPpni0bDcFzcr*xlmX_94)B9a#n2*MsijpF{`*};GEoK5HB7rQI>~dp4|L{*09+6g5ZH7Tai}i z|G;aoE^CW=#S1|_@330=PSuQ}NMb+H`!@tW27N9v`}>^I*k`uU!2d*V91n+uT8&ktNmtCcIf!I7p z!E0!)0>^78nw%Sqz`F}M`>iPYm+gyKE@--xJb7)IzH-Xf0i%G&BCR9ccKmS*n>Y&j zeYM#@GtvRr1wdg^c+pDU(nPCD=8E|2+^fM;AtvV8D&65 zXxzj>=%CfdAwlR=^7d|^Ec5pu;TK>`T?Mh>x=cAwQ6}wj_5?s^{i*V`ZMfy#N@ z_T8r~7xNR!ixXF(BR3rH^`nH$upMV2n4vW{eXGYx`h?;8nc0U6dbJl zv!=x@AI$OdOF!zmdMKBIPQ76F%Nh**#;|TNtdo=;a^Bl@BbzdhQ$t`4m)5ZkZMmC#eX3g*Pc#~CcwJi9rGGjoG$p*Zvpxz0FF&{FDGO&*^9&` zlPqNr7xpW-LhC5e?W_O^8=rZ6{DA<$QmD5Sn`Wnq1H{zQhH7r!`2&);!o1 z{zF6N*ESODBXF=b66e@2-G_)CZ@SVjcK&SyyFtbOWxLE@Qb#LOaAf=A`-Lv ztb*8qzu$QP$Ie{soFLEoJ82uCghy?-_1(>%UvmbPqD%1Phi>NSVa){ubYGg_@e!n7 z&z#wT8X1-WSHc!?&IDK=2|F0qT*14uMmyl!vHGyRCNvP1I@x^z$c@_RtbD=v1Z`B5 z&E4v)?QDY!Be?Z&y}o~Uts?3^v9Qkf;#~W(r`z#B``L)j@B1vM!M4jonKrqbC`-xP zsX|{=y-4VYkSA~vh?f;R7E<*M$cCObwl{aqhZX*}*IyHVP4{s#N8g?| z-kG(0-{^*juMvLM3)X@=Gj^_11>BDlbS4 zO@3k<`i+$D=-m8e-S8R-QH!{&EcgT0?CJFC<ZFq~Y09EBdFHbHg2zle%&iR^ZZD(j7t&nf z&*)R8Gy@Yfq)xc2w1@|;7m1mSf??_>w*N)7iNrTicZ`Jxy=y?QY6;qP*t)|FnI*xE zI1b5zQ<-R^(-?2@JP>Q76JykoR1P8Nk44TZcDQQHqH}Q{6{COL&G&8elgw0SH!pt81|7xu8<8v53m(80Gvl(CjzPaoBGhY5YQh+&){bspxEBz0$0Xm0mRdcb(GG!rB%-aF+E zmA^r^E~LhMrYP7XupfT#D0Vt1pZRp;&Jls>emGq1etkSV+RR;iCe)wl>RHv^++Wr@Wf&$ajX2vGooyaULeK8*W?u^&caL$QW`r~ z!xkeI0n8ilvdo;$@V8xAsgrLP)+}o$d?&ejCt_Z{-vNue+21?Ol zC0U$sDd0;+kwG0Kckb#jUi+Bm4XOS87SBmWgDd+*M43f6frVLJvea3(*2m5Qridtr z(xkquG>{TIf}EZKJ>_oKpKIdu}zg|eJVv#efz!q7IlpPE1k?RvWCn359&m{Pl=q;O(9HNG6E3{h!@NUD6^a8ZFPA$zF> z%(Rf)Udp#_&ni33IE{6G8XYw4`05;t>?o4`M$(g(%K~M)5gz7TCGj8qPPc(QgfU+S zyGA{B=rhy~L!eE^4bhBnCNl~^1?=Ne1LTI9LDF_snKFz-)9kBbGBM1?6?$g0aTl4! z^B4Jm4n-={=6|DjAIC$J(}m?t5ue+3<>?!T zCO6lEd%d!%$>W_;>X?7>-1-Z z3VCEA12T|Y#ZR9&6LPqmc?s;|`PoU*I0~`Oz~<=)X8oP6EnP77G5*@!iQE1fUdmxN zE01)op}zq;l$Pdc!?V+V;iz=V5Mr09#4Vl-pE2tzao8^U*)e?FJ(MR($jcFkm7xMH zlM7nB;C=nG!^~j=jCDh}joo~Q{;>6tZJm}U!0M z$MReERkUWPD~{&o{SxPee$0Q7Q-xPhNf%R#Ov{iAGvE2?mr}Q64Rr!RITdn*AO>Rp z_Y-|=RZ~zKtwnY4?^NS#I&qpY+qXv6X)7Ch&K4?(JkH`zzA}7mR?USI7}X}`LoC^= zsT%dYWcK^99M?nXoHyNrdj~PB$2Sf~ExQTy_Crao8w|VcxKFP zv}z&bYK@=Nd@$6i5K=|_q!{>%;t1hm2oxowAcrF%#Udd`B91=y3+?s&nAYE_*58WL zm*Hf3hH@SZsS|W|OV$}<{@zc?5$9@*^Ic!KGxKZz)~QDieQV}%0J??j2nS6D#Uusd z*EZ@T0V!_RD@U5dgWB&_K8q2+7MPqD z<(>3Ie}jkh27n7kTV;`7F#dh6hfAZl1MqW3Og$Q%=Y39&{5~fqlyL{=`Q*ZJVY9iF z53{+|+2b4BK&Fg=i@Mul8=yR$ct{uUO!xU#3S*Eh5U+&7c~?~9BIxj_{9PeVc1 zWZSc#X5O(sv<~fN6o{F}LD<+689m=5o4Xv6)Rtlcx@4ub*8cEr29U zw4sFY?Iv@@J1eUtas@o#wb*iX9Dj>G&bFn~g=oOV>@4!k?C55izPbL%aCQ9c^>x+{ zb3aQOudB+kp&x$52@h(;Y3*jQ$&%Z;Z%5WhRWEEw7j4F=-I>u6yGM8V48hN=g`n`$ zXQ>qv!)2LagfwucM7;Nzv_EhrZPyvVIf7K+;(R37wva%(@<>B6S?x)kbg;%zk1nOF zycTTWF8gVPo3ni6V1B$~zq|aURMzIFbx=<^fz@f`sTG$S!S-)A98s52g1;P|OOUYl z&ZJdxC-%mYFK(DwDC08Ci-Yq<+xL%1Hjna=2cp2OcmCvoLAKHC7(4`lJRxLrdzCX3N zpE-;6K4@9_x#7h>ahBoTbpQ9VzP80uyrbdu;P_~2O_ck6#R1#9s?iRkj_lvEhIJKM z%cbS>kM6#lH6Fw!brq76<<)as?y_@TW88)oY=j4r#&vuhmn_~|R%MRQAv48{gRX-# zNZ&d!A&~r$F+z6)3lA7^^a|e>)6M|5pQfcpCe`F3q0fcbYtf%)g^AV3ki{M3=0#Sads8;6=G z{S1KQ!)>1gKzbG859)0G6)k5JMJ$w^My-3K{|m1qYCPHoG1Yil^7*tP2Hz z%s03KOV49uDy(mq+;KLO}=D%(e7$rXgh;kK5pRcG-5tg<36Hv!~?DcK?pZ@DJqI8OZ}s`jK=Dtm@T=`A~2YNXd%J%hk5| zltOSlL#U=KaI%g+h(UV3jq+!0FJ>4A8QA>vAX0t`TBVZPX2bn;fbDx?p0kaG8{Lrc^7Q? ziRg~s#YG1cX7GX&l|Om;wI2#7+`K#v0FEHaDcq;iFhM!lIK@X~5HEwuFi(QOg_l(& z1o_qdCqMluL+T2NGO86%e7ad8`ODd#M(<~t@~mt=D6BmHG`aAL)$&+- z_|v6zGsFYiobA;@;R;=6gsX%xIk;dN~W`B|%PNF;ND& z#O>nKBD6__d|s59@5<2C(iSOc9Uz6f8?y$C>LhDaP4JPPz#dzU^qGl)aUgy_QV0E$ z0d;xdCF4Jh%X;AL!mQ;kOA+ofG8GB*}#gP=|qMk46JAj++@9g7xOMG!Ypz* zN(U~1d0)X^0QG7lFF#~9Kn0_(%jPo&qU=xOC9aCd^U|4z9sdVEf}h@+)w|0*4wrvgY-8YV@+~xbt)QF+wsmS#!%{0 zYID+oZZd+xT$TYLl0WaKq}X5%tXEHf*~`*=jh)H;!_s)q;Z%$F<+=(7R+KXcXg47; z49YDu1k6*z-WP$|_Gbe4d+$#=5118gZ?C62TgBIxivD%Zxm&-8p{-HOp14{yDIU~%E@IU86T9X*tV_c%F07DruEv6}T=xk2;DU{g z3*6fRH!S8;fQ^o7IdYB|;;Dw(8la;O)Kbx#jeb3rz-H01`4Uz}OAR*xM=#~VSr+kn z$%ybjvf8)MvM=pC{{LjPu}gV?>kS-u45~ z0K^CU3wBsg;BAYmI;c1JYZ57lx4Qv_f5(Bj@M0ka!F9o(O>6TXNDuB#7wo_{ec(uq zL$pon&J9h3_pdcU9XqNl6TLrf-ikmtHmcx354g61I^$W#dCE8hHhnsip}~UBHw*AQ zcbyv-6$c^2=*ATDqxWi}$#}@`L>3%`UCp4Sxjm=%cD$XfvAV((5~zieq6rubA5C!# zA02A+52`)rVcQ-@uA0biJop2@#!tZn&E>qG5QHBGl|!xs6W&h<@_gFy_HYYv9VtGr ziahS%HPpA-7dRG{bETJ;vZB8(1tYEd<{kow2+chja{5Jka{Hm#+WVc@hk?gGHC{jH znM4qmRJJVX);fIvrt)kH1eQt!pH|7mAGI&slksNFINuf|Jh&S1Bs|)~oy{wIn!k@D z{CJrCSuAb=8R=V|gCSuESg$-6J}>nzZ)>Z=MrH@osQ>%^b^b%(|*S> zdIgXs2x9Q82*6tuF?c5oG58l!I@4Bm0d){F&;rO9ECF@m7qI`m+X(Qfog^^xP3Vc@ zt3ra%0}TkIhlP(Y+q`F3q3-t6cR-^!I-OApWEyzJSY2u(!Cs_SKlyCd`tD^qzwS5|n%4?A-nh!e{I9gST^ImEuMhltF&q zh`#OU8JwZb^6CA-PmAD;Eao!SCxQQ-gjZ#k-hNBw$@I-wuYP#*^l-I%y6o%OX;T@9 zekDBRZ@qW69}#;p6P96kw!VKD>+kVD<#)c)d45KI(-`sQSqjQn?;buH)0Ux^rP4EK z9T?raF=n7p6=r&_k!AGSuNf)^O6Gs=bh``HYQ$b^0(AqS8Q^f zp6avcHbi0%K~;nJGhAHKSl7U%RT`p(@Y3tfMKH#FL|JieJ8 z)}|5&cwtnBnS=jK5r|>4R2X&~6H`-+_p3``C!9avC9d7OkYWo*KJBzFYgzSWgWaZ{=+&p!q|w9$)H^dyH+^YI?QpH6?dP7tN@diZ(R(Itb4M8~IppIZ$~&v^L%EHOaDo zH#`rdz!Qfqz$vs=av>XkBRgGy(okr>E;$%QhgO z|3pwLt|Ze|QoGdv!%KWBHQgLn`ltTXAP(gU{blPSD+b10WSyr&!Zz-4IBu8VR@RZZ zan-6jibR10+d)&~<6u^m4d7PiFjmD0-#1Sy=)tXZFk5*gDY{mI-KR8)h+JBzaH%Kf z;+SQjQ^PRRlGUUZxJb9h*@mBRB?xTP@vbs2b^;M7#=$Kn%b^F?m&fN41S{~;7vQxn% zEeEq9SXY53ZkVS)6)fV*!FB8_8RL*zg0r|bH@j*?hY@Y=McMs&M$cvnss4cPyMec*7v?8~z492xk?cmfD|Ps{1(o0z zb;=cbTq3`ClVdu;VpeQex2vHkyu`{u3Ed#SD6N!Md%iFjr?+Tb8G(MX`?{(RIi7ad zSshX=5pG*mGZfUHuB8w}g(wgEUKQae)md-Mii$7>kmA(zgbujCU1_DznQ8`qmes^H zQ0x<%vpQFu{CQFbgfxHll$wKMJ7)gM{0(8BLQ(;T$um3(qr06oyyGc}|?{3hxY7 zyL2A_i7)4^Fu-1;x2=Jdj=EzlDXnaAb2KSEmGQerS{~-}cEHj>o5@fOw26D=X!_sH zhsQf(2d`$jQ>$?Fr2FXgx7X{7=k=$JgQdH>yKs-U^|q`K^!{#xM9u~UN(xz=;$=>2 z>ZbsJ)_NhI9`uukZMXiiBS-!uJD?*#86o06rAbH+8ZPph2mF2JpFhb*DurpirvB9p zqD-Fy$!rQ!^{89qJ^?LsnsB%tD;lqBghJi-l$A13&LUtU60d76Y036j)Op(l# z>2NM<+;1}6;6al0n8RAnlxBG4ce_9>(mhsaeST6TDaj}zUXuvTWNCt(JVQ4n+K-qD z++E7^`tDWC^~g;DKZry-i|=`gz2~D4W{%w$d8fL!*!ze~X!1WRkd+@(C~`sEmm<++J0Pn?}OI4;dDp=k_C< zS}rXV{bkD53MlvqQx8$d3WGu}5Oc^P=;v+fM{GMsfkK|PMJy&I9HVQ*Z1zirx@H|2 zA~cXpYuvb2X?Qr&5d70 zVkZEv_{3*uZug(*KdsL?mLJ?b9!#AHFhaR7Fkt1#1!7G_ZsJI%p3WL<0S~vEn+NKd z8GO7NG{65uMdH5!T(VC;PY|7Ya=zU>KK$bGsJ3-3{R;Q#ahV*z{zi7VQswVW0VG1#F6;O&6~+eG!!pdii4bOk#s<_5V2&s7;iPN-^K?pI8u%g3!@;$+XrjXVi)BHCjCzo&sF}lV8(4DjSMXYzdoJfa2GXbWmnp&@tM+)z zjHx!q^XDI8XQVxRrBsENBV)c~ZcGd6kwGREV$bS*$&R|GVc#X1a3cwD`}oy5)!fJ9=))eaKEbLctnUPZAxjrIwLlkrO1 zU^k)*pV3Ztcf2!{@v2~0H5imgBny~IG1x8IwLn_Kd9)#FuFx@$$oS((1U_eh=P$wW z*};ZXL?(TQ$*$gvLS)<#9OtprV7I*vN97L#UBBkp?WwTFX#R>K*pNM)*g8YBa3z#( zHZ9tc$mg%`K@dm~S0MmL|A?QpgX~CsveQ)E90jOAd%^TXFE9vV0T8)hEqGfM%)(Q4 ze9gse+aC4?AoH*(3b%8nkUCX997J3qD5tNOLIj(=a2oJr&g^sHb@@topAl#KWPQD# ziU{h@uJz2q^NuP`UwTmV}#u~3Q|LwPq=r`9?78-%a2&ZiMTU&`?Pad2p zmOVZvuu^}{xn}(b=E-9bZM00p5_-CY^`YpH7Is7aOG1Ht7I_B$>yCi_g#U#( z$pvG~E;XYaxzrmN1X4kqo3z*)7^(V??V6F-KPyDPR(sKg!J_dw+XQ30C*wz0bYnqT_a~n)>42MLJ{DF_{^Kk z^#9b4hP)4b1$_ktcp(-De{DCF1PgZi@_PwtA5_6#WgBNST~v*a56JGNwao1Ynhnqn*9?lP#$BpHz#Ys6XAovww_eYNPmQw zpQI(8!sFe9)tr&}YTqh>V2b|P3Dis+j@HXHNY}&1ihqxHkdEz}@FO5MSq8oSEy@e$ zK0SYC(#l_;fqg~YfypRo?L6UwWpp5p!ClHBo2M+y0eH!XA!P6npCjagS*Rdgs~9j` zppaz{&rJ@s#y0PuOl`#To11x93A|0>uVuTM=;EdPN=j!SskU6?&X2NlVxkYBV)YJd($K494hJY4E@bbKYRPjIUJ)6S#m?xQ z-Oj(Yr4$Vct!f0PgUffFKQ9)NDZ~|yegG4sBAohGe ztmTKw5CIZF2+}@Q$whMTu>3B9fPSq=w;2>SXm-?UBG0ynD#pFHOwefhBUhBR*?Mq% z!v~N=_bFDJ>n48Vc}lH%MlH43fNIcKWTSUC&bGeJ%BLL7?a1<_l(t8Cv3tZjw9~VF zR4VB9aZZXQ<3)jGg(8Ws7vcw>7wzQKkS&<#{tV6)NyPiyV&76uHQvw=vC~7_mbN(U z_;MMKsj_5E>nx$KiU-L(C6t`o9Uh=-y9{X3%>UQ5P5K=DLG>Yg^4+8<78FiWR1MV! zf3-k9we#f%K|L&&j(fabB42z1{HIOo6;GweVL@Aj<|rP%oEIkB51-F1s>dGySC@zH z)HV0XhctbVN!)4nq9z&f+IGJM&HD{3m8Jn?{)#@{Zg0=~Cx0*B z61(&uZz?oQpPE^ktasObblSTgrF^5sscbqK`}4 zI6J?sP!}VZIG-gXJtU~IdeFBT$K#6Ht4c0$AT}bxxlnBG{NP zi(5NIE%YC$=raQ<^yh7Kq*865cY<`!2(l)&f;G^BVgZE*Ne75W>G^s_5SR*_B{#uq z$Jo(?yVlg?49wURlq{1;BenO#!8om0VgS7;>{~AigCk<`8wDcy){Da7_>5eph?p!$ z0;QjaVx^3BG7rPyesgAtL6pl1kObO9gOZ4PzR@6KYqxe_nq#DtR4*}5$D(hsnFtw; zsxCoiFIHb)U9GO6!<=|sUVm!x4OU<4w7XwTb)COGzP!ABG*r#ZO!_=1j(7f|i(oKA z)>%OxMx7&YlEa!MIKT0GRPq(_%=6WNq7f3|C-;gl;)^jH*Rxa&G>7I`A^rL%H;+VB&MA*qt)6t=IXo zoLy=lSEW~N4oh%Sft`UDI|_wSeZQ^2xJm+Oj_hlAdJ|XXSWTvD8M10(nJWLm%WETgo+D{vZMY~Hj#i& zmW6x}I`G1E3?45}YlTlf5>{#h>jI^LRNF!TQbQ=qf&~MNon7EcZR{(_x19GL@eOTW z(nS#j(fS8Ybqx9kiSD?MD{D;qawXF~TX1x#e|Lcue z@wSbgdlCeWN&_=h-;JVlD)dX0b5EF!Ha76jY}V;HCLRVNGe^=*y&*Te=IkA1@Y|4W za@uvf*3$73XPdQJ-O*0$@4}iVb`RBUcBi6knfShCBFG}5o1tovM zd$%ZQEjGgU4UT5d2#QlI)4D;fel0R(NeDEnI5%Ix09ek`E|Ex13BqGA5lW`T>o|EM zP5Uj9IEl_bNJTMEn1PM`Uf{%g`nJm7rqH+i)%kFU{tr8}4`#2y+G3#t^r=Hn*NPP@e|UeEm%os*uK@fq%(?mStj>eWgr{8AnzjKJsVW18`=T4uKZJ^KQ zSg@l{Q`~d)yfGZ%pBM)ZZe7M9Qn6RJx(T=2Kv%Y%16~nA@ZZ%Kfjln1e>*)cRjwJc z8X101Yvb3|HmtQGl}-vSsK1DPBLA9N22<@nwhg?M-mO=?Xiq7)y)=8g8qmJ9xC+h? zr25`9?7}@rpG8n{uv%&jI+2J3In;xb24Ev&A!8CUkpMmpPSS!0or4&+=Lfe7hg-dg zdxEfSMUKKI%(27iL%X5-Bf zWVL`v%5wT=NJ^^+a=|HGxR~f7cER)okR&UTb4VF0F0is`7*8Z}4lAVcQSrTC6nvW3wXs!4?4O8V9dTE`CIM&w|LHpGfhB*Tl^h|CGGyX4%FtP zluO6FE>RPWC?9r3ymtx}ga^fq3H0Ciz3%P_i{xNgOKa?T+@KS#$`Q;+zpOgEF%mL* zlAs$f`Z5%cNn)BJT`ORP81O0AJL(?~t89S>T_v&OUhKFbp#2dr!gAuYwf zJg8s#54-`kap$ZDn^`a`+a(K-Tb`I%upo+^2uqM#P6#&OnpZISUK1`hU`%P$IB7;5 z4qjt4`W5J}WuZY(#Sh6Wtd{UysYnPd?{Yc<=N83$WL_gJt$b zfbXxK&5Y&Zz?Ive8G=r?o5!ib=&tAw#wR`g_PgVOtI*h_dA|ZLy|N8GzXYOEI4pSz zxH4^u3TNP#w}2BS!qIY&ls^L1^;AS1e&vCh(w&ug;|P2F7|N)2K6|F0?HdVxkI1Dn zVbAU!-An}Gvch3I_aGz8)(Ie_C@aS~KcbY@#Fu~MLLoEU1`uBSh(zZo5Du>$hLr(> z2PGG2n*=8ZNrK{rOM)^*qC$2-qeA{D5WAjWjaDi|H$(Tog;nj*Cq+F(woZDit({E& zMGiC8#Pn-W%?y0Amc$JTsuHS}q&GspIRG8d#i=F9*wq)m&qWswre<8vU_lSit7%0i z9U-RQ0xm?;ggh0emHwWy{Y!pO@CQjLL@Yzf6X619!u3}`mZPoyc-`@kpAR$myDK0( z`9rD0n|YBkiu={cJkjmXp2&5LFARfNrgSX@FQkVQ;%yF|s!$9<9uX4G$ehHx{n5io z;zi({UZyD_q5vVG_(;J}VS<0(`FSy$*>Y_C!5$Nk&_Q#k~7DL25# zXO1HoPj)Py1~zZcPX|($?heDrDrlU^9G8rjsa^mJR~W1$#VOj}hQDJ5F+UZ}=OY7t zyDt46u=I|p@(kX!D|(Qbj?jeqgiiZKU35WvYKTs^D+fPOsqHZe zn?GlvLxO(P_KNqao;88Ay9+pN*sr@ibgD*mI5cJn4|9}G4aB$LS_p(R;~IHqV*qiz zTeL^GX>r2s6B-3H{fUoa05v8Vme^D>m3SYH_z0Yh*XZ(3-B9ZIXAbt&V47Fv3Y@-11aS(x33za3j+s>;(6zF zI>E5Vju)8#$sh#qk#l;a~_09 zdE|hVj`IoA|Eburf$p zez5%X@3six+0dH<#A+&V0QE5${=r6d9(W%Yb`f}=mY`C|bSaQ6#AXo4o!-WmJjfDE zV#&7*SOmUy#=`GC8<@SfLO>WEFneMbDg)+d?qC&l4y&mAjkm*4S~hSGO^tGSA@b8% zvP;%1c;pxqTWA!homLDd{*nfnc2A|T47P+^75oro0k!dcMk!iP2;0vb235m#ZO{xc{r%<=5hWJy^C+HM1 zDY8;_F_eCQQ!`rVHOVXiWszyS$60)P@^qBxCe0@~==?STW^$DNAPWecsvmoFNz}xC zulh1jcX(+iE?8+On<|@Oz`#D*3G~Du!Zz zP_-;;A4t4!g?vP#)I!?Tc%>VP@-LIk8#1n|!2v~@957!TG`{f61$2r+X(XTFGeSZE zpNX85^_k@YTg3@VOHagG4bDSpuxkPlYV;jxs7)}%fM|&C*F@o!9T{o}+@0UMKH6^T z$2nZFvKRFHw0RSEuWk8!?y0&r`24v4_~?50F=P9?8Ea%Qpd{5MQj?h}N|IaimXe!R ziXp)G4jwyT9zrJWh0)g5c`ZxO5*7UO9su669cwXG?WQ#vjwC~9a%f+*58zWW(?x(U$y%v0yg>r9zkCD9Jtd!6I-(f5Ee zKRRr9`I)DML}mrZauXcd1TM_&<8takr=N)942>*`N!f4Y>r|czb<3rG^@xBUn7ng- zvDNZ1^&=|YBXf4~q-=&93_|15(%R_y1~w{a<5IXXyQFNFvgmqKzDMf3bL>Fxkizpu zMT~Kq040~i1rp=D^9G64u4nU{pdB-AdIamjbMU3>7Ny6as#i?tAkAM)?nlLA>z;8SRLWAYw-H#Rm^FFPbwp&xy6kTQ8>21#<|$z z(?%zL^`ORp+@i4_TT(XY&uVPk5G@Ym>JaKXs?rK6WTT@sBYfPK$Ly475xq_<&r`na z-W5zj!=q}RNR(tp83Ph>n$(ns`vN@OL^aF;oq}RcYoh@hp!$JYdlhUE3Twx@E0Pl= zn51|6xZKd~c14X&U55j3HP1W1%w(Okq+`|P3Te?n^ib)q9Xcb3ouKs#wj zNb$N=ke=d~7AcJ)(kkUMsTry*ec0?nr^~>Y0BK{aum^~+gFvB)Wjp~IdhlZ$y#Nn%DL)RdcyTVqYV0#n&f|?VVBCjlG zs{`>~qKLNB8ItY_tT`=0->>Gw4)s7aEL2Qwj!B>XtDNTZ?hu>^i_nY?dcdXdS1|@* z7LzO@R8a8J7H@mivrg;W_oMdX^DaA9aLa2W#ib<}$G7M6ZM)&(ZN$^kw}+75^WFGk zNAXeLo8(3KqFtj(0BhtuQqa++SV_Ux4yz*Tv4liubcT>0l?bh*jVB9vM>eu@pSjl~ zR$PrJ>j+yPFi%AZdPFu@`e_R)DRN50g+g`;vot;ERX7+wsyzZO*$?PBI*>gF-!5{Y zyrY;=;6Znv6dy=kW4CaKi)0~!g@6g-%8A77crG7G7R6ItGhUOb_`5S93kF;j$j3sF zONuqBHMN0`BF{f=C6db3&SfHdi3`Ul4Kc!V_aDeOIRB<0^`L;!&?x@Lw}C(*2{+SQ zbQwLM;~oaOA9ncHW(>I?xmJy$1_yW)nMl$P57;4SuM2xW>`X@}28jE&`xtWhX;C2F z+!lfZn1SEX@2Qx@w(0(~dwrX!*z4KWt&;5s1iTIy>#Tq>=<|Rdo`Ix2=W;*->96gN z&nU^ztH+*;8vJ*htz652HoK}E=H-Gp%4P|HW~&XpkB0|^PDk6L^|j5XZQXaT9^W25 zv&2ywqgAuqWL+GN!@!@#p}AxU8>IQ89EE5q#Nlkt@ zoH6J;Mh(tU=gf!Hu?;0~(x{H?_v0@e@ZJ>yXq3PXv#@lK*(s>U!mPs={K!Ejo$DjU zG!o1Ub_iMyTPxV7HY>?AhdjHJ$Qsh|#yQE_X<&`mNq8OrD?shkAYZSxX z&K`N51b`lXo;{(*mZ4czP6dz|-*NDN66D@JB?t$C)prlS*1nzVdwm1H6=lUOS;l1h!(*UH}yO$gda z{zSF_;wRH+SLB1w=X^Q&%Ncw&^)^Ap#rm<2n+E@Y3)>-gtgq-}AxSZfsH2ftlW(o@ z*SFRfk;8EZ&>CmIwMLO|tr0e$4TA`vHL`wdjeM}}J`HmZj^?!Oe-JB~T){=~&uc{V z``=&f`lwSq7|mXqnk|~%*gL)}1(qKI z_&)F-0^8u{ikg}RFtwW5?SBgSPbz*y{p(VRAI9D0T{HevAYE5 z)0okl1U|PeGk@h`O;RrnxhL0~_G}pvH@zNmeEa9B7EK9}IYJ(qjsG#1(Zk)bIZ}XA z#Tux*iPRMf++b-lu5}k@3mMwsqp(3(cIGk9GR5z0Tb}xj6qkBZi}gGrNfb$pWvc$r zLn_-(J<0dyGH@6O2hrjVKzv+YP<5+1y$-wY$TNG$cv&)ioZy)cz<{v?7i{yLy^yC_i69(k& z!dH(jYu#A;w>Z57Ke5G?RiFm6D1eXJaBwN^4gPk^{Gk);bH|$Ei?h-JzFZwK+1v9^ z7aHW|;Lb)guwTIeE!g9!hgo=sZUt9zFtrwq;?72G>AnQSY3jZN7_C32k< zCqeW~SG-wI{LF;_x*K{kU#NV;@)sS>Htk3YH$?G;G74y*bdr@~g(=>htQi|;FBLT#VJ0&{2vCCUXq&CI>@deE7b$l`?YzdSa~a(4hfb|wLru_ znGYOjM$wedN!EnkYwlEi69YHaQ3}6Z`Qc7wpb*<=;zSjbJ#dLWfwSOhgu?7>a5z0% zNVsiexS5q6kWfg3D+Fz5JOPuXlujWpD>Haay*M`vH|!dkJKIjmFi3A2kqdBc= zO@!#w_ML#ep-Z>x=OPC|GfdRjC$bw2__$co?LQk}bfofV$tWiQx+!hgx`y|QY``xf zu_KrkT-`GCk8XRo=NRj`;l?oOzx^V!4+4P7yIvyD9g;rn!vaROk8|twh1NvZf98_G zrn5P+j;qT7*c-4gI5+;|!3^^9RG6=zlvJWWs4!W?p)@*pV38RR{xM3F?RA1fS5avw z2jCx5%askF4?$mWN&168J7H2U?%ruI8^K^^C{O^c1sk$p@!&W|qvh-MhxCJXARHBa z+-_Xwd3TMF$ly-j!7%}ni1wmyVb`veE%b!;B0(?IsrgZV*y6Z$rAfHLP#p{-rLw3% z!coQdc^K#jt8N%b>`B<)+Y2>?Gmg_y>(X4zl_|~AC23D#4lvh~%TOi!B&mmtfKOL!0N{3aM@9s z-KW`=_5SyMJAwwr?iA z5w7-|ZVe%Reou2pL29QYl{bF&^}<8aj`EjQ(+0Ew{qp6P-3_YSCft(}Jje#L9p&p} zHWJ3ij=~0rYd}aKFEg@hLD^)`M!1OGBdF_d;5Jkj;p^jujSc83S&CLvgAHiprW9Qo z7@C*Gu-qhW;=nvQdy!t@VwydRKLiQeoPX6jp+BFLZYkK#L&sjwS@-4NJ)ckauez?* z6%{YDeY~G8j@sOFWHcSFDS9(^Al4}V0{LQHQ=C&>9{y6=5(CK8XbxW^H*4aCmU@Ui ztFhO0l>3Lu&0lpqn=8^WSDzielrw^#x{+&7ee!(7*z(29(S4*-?4q1fhFE9L^#zpS_dkX$UhEpBMKbxJd9W!kvJW@5ThnolDpNMnE{J(FfVkd0Dy0b^L7P`B%WxEEXRCr6x3R zL?hatXhzDyYEdM#CFhLIhpnBs{29fk(lu>}==w=@{S?buwE^eEEX(qDGpBSv6rDB<6Iu{3}GjOr?sbdUHP{G3+n>`KveX&gaYOyx4Y=ci6D9b^>^4lP%x&$mQp#}Nao@|62 zV?#t8ZAqs1Pj>oN3p{FaPA{Nc{}jd<0J^ODfG%qr*?(PDe(^3@{U7G{nl{e-7vlt{ z9+wLOO&SK9&bwnOO~29P-x|~bZaajaG0|+$-RPwIlp+7?vAwV9OFmD#W=EeKO5CTI zOB*XM&vu3j8`_f(pLcIZ+HHZ2XgQzf=Y84x?SX}s+}HdfN9i<3tR*58HNqZ3mgZc8{`>ght{vA_Y{u<60W;{iC~8|%na%O z-Dm}_2T-4PXaVXoAddpbjd+0NUe9O*gO9;tzZ6kPW4`to@8X|)0Pefwhg zzYq!(DRT*P2`;j?+nyNZTebu@xp>Z|?`mol#Tfa&=AWesy{rn7(&8i5M$U=7*G8;h z@6-fKdh{}3m6%G#P>_XqF!p1KeK!#7PNhUX-T25}*_!I_?8i5AMQj90Kyvd@M&&}+ zuwT;7V&h^`W5AJ(!iZX0guqsD&S_S^h6Ic^{tuD%e~7gIL!|v5BJKaLh_u|hTua39 zXjj~)KfcEGIbW+ij@;dmn3>A6*My;0h|_-=M!{0GMtY8y%)38QkQ=b}^rQ{Zo!-vh zKd#+O31`Mq&hYM*?7p_2uiy06e=QU!lg`v*6~a@*0|6 z-I_z>@FrrZgh@j)Cu$Cx?5&{{72I0y%N1FrG!GUqsz!C8w@N`h_(;n@Of?G@KPg}9 zAPPd;mtpEg5fB@w-+*|VwC(diU_$jEM25fOP$|&uKgCwN4NITmPn~uqmWKsrxGL1f zh*3vWccl=ist-Ya5;;i8WNfUbD8S+$E3rd~R8|g3Ffa7>2Q>`DpI)#31x(+I59eJFmsK?2+*3yD0)O+pZ*wOtD?^%u}>NjN57eJNB#1r_Vun8L*L;r0f7`{-+WK5HF_jX8jMciY0Rk;{YBic6##Sy+2q< zWFLnU(wU?C@tYvI2{EdoF_#LGBVanj<;Q$9W5V9%$GZZLRmdp;E@Zj%8m!d28w%_i zS7EZWzwM_K4eOqq#uPCLN=gihc$KCmIVktlE`G zs4!BZq9|a&&dJUCx`9fVBwPq2gO#5ImF7Tpk7ZT2U_wXw;+gGv8MN4L7-T*Q%rCkZ#r=sz}~e+axJme{ZuO5rH+ zgC$2Us?sEk%G9VaMeVBB4ESILNlp+>dD==t9afnE%U%jvnZb&CR7ouT+?IHpJWyOZ z%t14bk{8L?($O`{;kTe_B~6xaC3w1A*1D?)ta3HUEr~wy_z;o0;ka=E4ylt5G}D0> zh#WVe0=0R{Hkj(PRr)V2!iX_A>3OAM9SjNPgQ(7NS&^2>_ub@HdMRB1i)b}PV>xhK zdXVq92&SeCg_n!FEbH*m_ILKtAGQC!R7iOalzA-1YiIaim=J0)r1e5zf6k%6{&=0G zgwar{bL4?!38-;LvlNOY%S+$!*{H1|6$R&wGlvGf=^wO`wRA#ibdz;b7z}))EZ_<)_GH8NU<9BPLWPEhsOG`NtRgncYif}IZv5( z8>zP_Y}qY&*t1jL+W_+B3i+6& z3lXX(gYwHh$;-is;<0=lb};l@H3(TEpb9l#hs!<-$KBv&-Qga#i^Dpz?st}*nr>X> z8TB`ImzPOE_QbQ!RV~Q&Yq&KDnZJgnYIY9QZB?mSPSn@YBCLIyIHFaw{A4mU@~66y z#Em&pIpQ_qFJQ+39WHWflNdO{dupy2A!@Qt31}t!$k_X|H!s@UIdpJQ zO%iid;0DR|^4N5e&80S)Sxhh$Xk%@$3YR>bB(*tnM-gQe^G$dU775b>6z;K3&0 z!p7mireH6~Mg@;YmKP268xQr94`n(0euTe_L$(aOyl3diFph{)wj;ZnWQrIJ^W(LS z8d!e`(Q)HlhNfJ}NwNRIrI@FPW95MuhRZL{Z-^4y<5Zx>(^qryTPUCx6S99{VhUmx z^vBxxa_J;PQuo0Fjp}Ps9hR3#cI7Z9E#$~`m+i}qorj)0I3nkz=*zWT;xXW_B)*Y= z(yi4=36WsBg;|j=>k;CAfVAELN#t)p8YrTzWF;0sjzU0aseLkqvWFob-y?7l1GQe-4iL67*#ZpKZK5%oFWBIkFWOJ)9M@g8B1Uq@Yx~g}`p8Ny zysq@u7()6QH?hGMTzF-;Wzw2wMjNw}u-PEbY1je2@dF6w#-4pYXvY+Mshi9BK#v+~ z&E`7|kv!u!HM*G&dn?Mc-pY2wk;fdaW><$_sWVmCzEiw=F4tEtOE(F>rd?Z>yFYw#Ho3nXu9o(!&0W_Md~82vmKO>; zVqJW;eQ);84bpuld;~RfM=f+Z8r8L`?w&v#OE&4)4&VyqlLnQAf!SW36z;JVCt9AIb;fhd~(1lYJMFwu)Bfx zn&9>C-|?`84DQ2Wq=I9ELxVUVX|aR}WF2Px3813!7-0qWVS_?|!h-^qU=V@$;1Hrc zSa5vTf4fu4I1!*Nv*B~pWuIZaSiJIIVBcjp<9d3RVgck~92Ee07zv9_iWv&7NE!*t zW=$RmOGqEc9~cb6cc%aq>)E8nq=k(p`A*9sQ$=rhOhSIk&X-af45D1rzp1_u@f)c2 z%(z+Jg^bGHA8^$R_Y5mBayfU6S>S6r<62lMS=#e&`D^>o((&kJ?4>=Xhe)aT{T0Ux*7@bst-dLrRw)~yzh2)4wj=G zuGX_p?{8v5CAC}?w;CxwGr15{fTJy6{j~zEOJV|*`Iu-qA1Jmj$=BP@V2&$STJU_QOyLn0p>FVWp7pC_bUS&m4 za^uAU$63@;(&?2nn;|-6ssp2_>XO&!MH>CRQO3`4Bt~;756EaHpdXZjZuBkTkTef} zP$6lWbb!Sh18`}~mxaPc*d!Bw;j01QHP;ueP~K5CDb);COCaXpa~JA+wu?!8$4xtm zm?^34g@(Mq(far1Ml6zv`+$Z&e^-rb)an`9LR2^RCNBg>f5Tdpq)vlsr*Kl!8MOiW zhmayLDcXB`ZJt%kvXK3wa1P1f25LoYl#CuoGNBJUdjK!l;K&JWAvrppkth^l|8VPf zJXnvJPy`hyUe?YNNNl>*sD;>pql405-^uRV%-(=Z8xlXW93ID@yoM>>H_g*;tjzS6 zmqTKj&JZk)&ve(FP%38uxi10`xl=)gO2VURTPzmH-$z3R0^rg%@S&2t=9C;>fdB0zSBqV>LZ<8P8nUm@?B>9@6DtEnhIqd1QdkfXQk;nR67t$6?bJpFP81kl^pijm=j1(_8VB%xm8tB~#k^R|cT zk^+1hA@aF@Yv2cU)3ScR`vJViSLMrzF5J`$%2=lapYq|%W&Dce+0eL}gHa)p%4m#eBDI!6d|B9ovsA> z#~R?>&bLDY`&gG<8OYt&-WjFh9xIM^p1J*;4#>vn=X#5+paQZnkqdEPb~q99O(4Iy z;s5P^WI>cS3E1O2Q)*={5dE5k%7XA&g;EG)>Y*nn^(TbkgVC{v?K9uOjQf<4rz z=Y%fzztXXlf`6YVC`ed{QAHZ;{U7E`<2|7k$L-Z$oDvDs3?e?Kad*E-R+Sky!ZbnG=WUEwXqsouke_8$p1}N%l>Hs)R zuq2O+sA){F$nWoxM1p8f_x|?0@Y+yidN6%?(~uoHSLpinudBw64(|#GB#55?iRcu7 zNxQe5koPn5e&WTr{Nn1qrq%ZR`dA+sP(0czg|O6Vt$R6`S`UnV;w6l^5*%&j6v*;w zb?ot`-xzFJU*Mdbt0U~ObzqgXg*!5w1^j$mnkyr*Vi1&ADY4P;;YDniIBVDtHT zLmQ&>CTj=NO=$;!5Y6mw8>1KU4DLDE zUV^2icbqz;jIq_C>;#F(pU&!<`cO=d7@-;qPp&{RXqLDx>ZcKCt)v1fpF?jy9Z zZ+;qrq9O0)4pF1~8Ty50oLYst1OPI!?ndog;qsuCq?>TFMJ4FwSU+b9=0ScQ#vpzJ z(spc7KmbeEyGD>th=x!@ljsGQ8`j^Br5jk3L|}mRa&| zFjO1X_h<_5J5pzo6JCD&B@b-ZZGZ_f?c5LVPidaz{=?p{7ucT>5e#9wPn!L8^vbTT zG!8oMS4OD>;e;vRItxx zE7sqo14Ua|<_b+$4Y-Jc%C2F9oJ$_%f)jH{b@H>59edKV7v|NXZm4r)7IxWn`LaUd z3JeaYmN0eF=yR9ecKDV$q?V_rB_n~&@Qd%kXW3|20T8#5*|0bZnAU|RM9WWq(SAuJ7h}2?y>o+h(;LF4VQUF|99EKSdU`Z5* zaZVM7@hbjn*3H(h5ojJn3YLi8uTkg~{Qq0EdjU4j=bZ0~DGhV+>6VI}{ww^m^*>$~5nU9i zhxE_yqY;<@zkB_QV_Xyw6CqSEbfPG*!9#~otB}AG7~`O3nd0Tz^vxj0_t`4}pD-m? zw;%S}qJlCWkx_`bzfcB**(i+I5m-T4I*gciqns!N?t8-mR5A|cHy90oFk|f14JRIe zjnm2yf&&EP2jhrCz60_Q-}`BCa&-b7OxpgU=ms1nNDi)up}73g{DuKgw=@w%di0`i z(B1=(NdE($rN)1w&l-UJx*7L?y<0$m0e4;VAPM+&1pr`a$36z7s&xM!APw}jdEF0D z-&DX)T>JYg-UIB*2>HIrh$z&PMIZ-6Tnfp}j|0xlj{?QbPYj@<{f9%tgy7~kMcThV zr>Y7=-@hmN-igB^0337w-Ym_90zg#z-bguk_KLvWWy1A+V|fLEo8K59f%*UMPRv@H zjKMEPcOFpgF5{c8x98ja`@P7}5zm?!!Vms6U$?8P!<6{@g|IB$$L-6T%;-?ab>GYV zp2sJ`&z6)gw|aQ)uHfW_%&si$9F_iIx7hTFZ(dq$*zZTvT>bw@oC-4n|L&n-1r=uu zzDz^?YJk3VsJ)wj8liz+4J8KKjzijOSqb0pV)R3X1}m^oWDKx0m~SRtkbA^7Ig#^|D^@|wtLcz+QkIq4UKV0bN zaYAkH%a`>j6zn_hM#Re(J^|mCeSMQpGj96726qSBi_5hSR3r?E_;1`AP=CL%7$Y=n z)s@9pPwtzkjuXeAr(#a~mjhB@zTE$cI{pAdbWGa6HO;S1VPpghjjg3J_8K zZ$uY$wA@Vo5cFs(gKQAcpTr)XwNdh=BnzXrg#_N%BEU5ULMp|4r4^%-4~{Yu9Ny(3 zT>^3utajNG(mk89`#8}(YhYg93>uOCV9F@KQ18^sqAwE@n<}y^1r{g3<0mAS#X?dD z(Q|V|h4F(Wn$o4wY2L@wyzv=O(h!(qNysW*MjE7xsF-!({IIDPrmF!uk3TR+V|5*$ zr>2@&;$ymNgLHW6ataq)+{h}KXMK%AzCAXHlOrm!N(j;|pH;Dm7QSb~&V5bLfs-li zoXpA&E^z3=j~K_Nrdfc5M@z=n2`RY!Lq#*9%;R5jYscs@aWAUQtza&y;V5qoApxqA zTt0Tpo0q10n6aNQp>kKf!Lp5RYQa6`_zcU@LSNYHK;5Mk?Vn>7cd~3~o}@m%p8J7| zDXpynm7k8z(3(t?iBiI7sm;?`R$|4OHtPzA5NsB;d44d9j`Wd@JE{IeK|F$IpJpKV z8`ub2HHm7@3I0L9F6D_K4lMNsAj@5#n5R|?a&}V^U)*1U%_9_bg-Ur^4Ten+A4rFh z?gI9Jzb1ajv}@!q9jTptZ;$H0NP95)h5CA`$KDx>OjZ8ila2TqMJu110?;{ z6T^2N$(Zl|L2hi}h>{!E4VMbQNDsk(yQMaCZ2?=6Hx#HNd)IYzAhx<`+&ohh0$LEC z3R>g@uU%AG)bc9GjdKuK&}rEi8`7$s#Rju2lO9-;cy=1u_IdaEHdtLnaMRxY8D837 zYQ>b!DQ>91}Am=T_dK#gcX`fb)zH+!Uzi&_Kh4U+*bFv|M zYNv#Tcbeajy^xq<)G9bFk5*ys`F#lNgro)A2^@@E+hP``@tPB)hrNFQ4Lq2k`HtM4 z;X!FMeRj!}lt)RO>41`q);Gc7jDxq9pAk+=RX+M=Zk1SDQ# zkvxJf|0GK6vu~hws!hGXa^!s$#n_q*47Sj5kPdIBWK^yIV(^&-+?t`81xPZ3&Yhv5BZJo~Z zeqWvQBfGjQ+1;sBXYI9bT=%=vuhk873fe1z&aaQ7ou|%+?y35ViwlgG&rVN1B#Ox3 zA?p8{2eKLE8XY%P?x9}VJEXn);O}2{g9aMT?8NhIpM9Y!F)^>09E1DdQL&HQ!N0rW z#q+#HQ>i!G8m;aj)duWvXY*-lW`mi1TQ1gehFip8f5rpx)V!16GLu2akw?Kk_T)e@UEz5UJbF6of1CFpR(gi~=?9ir57 zRjCg0b%GR0O9+3n3@dJ01ALBBI0&EZ3MLdo$E!n|6;#KW{7P$S$rL?k2sT8l`F z@Mzf)lM*UiLHY6zOaD*SZR@>eTjB$--S)@P0YrI=fRws`RO_0MJ( z3%Id;SL^Lol#N?{`5>oxLU4IpWMA4`_iem+dcK~y+PLtU2?lnWh)G*^~>YP*tHaRG(t=|h?c~(V9_o& z#xSulpp6JIKt+^NWfK0_|0<$-;|Kn$h~m80_Qov5%v25Ohdz=<#=Aejb0G7jSW2KK;CpC2-m3-&tck5Hwc@RPuq7P_dCIad%r!x0!T1LUI68oMJuCJ zz~aprfTSB8PX1x&93Kz=m<~3fHK~dcSBX`Yakk(8$7CJ75O|p3QYQ2r1Bob~H^hXX zGh51-GcXf+TQm^5#2w`*V=j7~oA9D{rCwH{=c}~BUTTW~)YCHkE@Uz2cbw@wOfA|o z$j_*XFC3kR1hn@f2!F?Ng8;2HQL**u`@q6-TMYiOPv}I&0%}K)T%jC405%Xn3JL=f zmTUS!)C}IP^cdbH)&}K290g2lx`_%Fmf0xzB)otBj3>PB)f&jlR&n|+ z!s0QI^z}^OX7M-7%aKv+T<2!$d+q{z^9&^X+^gfD8+Y-9Giv}y(&xGmKM&n~10p1uIpRdd)El9(1mBGd5JUnmQJBI$OYNX)8j^3%<+P`KAk=h0Zt{&{ohjrQ zq96;!6~*yB0kWO-qz1UVG{Gex52{$C+A~qpr;#4THRp53AXEa9FE7=<13;L9;`{#I`_)1rq~>)39%r~2@3cy=e-cJTN%x_G>P zq^#~`5kOqAHwmN>7~iyTbGCb?`<#aQ5PaPMS{D3nu`c)vPWKWM-`p7UO-H@Y zK~*3e%bW+U39Ni-0IG=d+u?t=OO>nN>Te-97t4x-smSM&Cas!Cm5(zeu@sV}Q;Z=S zAg~K?(g1;73p*yn9*fxgUJF2L|H5_zNVz|F-~wRZ`~M^G4fLt@sG}CK*{$g1{t!@L zY9jnprT!2Y#sAE=bzOkD;Cl7S%K&rZu(cJ%Gu22;Fr-?iO zF|~uR_pd>c^X+hdcpS@cyIOg9 z3{;QlKGKE%{6yXWU9*ZP0rB{EbIs8?d>U;c_m#($EzXMcA(X}e^3jWpaE$N(aSs6? z=Kl&bbXm&6`2MeCZ1fk-CI0B;t7rMHrJ z&Q9Midp)M{H1J%FcW}}+QnLIO)m|!b6wZhYFx_<_xn~_p8LF4%k=_G9kM+aG*sT+@ zgrnyk`dYAxCa;K=)m<8f$oem07n08yrPKxLFQ{y3(r45*0Cv75HoH%JMaMT2M!Em& zeXW>AHX?Jf5}21BZyqG(&UzdLKZZ=^?KIy=mk-QKyKmJ$284hD=^IMB^Z!0JH~%2` zUco+tXJ0*dj|z#vLjc|U?uI*iDrah-!zeDn`(VQ;Z5jdL`ksia!QaeD>vR!6(f<7+ zIA9S3#A}1RW)K~~xv}agoV$Ym(jLDhLdLON*kiU%H^GpYz5zvgEigG;wegq%rWTa5 z>MKu&6hkIpn7?_kb@jH@e59%D$5d~`wcIO7-=V&s9AEEYGC*|A@X;;l{O4zgem>*B zx<9L>X8hTL3>nU0+Z026DJTsr=ljhS@kiwN)UmTQLM^dc(RngITE{+5;Ir^v^jID- z_4<$t5VfrW1Zj%?i`r6t#8oQ12F`v5X{3AuD0BY8_d?$<5YO-YH`YQKFxFzHT)N~b zF#LP0#g#k>B2*_}ti}E3_gIUwj~mKkG3tqr4l_f!mMu!`Qb7Gj-;C=~>p^Zt7Mcr!9rx$#8d*$uy|UOjnfZEUgD*I4PccX?Sp zapC!QnNRcU^1c+yzZy!usjyW393j-uUSv8P!#m*8hVvE&`B7 z$hAI?H6(*mMIPrqaHZ(Lmb4_>`39S$**JhTUMww;bru` zCPX7}Y*1!E@`zcadl;5J(?(_wrg4S^TcB@ENlM#*Sw_w%l`2O6BnpPjjw$RrUxf9Y zFTxTu`Vj{t`d_{X%We2PT}W?U6g=Vj4?)~;561)w);}B0a9E`jFH!IfYzWbiM*zsk z++yd-FiT4-`@8(N5gcltgP28_a$s^xX!tY zRyisqY)`_KSUw>NmLXbqv*m2c!$z6+3olqERE8F`anrukgaGN-?1 zg{n1ubhThRO}3!NVW~f`$5kRl!gH51$>Y{mrmx4m*#)dp7x+`~qW5OG9Ra2+CN8-O zsyDU53mhE$AFo(T@|yhdNNnowCeBd+#t5CH%w&&4Jr$Vi0ObMk&7$G`D8W_W!hi%E z0Vq=LH;Qy%d;CCb>i7~bi3VUxM^6lX_l#29v7gsA>JO*MWPNmCY0y{p10{pdUa@J& zF=+c8{21Ht|1s7MJjTG)HFE7s<~=D7!BPA?g4wRtD_6ijXE@x_%Cor9^vf#wEEIzy zhGps%zU3u7?{el&|+?;B4u+eW!^KB!zbW z{0=_%pP%P_00OH5FtXCI07h2&-~Sj{Z^0el>Dc>9K?22YB=|T%%ML`SLVZN2`H470 zs31u~QQ#AoFi>_8LS)LTMcX(*odsdVLO?SRG}`HLMmT647|bkuc7Cu2M=D-ZlQ7Bj zL%$#iBDViDB~e7A zY)SV??g|(EYxCa}0lMv_rW&zg<^zi&eVL6>KH=S?fcWhm1Z@KmN2 zQ9KH8Ln^ouhq@+Itgrae46f{7sfZvv_3!=}pvfE1@BSG&!MCs)K|ucu(opZdM|2?7 zY+o8JA%0kNpeHB1!>`U=PR`BZADrX_vADu$*Af14O zv-C?z6`T)>@?>Ia*T2C<4D{Ag`M3(%=&A1LwfWJmKd=J#9tGsm zubR_i1Bl#hO#8Y7)<-a4)NsK+2@qRgRZQ{^A@!K zG0^LKp>@TYSIr7^)tI#Nd&5L8SmPw~oV-E!9ldgD5n6Hh!ZGwo{;2uaU2A&Q^{w^8 zeZShR?Uhe9AN|*%X+PF!!XlcYmC0gL*okNmPMu@iAJvog}z{HwTob!kAB7vSc25YQpY=FK^?8zUH#(>RV*KHboRl-q6?bH;Q$v+G;0mewnBIct7ys&oIi=^j84L93ZFkI zed3FW178|X{|CSlHKff0F-4Qt3F2OgKl(!$Si)Wl?k`ftI-9i5Q)rs@E&Es0myg9d zhg94Fdl1eZJuT2Cz$wAaCmJ`11vmQ1aL5Z4Nf_c@ zwM{?{C%OEZ22D{qI0Wg4TOxxCNRV8J4)j0%J0b#(w~y$A`+%g>=;O3$J94oVw60cF zab#-@T-+R4CurQ=9}))9N!kQGZ@?I>k2JqH5E6_wfJlYA82X)Ip4xh?p*}YBI$R8m zgZGFisK}SUz{wzhu572NZ^?EOyekQK(|25B4mi|#>PMW;G-bL+TAgPL=e4E$;nk35|dmHW$nvOYvT#`nssDzWP|+;(GoCC;@(c zK3L>l1N&<5X=kgJhNwM&%Hean*}ce+!12U+)4lBWa5|a^-9jLsDgqLF=~8Iz{y`=r zhsBsKgQ?Ieqjm=TE&u5A$0~!-s(Nc1D+;;*DMQr9yJ-p~;SGAy=96##Z>lyK&;?+s zHqy=Ay_Y^Oa!LSV?+IA6;VLPZIBCrcUnOQ!-0a zN}NkXyPD8ipi(MlkY9Q%}`Jwe%fzbe>IC^4$=9Y+K0h$14Wt}EAV`|WD9eWz_ zXc4Ur5OJzH`1wC-@!xy40h+TcU@%$<0tF($U^{3%cHk`HR5k6lhu(+uLZtqRe(!+P z%3PN>gA#d6$NQ66@*9<*;BDP6RP8YK1U*?7`1@G=eLk+gez>{I;sUi|zK(PDoj$Up*DR;10RtL%l$&0-)DLta6ozJ+LIY=A;RADRQ-Metd& z=03EZXeiyUYdgiU^!fSH;d-_GdD)Es;hL`tVR`X#O`aS=wcv76P^_;6$1LXn)PUs<)yBkUl--b!hKs#i6a!NnCNI_|#L1DTX9l(~1IPV65qiHl z;Tf#_g`w~o#-l%Ul!FD&g5r`!?NeEDO?`fdTB9!wJ6W^!HIYwD>2G!#YThm^nkl<* z!9trT^`zqi*L^u>3Q=D_;I?7J@L=LZn__=_%m^9jD4rgIXWs5F1j4jk^ozMR=;dMQ z9`3H~344HltYash@FX4-*BlLo@FZX^$}pDjB#fEM@VctuABLm_A}A!s!3HXJ-Ep?F zNz^&0r6iK*ga%5fqZL4n_nEUf6KF=7`p)AhO}U1bf`%ttLDH3y`TJM>lg)%Ii|o?% z%LfgmTsH^3d4qt=wgCbWP7{TS-wz_vSUk|O?61!isa?sr4Hmv=tFcK3zK3=7Y3zwe z+8FV2_3CeD?OM$$WyA5#|92b4VSbxEDvq*NO7)F81sQ_$sQP{FzP_UQ^4)A=QMghm zHkba?OT9;nV{L-F!%=Ycv3>=`q{JZ!F#0%G>K*%!@z!WAh7=d{=6}15NCwG}BCbK=-sO3#S)UzN#WRrkn;W@Z+cIoe)`|M*xg@J?ycJTYa$j%hA12A zsYQ6!*ZjHTah}@74?H`gyoM7zpF{>#F*J3}5vzq_*#e1!nx)4B%lCyN>M)(DZhSPM z!kx4~e_@PXDN0U;Fr$LHn1m~}bS?5PtK=7b`>b;nZ+{8qq;~^_zU8p#wtOjKu75ev z7$05wsuXU4wlYJ|W>R?O`olZ^Km{)uCatl{wh92}o(7ARuUs@jUlx>i5ki3{5j^3H z{E>l(2{bzKY7Ht`kD1QmV#2H;sLL(__hib-$mpsTINy`7qQH?6k3hJknTtS}bE5~8 zrHL>L2&RGTceZ?_Ay#2wEyn8B*Uq3*;qGgCb{wX7=kA zkMHH-^PShb>EU)~btdp_XloOnpEprvotCD*fk72%Ze*1BZ`P8S%*z%SiwV%k3gq9_ zqT9z;$XjW{sKdy6XcV$BV^Yo`n4b4D2Og+Z)66af;b^h%tYi-YuhEM@F0qqHK}kF);f$tWGY)Dfp8^Z zOub*<$eL96Y*9BP;Kk73_Fzfq+sDD1?joNDu%)0V$#N6zc2dNs@}O7ct4)Zz-yx;K zwT(Ev0mocZkBY?D9QJr@Q4Gmraf&?T<)BU0vKtW!pe#@)4eOYLL)<- zK=>Nz+Rg9FHJ+V~WYe{@ivbRqGwhI2*=?1YdP4}DA;q%Ta-o1d59Cl{b+s%d{? zR;(s>+F1;QyPu&`rbJ1L zWc0);%c?EXScINvf<~F2`OtamF8)Q>x3bo4)b~GSZE6)cO>(Lkv>*=JTjtm(WyUtL zO_F8sEk5eLM`oAUnv!g>D2f%&$1ln$OugMPmBT4Ex@hZeS(Z}InKF|kIM~S>7k&1( zrXuAY0|oQrQeN5oAe-QUFxDk1j2Lu??Fb2& zK>NXhgu?Ol7m(SgW2 z>So?q9A9Up_?hWzF9A#D!4tv-T0=49qg@<6x>3rk#r`^&&hZ4}qplJ5v23IB52~7T zk%k{&W1Aw$S?H~&nZ`#JTC#D*#Tmr|rYk38R`urF5O_2*bq-q5t3 zgLXMPv^;nT19cgM$s7BuKe1@vDl}afeA6k2c(vpbMAm3Mh4|j-lKJ%OKgEFblhI|? z-A^ED4%w6x%I+@1ja|QSx}c;uVQw$~a%2p@DvCxBkk*Go zwdepz_BNsAK`8Syw z5$@tyMs%?ip-lZvRfj;ENzUYnj3cb?mu>|Lb37(#)*})Hxk0J!5&(B^LdlBL^GAW3 zU!Fm@Os0kZe8i&0uWLL6Tzk^S%x@hF9$g{sVA=}Ev2P_6WmZzhakR<`66Rl|I4HVV~ zfe7s@XX?$XfeIBN!iB~e@`irF-j^Q6415pAWMd^|31U@%Bj*(Qn= z{!1gl+yKaXg&eMhey`AGdyL!Me?5)Du!Mt={nbfxk!dc;88w*z5YgEW3A7#(#2Q+8 z9XbBtE41t8_G)Z;vAy|tR%viFbQC4Ob?FUQZ^uIB*V!%J?=G)=8QAght*YNYTEBKr zo)$Ll&Sy?V9|Kptt5>}lqhBz54_BoWCVlO~ROvmHnE;qlOg0uG^q4lBDeUtsF^xNX zjZJMBe9&D7@Hikl3YOf;$$(0qN>+yrB#eYG+K&@>7jnpxUeUSJrV{4d!%Whcz zRL0HRk*%&xb#?cf*Za}?MekOBbGee^_j~D)uTq%*@Wl=zu|j>?(^9Y(J+t-o9{lKx z;R)rTY3~m0o=V!$YEi0ArTLykz(SB>r7iIJv8U7VqIYL^@LAlyRGj02pWJSZv=Sx7 zzN%i70)}%ZRB_uck34c2H;f#l>;Vd8h2TgxFX>_V2VOXWHDA=wP{*4i=C8=*I7}|fYMODDs1;&13nVMnee<%WV8(@zY8MHW= z;~XpR^^#5I;fLzklWEC_vd!Jk^NzHF6zkr*(mlc`@P2>}>=ZM%UO5Df4-nZ0xf4E#%V;kC9o z_!@jM?wcC(EirsoOl)%1sz2E9@B8*}k0x5|U(x(=AUNn@OXb%&H*minUxIH!+jNXl zY!70Q&-X{^N;xOgg~6=44YImpqeY0Bh7qUY%d27`>0V*dQ>j z(Ys741Pa;6VcQaGc-t#xW@{JVFe`KM#h!7j!$KQ7K1=k|FKF40*L_T%fssMl)WNq%7iaT-w*=7PxHo5 z%vfEnr0QR>jf!eHpWRnyb*Ugs5?&}oHaP+VV!JOwU>4?6c7IK*0(tdGZ?BM$sC#2` z?eToeFMd2p_qG$AC(n1-<1PF zefQ{0Vr?b5)%E&vVQgdWfx}{|E427%O<*efbA{i%-skn^WwW1?-K2mZ+xz`uSX=c8>v*yCZs`ty4+Q_cY_W=s_^bP3Tyzxx>F zSxgoDPBF>pbSWR_DewZ%#MYV{QH)@#l!XWNCNP-6p#vj@T6-_F279^>HJHI?NOj_w zu5TEJF-b9vU}KpC2Y+A%YJ)d=GX$e|?FWL34ieg}c0>yKytk>s0^c#?p@DooL#i-= z-c^*{xT?h4LDR%oJpb=JkpI2FwvY?Cp&j|4&LfYpSm1Sir}k-`OzWa?M~%un%k_qX z2e>^XJy#%OX3zc#K(1pG!LBfoESFmD7M|D!m(!hK+Bp2&en&vMQ_l^~Ut>$#+Nzbx}!06i<>A zK4j}s%*eGN@>PDqoGm|`6mfJJixhFui_pJBAXac1FoXpPu)v>rXW>{U0f;r-^h%_X7Jf1RAEhHaF{i<$OT}rfR7sKPSQ)e1 z&>`bbTku~)6|N14@5Kx8{TJz2^$jlna>`8^Lf!`Id#g3Uoz9ld9WCgjeM*r7DvMOm zE*!Le>P+i;@>uD@I=Ca~$yY??Q&I(;&?WfaX~X=_Sd%WJ{nzUrW`Zx-RQ==W+_2#0 zrbk9^7dIobDwNWGIUQtgX9@q?SiABLbAd-UnS8KMmwU1YUOV&X_)S&A*YKPz)F-$V7-0859Q)^ zeHv~VxnsK-KXGyAV)t40s7T8Jgs2=Cx}7HqRBe$x)v+Z1KsDjK{j7yJ)Is2PGE^UVpr}X z9e}JgeIskr*IXESCg$JBTJC?ynqP?R1W|&p$sXK)$XXu!%w%ssNOeqL$W>T~>1cOA zC@S3`*Zpm&~SKr8*!T*po8+oI-Usb=Nqf$b)^Y;dJ+@Al3 ztR=)ef!^5S5D`dp{ceR?7Eh<7CYu2Re12IvhK`HOk#B>uV;JV0ypps|Zw7TKn*li( zE9GHQ5N+0E6yUytVY3(LRfV89$3JCCb|UtJ*eBz11^q5b zgR%L2F+|Ai^THj-834fpU=a}fVI-Q;!CrY45y5vk|ElXM-@GCO4MGJ9h zKyNDwO(FQ^encA)HG5OEMJ0T21Z%nx>=NpE5Ue>eBX7`-ehwVMiz-}5sJdamjy?)} zfBy(9LM!0ou|O6*f8n9ks%QZ4xbO_ah~o+dLr9Zj!6RyAV)c}oVPw96HHZHJYuQ5T z2?*JtRisJavsonuKp!L2QQ)INNo~Ob=0#w4WL1&95&KCq#r@^=!BXNn=|ok#Jz>dAft&zFLUmqK~_c+iVwLJG>b3|80j`0o&nuSHKk{$4z=1}T26yWgTaq888I5-fqNGc*(iOy{%la?`9a z=%*0}7;j01DB`&ibSD5`?PKnr64Us$ecJS0i|sGwTDo@g0}=8d`|@kB9YEyH}k{dR6v?s4t5jL2J|c3lHlLt(^Z*2I9*+%ncLf|M|{P1CQB<nS1?fX)X+~^CzQ3^HUMjd4g zi*H$lr3M&EK-DSdavxI5kG2o>4#hVLdij3GnwRWVt{u%5a4N{H>i5#%MA7TjW_f4M zy&q!dhZp*Fs;LEpwS6p(40# zi5ZEwm?DR^O-~1+EjPK!$Uk0WYE4gvn>Ku?=0PsaViCHfIVPR#k2ux9t266JcXG^9 z**?Q3WO#%hc2s)+pE~!sL$Hw^SRG+#+8^Wy2xd&q;BiT?=;B5e=;M9|GulZ9XV!mu z#~B?C%_EGN9jZGQEzZ|S$#jx3@yfLC0{2@rSH&{2fSQuFjOM#xRp#x$UUaQ+`(E7o zHcyz*EfL`qAIR^ycX5247Lx8ore5Koe*d#C`%c_CrY1ylOX&++oT zYhb-$?#xtig#4Wwl7?gbxE}!kYnz=&pfE)>o&LrIJb*3n`CjpEG{1JHplg!1Vi@}H zToE_6VnHWTIQ!^aGe5Ip|B>zV(LXox@+d9V9{ou#xkyvHRZ4LX*kAle#aMgRjR)Tw zoka z+fO}}Z(hxn?_v`F(&KXMKVHpyCtRtKF{0{YrVOxpK?jW({s!yA;X0v{2J17G|Ke$V z+MO9WT+z&~;9KtQZgP3{Qnj$*Ir(sZb^I{ys%=I~^SU~jc{=VM8Y1X=?Efk62F{$K zCg{NLL9@!{P0bD{b($`U(t#j%IHy(!#DW3zHz{{z%4`@Ml6&ASLxN9shZ(FmA)tFy zK~3h}Z=c+(^r_$n=>U0v1^DauONdnW;0EjT1_$c+2jr>eG9IJls{4I^ck!r(OaB2MzH!vC$J-`M{qflQ1x_>2;iyk9_Kx@6at{-!~^X6ykn*69@S6JM~NbJ zM2ncss!`tsO{YiKqyFB(3=ZG%lsN(2%dIbUp=w59;qOis_W^_g<6Imvzy;v*md8xW72L`FvdIg!r1hKPW!3e52S{c&9msnHfv>HSegl z=Vw=xiinHY96G1+-W;+*xN{QtyQTXJz^jQRkP-Pg(JvG9f40Ecy-M~0cr`Krua*zs z)js%xm%U`*_(kYq(|{UDZkagniEtURV919Vg=`4?q3YOH)>J+j9=Z0^keZJno5cqB zk}B*tH}awKu9^2d9>MygwE`e?hAX+Ivq(E)F{WU+q?JFwZ~|-@EBIfC<{XNyMOHPq}d z&+z7eNm)6YVtg<4_pMi?`}jXRp2G2y5fI8d(rpX!N&C%67E^q7!U>ERR#Rg!WHjU? znGy@4pN{0i5R14KtvHa2UNahwheT}A=;YkDRMPds6CrONMvkRHn^~nQ=aRhZt)+Fx2D~(#CXvs{8i8P5!`?|Gtq@~AC^Q6;oOLSwo zbDqJ*(B=BacBuQy8AF7LLYTE{JZ{t>wZY`q=c6CgOJRM#9vLEr2CfL0JfIL7ri z(M*#_yDJijolS_Ru0M`c8*h|>E19)4s=a;gvuG9#0>=LSt#jyw;Mw!RZCEnzfOUo3 z=N%rG+^2cyUyN*Ajej<4I8^AWD~Z4+9GbWfVAm9<3rGwB?!noj+Z`z^!dOfVBCijn z<|VyX!TsMtkutj!o1tZP0KJpU_l9#^R=FI2DsOb5CZG4i`M6D@DeNX6187N*IYP`b1sh+i%!jMRQykrtu-)gz7O#R2uZxt` z&8zp1)iH{gudXc*o5`|9Q-T7FEdi_Q$NtTjuP7$1oXR)joi=X441H4QJB!zq{_{9Phys7@U1bV}w6Q^nrE$s`^n()&oMB zHwVFD)`4CQ)ontjztzGbV(ACWAq>{`rnnpWoYc5~4eCurvhk&Nu{R9h~ z$eunKiM1YqDBwmo?aNXy$Ne0sy({r`#wd&AvK^82ANC;s;1D?k0S^KRT8?+YeaLQ% zLZg|~EJ_fAF%IB-T1*J#`~x{ldU)4nOn1QGBlrTF{$hZ_tEXhCM`=WyCE!SW}e7fusX2B?)aX2ukvZOBBE&H44)|5`1Fx4kTSv7$2l1r@3ktC~PpOzf{fP=<{a?a�o4UltkOplZ>9^a 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

AJ_PMaE|251w-~M{snHug;dZHT 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

C8v6L_lE|TEp^; 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 U?>hlU+A~s?h7w#sk?QOJ0SkYQH2?qr literal 0 HcmV?d00001 diff --git a/test/functional/fixtures/es_archiver/many_fields/mappings.json b/test/functional/fixtures/es_archiver/many_fields/mappings.json new file mode 100644 index 0000000000000..491085676c16e --- /dev/null +++ b/test/functional/fixtures/es_archiver/many_fields/mappings.json @@ -0,0 +1,38111 @@ +{ + "type": "index", + "value" : { + "index": "indices-stats", + "mappings" : { + "properties" : { + "_all" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "_shards" : { + "properties" : { + "failed" : { + "type" : "long" + }, + "successful" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indices" : { + "properties" : { + "apm-agent-configuration" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "apm-custom-link" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "ds-" : { + "properties" : { + "logs-deprecation" : { + "properties" : { + "elasticsearch-default-2022" : { + "properties" : { + "03" : { + "properties" : { + "07-000001" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + } + } + } + } + } + } + }, + "ds-ilm-history-5-2022" : { + "properties" : { + "03" : { + "properties" : { + "07-000001" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + } + } + }, + "fleet-agents-7" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "fleet-enrollment-api-keys-7" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "fleet-policies-7" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "fleet-policies-leader-7" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "fleet-servers-7" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "geoip_databases" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "kibana-event-log-8" : { + "properties" : { + "0" : { + "properties" : { + "1-000001" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "min_retained_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + } + } + }, + "kibana_8" : { + "properties" : { + "0" : { + "properties" : { + "1_001" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + } + } + }, + "kibana_security_session_1" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "kibana_task_manager_8" : { + "properties" : { + "0" : { + "properties" : { + "1_001" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + } + } + }, + "security-7" : { + "properties" : { + "primaries" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "shards" : { + "properties" : { + "0" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "commit" : { + "properties" : { + "generation" : { + "type" : "long" + }, + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "num_docs" : { + "type" : "long" + }, + "user_data" : { + "properties" : { + "es_version" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "history_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "local_checkpoint" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_seq_no" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "translog_uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "retention_leases" : { + "properties" : { + "leases" : { + "properties" : { + "id" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "retaining_seq_no" : { + "type" : "long" + }, + "source" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "timestamp" : { + "type" : "long" + } + } + }, + "primary_term" : { + "type" : "long" + }, + "version" : { + "type" : "long" + } + } + }, + "routing" : { + "properties" : { + "node" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "primary" : { + "type" : "boolean" + }, + "state" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "seq_no" : { + "properties" : { + "global_checkpoint" : { + "type" : "long" + }, + "local_checkpoint" : { + "type" : "long" + }, + "max_seq_no" : { + "type" : "long" + } + } + }, + "shard_path" : { + "properties" : { + "data_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "is_custom_data_path" : { + "type" : "boolean" + }, + "state_path" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + } + } + }, + "total" : { + "properties" : { + "bulk" : { + "properties" : { + "avg_size_in_bytes" : { + "type" : "long" + }, + "avg_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "avg_time_in_millis" : { + "type" : "long" + }, + "total_operations" : { + "type" : "long" + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "completion" : { + "properties" : { + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + } + } + }, + "docs" : { + "properties" : { + "count" : { + "type" : "long" + }, + "deleted" : { + "type" : "long" + } + } + }, + "fielddata" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + } + } + }, + "flush" : { + "properties" : { + "periodic" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "get" : { + "properties" : { + "current" : { + "type" : "long" + }, + "exists_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "exists_time_in_millis" : { + "type" : "long" + }, + "exists_total" : { + "type" : "long" + }, + "getTime" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "missing_time_in_millis" : { + "type" : "long" + }, + "missing_total" : { + "type" : "long" + }, + "time_in_millis" : { + "type" : "long" + }, + "total" : { + "type" : "long" + } + } + }, + "indexing" : { + "properties" : { + "delete_current" : { + "type" : "long" + }, + "delete_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "delete_time_in_millis" : { + "type" : "long" + }, + "delete_total" : { + "type" : "long" + }, + "index_current" : { + "type" : "long" + }, + "index_failed" : { + "type" : "long" + }, + "index_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_time_in_millis" : { + "type" : "long" + }, + "index_total" : { + "type" : "long" + }, + "is_throttled" : { + "type" : "boolean" + }, + "noop_update_total" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "merges" : { + "properties" : { + "current" : { + "type" : "long" + }, + "current_docs" : { + "type" : "long" + }, + "current_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "current_size_in_bytes" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_auto_throttle" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_auto_throttle_in_bytes" : { + "type" : "long" + }, + "total_docs" : { + "type" : "long" + }, + "total_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_size_in_bytes" : { + "type" : "long" + }, + "total_stopped_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_stopped_time_in_millis" : { + "type" : "long" + }, + "total_throttled_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_throttled_time_in_millis" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "query_cache" : { + "properties" : { + "cache_count" : { + "type" : "long" + }, + "cache_size" : { + "type" : "long" + }, + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + }, + "total_count" : { + "type" : "long" + } + } + }, + "recovery" : { + "properties" : { + "current_as_source" : { + "type" : "long" + }, + "current_as_target" : { + "type" : "long" + }, + "throttle_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "throttle_time_in_millis" : { + "type" : "long" + } + } + }, + "refresh" : { + "properties" : { + "external_total" : { + "type" : "long" + }, + "external_total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "external_total_time_in_millis" : { + "type" : "long" + }, + "listeners" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + }, + "request_cache" : { + "properties" : { + "evictions" : { + "type" : "long" + }, + "hit_count" : { + "type" : "long" + }, + "memory_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_size_in_bytes" : { + "type" : "long" + }, + "miss_count" : { + "type" : "long" + } + } + }, + "search" : { + "properties" : { + "fetch_current" : { + "type" : "long" + }, + "fetch_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fetch_time_in_millis" : { + "type" : "long" + }, + "fetch_total" : { + "type" : "long" + }, + "open_contexts" : { + "type" : "long" + }, + "query_current" : { + "type" : "long" + }, + "query_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "query_time_in_millis" : { + "type" : "long" + }, + "query_total" : { + "type" : "long" + }, + "scroll_current" : { + "type" : "long" + }, + "scroll_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "scroll_time_in_millis" : { + "type" : "long" + }, + "scroll_total" : { + "type" : "long" + }, + "suggest_current" : { + "type" : "long" + }, + "suggest_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "suggest_time_in_millis" : { + "type" : "long" + }, + "suggest_total" : { + "type" : "long" + } + } + }, + "segments" : { + "properties" : { + "count" : { + "type" : "long" + }, + "doc_values_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "doc_values_memory_in_bytes" : { + "type" : "long" + }, + "file_sizes" : { + "type" : "object" + }, + "fixed_bit_set" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "fixed_bit_set_memory_in_bytes" : { + "type" : "long" + }, + "index_writer_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "index_writer_memory_in_bytes" : { + "type" : "long" + }, + "max_unsafe_auto_id_timestamp" : { + "type" : "long" + }, + "memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "memory_in_bytes" : { + "type" : "long" + }, + "norms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "norms_memory_in_bytes" : { + "type" : "long" + }, + "points_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "points_memory_in_bytes" : { + "type" : "long" + }, + "stored_fields_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "stored_fields_memory_in_bytes" : { + "type" : "long" + }, + "term_vectors_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "term_vectors_memory_in_bytes" : { + "type" : "long" + }, + "terms_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "terms_memory_in_bytes" : { + "type" : "long" + }, + "version_map_memory" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "version_map_memory_in_bytes" : { + "type" : "long" + } + } + }, + "shard_stats" : { + "properties" : { + "total_count" : { + "type" : "long" + } + } + }, + "store" : { + "properties" : { + "reserved" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "reserved_in_bytes" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "total_data_set_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_data_set_size_in_bytes" : { + "type" : "long" + } + } + }, + "translog" : { + "properties" : { + "earliest_last_modified_age" : { + "type" : "long" + }, + "operations" : { + "type" : "long" + }, + "size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "size_in_bytes" : { + "type" : "long" + }, + "uncommitted_operations" : { + "type" : "long" + }, + "uncommitted_size" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "uncommitted_size_in_bytes" : { + "type" : "long" + } + } + }, + "warmer" : { + "properties" : { + "current" : { + "type" : "long" + }, + "total" : { + "type" : "long" + }, + "total_time" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + }, + "total_time_in_millis" : { + "type" : "long" + } + } + } + } + }, + "uuid" : { + "type" : "text", + "fields" : { + "keyword" : { + "type" : "keyword", + "ignore_above" : 256 + } + } + } + } + } + } + } + } + }, + "settings" : { + "index" : { + "mapping" : { + "total_fields" : { + "limit" : "50000" + } + }, + "number_of_shards" : "1", + "number_of_replicas" : "0" + } + } + } +} diff --git a/test/functional/fixtures/kbn_archiver/many_fields_data_view.json b/test/functional/fixtures/kbn_archiver/many_fields_data_view.json new file mode 100644 index 0000000000000..c5f1366b734de --- /dev/null +++ b/test/functional/fixtures/kbn_archiver/many_fields_data_view.json @@ -0,0 +1,18 @@ +{ + "attributes": { + "fieldAttrs": "{}", + "fields": "[]", + "runtimeFieldMap": "{}", + "title": "indices-stats*", + "typeMeta": "{}" + }, + "coreMigrationVersion": "8.3.0", + "id": "35796250-bb09-11ec-a8e4-a9868e049a39", + "migrationVersion": { + "index-pattern": "8.0.0" + }, + "references": [], + "type": "index-pattern", + "updated_at": "2022-04-13T09:07:56.793Z", + "version": "WzQwLDFd" +} \ No newline at end of file diff --git a/x-pack/test/performance/tests/playwright/index.ts b/x-pack/test/performance/tests/playwright/index.ts index 05dfe4cdfbc81..d7e7c43b00178 100644 --- a/x-pack/test/performance/tests/playwright/index.ts +++ b/x-pack/test/performance/tests/playwright/index.ts @@ -15,6 +15,7 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) { loadTestFile(require.resolve('./flight_dashboard')); loadTestFile(require.resolve('./web_logs_dashboard')); loadTestFile(require.resolve('./promotion_tracking_dashboard')); + loadTestFile(require.resolve('./many_fields_discover')); after(async () => { await performance.shutdownBrowser(); diff --git a/x-pack/test/performance/tests/playwright/many_fields_discover.ts b/x-pack/test/performance/tests/playwright/many_fields_discover.ts new file mode 100644 index 0000000000000..86324aebc6016 --- /dev/null +++ b/x-pack/test/performance/tests/playwright/many_fields_discover.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { FtrProviderContext } from '../../ftr_provider_context'; +import { StepCtx } from '../../services/performance'; + +export default function manyFieldsDiscover({ getService }: FtrProviderContext) { + describe('many_fields_discover', () => { + const performance = getService('performance'); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + + before(async () => { + await kibanaServer.importExport.load( + 'test/functional/fixtures/kbn_archiver/many_fields_data_view' + ); + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/many_fields'); + }); + + after(async () => { + await kibanaServer.importExport.unload( + 'test/functional/fixtures/kbn_archiver/many_fields_data_view' + ); + await esArchiver.unload('test/functional/fixtures/es_archiver/many_fields'); + }); + + it('many_fields_discover', async () => { + await performance.runUserJourney( + 'many_fields_discover', + [ + { + name: 'Go to Discover Page', + handler: async ({ page, kibanaUrl }: StepCtx) => { + await page.goto(`${kibanaUrl}/app/discover`); + await page.waitForSelector('[data-test-subj="discoverDocTable"]'); + }, + }, + { + name: 'Expand the first document', + handler: async ({ page }) => { + const expandButtons = page.locator('[data-test-subj="docTableExpandToggleColumn"]'); + await expandButtons.first().click(); + await page.locator('text="Expanded document"'); + }, + }, + ], + { + requireAuth: false, + } + ); + }); + }); +} From 3fb2ab67131d26e948053df58ee1a01a4fe96290 Mon Sep 17 00:00:00 2001 From: Or Ouziel Date: Thu, 14 Apr 2022 14:35:58 +0300 Subject: [PATCH 055/305] [Cloud Posture] add findings group selector (#129897) --- .../common/constants.ts | 1 + .../pages/findings/findings_container.tsx | 48 +++++++++++++++++-- .../findings/findings_group_by_selector.tsx | 35 ++++++++++++++ 3 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 x-pack/plugins/cloud_security_posture/public/pages/findings/findings_group_by_selector.tsx diff --git a/x-pack/plugins/cloud_security_posture/common/constants.ts b/x-pack/plugins/cloud_security_posture/common/constants.ts index 37cddf0eba9a5..6f916f4911b7d 100644 --- a/x-pack/plugins/cloud_security_posture/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/common/constants.ts @@ -29,4 +29,5 @@ export const INTERNAL_FEATURE_FLAGS = { showBenchmarks: false, showManageRulesMock: false, showRisksMock: false, + showFindingsGroupBy: false, } as const; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_container.tsx index 5b1d60b69e069..ff1068d72d80d 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_container.tsx @@ -4,10 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React from 'react'; -import { EuiSpacer, EuiTitle, useEuiTheme } from '@elastic/eui'; +import React, { useMemo } from 'react'; +import { EuiComboBoxOptionOption, EuiSpacer, EuiTitle, useEuiTheme } from '@elastic/eui'; import { css } from '@emotion/react'; import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; import { FindingsTable } from './findings_table'; import { FindingsSearchBar } from './findings_search_bar'; import * as TEST_SUBJECTS from './test_subjects'; @@ -15,20 +16,46 @@ import type { DataView } from '../../../../../../src/plugins/data/common'; import { SortDirection } from '../../../../../../src/plugins/data/common'; import { useUrlQuery } from '../../common/hooks/use_url_query'; import { useFindings, type CspFindingsRequest } from './use_findings'; +import { FindingsGroupBySelector } from './findings_group_by_selector'; +import { INTERNAL_FEATURE_FLAGS } from '../../../common/constants'; + +export type GroupBy = 'none' | 'resourceType'; // TODO: define this as a schema with default values -const getDefaultQuery = (): CspFindingsRequest => ({ +const getDefaultQuery = (): CspFindingsRequest & { groupBy: GroupBy } => ({ query: { language: 'kuery', query: '' }, filters: [], sort: [{ ['@timestamp']: SortDirection.desc }], from: 0, size: 10, + groupBy: 'none', }); +const getGroupByOptions = (): Array> => [ + { + value: 'none', + label: i18n.translate('xpack.csp.findings.groupBySelector.groupByNoneLabel', { + defaultMessage: 'None', + }), + }, + { + value: 'resourceType', + label: i18n.translate('xpack.csp.findings.groupBySelector.groupByResourceTypeLabel', { + defaultMessage: 'Resource Type', + }), + }, +]; + export const FindingsContainer = ({ dataView }: { dataView: DataView }) => { - const { urlQuery: findingsQuery, setUrlQuery, key } = useUrlQuery(getDefaultQuery); + const { + urlQuery: { groupBy, ...findingsQuery }, + setUrlQuery, + key, + } = useUrlQuery(getDefaultQuery); const findingsResult = useFindings(dataView, findingsQuery, key); const { euiTheme } = useEuiTheme(); + const groupByOptions = useMemo(getGroupByOptions, []); + return (

); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_group_by_selector.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_group_by_selector.tsx new file mode 100644 index 0000000000000..c6e61c16299a3 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_group_by_selector.tsx @@ -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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { EuiComboBox, EuiFormLabel, type EuiComboBoxOptionOption } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import type { GroupBy } from './findings_container'; + +interface Props { + type: GroupBy; + options: Array>; + onChange(selectedOptions: Array>): void; +} + +export const FindingsGroupBySelector = ({ type, options, onChange }: Props) => ( + } + singleSelection={{ asPlainText: true }} + options={options} + selectedOptions={options.filter((o) => o.value === type)} + onChange={onChange} + /> +); + +const GroupByLabel = () => ( + + + +); From 3af9f04ff4f0a6660c15276fe8bf80b2ec2ac0e2 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Thu, 14 Apr 2022 13:39:49 +0200 Subject: [PATCH 056/305] [APM] Don't show "no services" message if data is not fully loaded (#130234) --- .../app/service_inventory/index.tsx | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/service_inventory/index.tsx b/x-pack/plugins/apm/public/components/app/service_inventory/index.tsx index 082ab1733547e..a00060d9d3ddb 100644 --- a/x-pack/plugins/apm/public/components/app/service_inventory/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_inventory/index.tsx @@ -141,11 +141,21 @@ export function ServiceInventory() { !userHasDismissedCallout && shouldDisplayMlCallout(anomalyDetectionSetupState); - const isLoading = - sortedAndFilteredServicesFetch.status === FETCH_STATUS.LOADING || - (sortedAndFilteredServicesFetch.status === FETCH_STATUS.SUCCESS && - sortedAndFilteredServicesFetch.data?.services.length === 0 && - mainStatisticsFetch.status === FETCH_STATUS.LOADING); + const useOptimizedSorting = useKibana().services.uiSettings?.get( + apmServiceInventoryOptimizedSorting + ); + + let isLoading: boolean; + + if (useOptimizedSorting) { + isLoading = + sortedAndFilteredServicesFetch.status === FETCH_STATUS.LOADING || + (sortedAndFilteredServicesFetch.status === FETCH_STATUS.SUCCESS && + sortedAndFilteredServicesFetch.data?.services.length === 0 && + mainStatisticsFetch.status === FETCH_STATUS.LOADING); + } else { + isLoading = mainStatisticsFetch.status === FETCH_STATUS.LOADING; + } const isFailure = mainStatisticsFetch.status === FETCH_STATUS.FAILURE; const noItemsMessage = ( @@ -169,9 +179,7 @@ export function ServiceInventory() { ...preloadedServices, ].some((item) => 'healthStatus' in item); - const tiebreakerField = useKibana().services.uiSettings?.get( - apmServiceInventoryOptimizedSorting - ) + const tiebreakerField = useOptimizedSorting ? ServiceInventoryFieldName.ServiceName : ServiceInventoryFieldName.Throughput; From 4835a5d7d1c4ef5a922983de3be6742d2359ff05 Mon Sep 17 00:00:00 2001 From: Robert Austin Date: Thu, 14 Apr 2022 08:09:23 -0400 Subject: [PATCH 057/305] [Security Solution] remove unused BrowserField references (#130206) A property was passed through many react components, but never used. This commit cleans this up. --- .../preview_table_cell_renderer.test.tsx | 1 - .../preview_table_cell_renderer.tsx | 4 - .../row_renderers_browser/examples/alerts.tsx | 1 - .../row_renderers_browser/examples/auditd.tsx | 1 - .../examples/auditd_file.tsx | 1 - .../examples/library.tsx | 1 - .../examples/netflow.tsx | 1 - .../examples/registry.tsx | 1 - .../examples/suricata.tsx | 1 - .../row_renderers_browser/examples/system.tsx | 1 - .../examples/system_dns.tsx | 1 - .../examples/system_endgame_process.tsx | 1 - .../examples/system_file.tsx | 1 - .../examples/system_fim.tsx | 1 - .../examples/system_security_event.tsx | 1 - .../examples/system_socket.tsx | 1 - .../examples/threat_match.tsx | 1 - .../row_renderers_browser/examples/zeek.tsx | 1 - .../components/timeline/body/events/index.tsx | 4 - .../timeline/body/events/stateful_event.tsx | 39 +- .../events/stateful_row_renderer/index.tsx | 5 - .../components/timeline/body/index.tsx | 1 - .../generic_row_renderer.test.tsx.snap | 2 - .../renderers/auditd/generic_details.test.tsx | 7 - .../body/renderers/auditd/generic_details.tsx | 2 - .../auditd/generic_file_details.test.tsx | 7 - .../renderers/auditd/generic_file_details.tsx | 2 - .../auditd/generic_row_renderer.test.tsx | 10 - .../renderers/auditd/generic_row_renderer.tsx | 6 +- .../body/renderers/column_renderer.ts | 3 - .../cti/threat_match_row_renderer.test.tsx | 1 - .../dns/dns_request_event_details.test.tsx | 2 - .../dns/dns_request_event_details.tsx | 2 - .../endgame_security_event_details.test.tsx | 5 - .../endgame_security_event_details.tsx | 2 - .../body/renderers/get_row_renderer.test.tsx | 8 - .../netflow/netflow_row_renderer.test.tsx | 5 - .../renderers/plain_row_renderer.test.tsx | 3 - .../renderers/reason_column_renderer.test.tsx | 10 +- .../body/renderers/reason_column_renderer.tsx | 12 +- .../suricata_row_renderer.test.tsx.snap | 590 ------------------ .../suricata/suricata_details.test.tsx | 23 +- .../renderers/suricata/suricata_details.tsx | 2 - .../suricata/suricata_row_renderer.test.tsx | 4 - .../suricata/suricata_row_renderer.tsx | 9 +- .../generic_row_renderer.test.tsx.snap | 2 - .../renderers/system/generic_details.test.tsx | 6 - .../body/renderers/system/generic_details.tsx | 2 - .../system/generic_file_details.test.tsx | 7 - .../renderers/system/generic_file_details.tsx | 2 - .../system/generic_row_renderer.test.tsx | 67 -- .../renderers/system/generic_row_renderer.tsx | 27 +- .../__snapshots__/zeek_details.test.tsx.snap | 590 ------------------ .../zeek_row_renderer.test.tsx.snap | 590 ------------------ .../body/renderers/zeek/zeek_details.test.tsx | 49 +- .../body/renderers/zeek/zeek_details.tsx | 2 - .../renderers/zeek/zeek_row_renderer.test.tsx | 3 - .../body/renderers/zeek/zeek_row_renderer.tsx | 9 +- .../default_cell_renderer.test.tsx | 1 - .../cell_rendering/default_cell_renderer.tsx | 1 - .../common/types/timeline/rows/index.ts | 3 - .../t_grid/body/events/stateful_event.tsx | 11 +- .../events/stateful_row_renderer/index.tsx | 5 - .../public/components/t_grid/body/index.tsx | 1 - .../renderers/plain_row_renderer.test.tsx | 4 +- .../t_grid/event_rendered_view/index.tsx | 7 +- .../plugins/timelines/public/mock/t_grid.tsx | 1 - 67 files changed, 45 insertions(+), 2132 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview/preview_table_cell_renderer.test.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview/preview_table_cell_renderer.test.tsx index 37b03dbc3fd88..ea08e97c0bf03 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview/preview_table_cell_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview/preview_table_cell_renderer.test.tsx @@ -114,7 +114,6 @@ describe('PreviewTableCellRenderer', () => { expect(mockImplementation.renderColumn).toBeCalledWith({ asPlainText: false, - browserFields, columnName: header.id, ecsData, eventId, diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview/preview_table_cell_renderer.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview/preview_table_cell_renderer.tsx index 0e9df27827e47..f388f72c5494c 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview/preview_table_cell_renderer.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview/preview_table_cell_renderer.tsx @@ -18,7 +18,6 @@ import { CellValueElementProps } from '../../../../../../timelines/common'; export const PreviewRenderCellValue: React.FC< EuiDataGridCellValueElementProps & CellValueElementProps > = ({ - browserFields, columnId, data, ecsData, @@ -38,7 +37,6 @@ export const PreviewRenderCellValue: React.FC< truncate, }) => ( = ({ - browserFields, data, ecsData, eventId, @@ -95,7 +92,6 @@ export const PreviewTableCellRenderer: React.FC = ({ {getColumnRenderer(header.id, columnRenderers, data).renderColumn({ asPlainText, - browserFields, columnName: header.id, ecsData, eventId, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/alerts.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/alerts.tsx index d6aa34f2528e5..23456e62a26f7 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/alerts.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/alerts.tsx @@ -24,7 +24,6 @@ const AlertsExampleComponent: React.FC = () => { return ( <> {alertsRowRenderer.renderRow({ - browserFields: {}, data: mockEndpointProcessExecutionMalwarePreventionAlert, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/auditd.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/auditd.tsx index 2c6ce5886462b..f6b3962412267 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/auditd.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/auditd.tsx @@ -21,7 +21,6 @@ const AuditdExampleComponent: React.FC = () => { return ( <> {auditdRowRenderer.renderRow({ - browserFields: {}, data: mockTimelineData[26].ecs, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/auditd_file.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/auditd_file.tsx index a525b26571dc8..fff934ed55039 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/auditd_file.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/auditd_file.tsx @@ -21,7 +21,6 @@ const AuditdFileExampleComponent: React.FC = () => { return ( <> {auditdFileRowRenderer.renderRow({ - browserFields: {}, data: mockTimelineData[27].ecs, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/library.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/library.tsx index f8704b63fe47e..cf1ddafcd4b0a 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/library.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/library.tsx @@ -21,7 +21,6 @@ const LibraryExampleComponent: React.FC = () => { return ( <> {libraryRowRenderer.renderRow({ - browserFields: {}, data: mockEndpointLibraryLoadEvent, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/netflow.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/netflow.tsx index c5a0f09440899..b9755bcf573b5 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/netflow.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/netflow.tsx @@ -14,7 +14,6 @@ import { ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID } from '../constants'; const NetflowExampleComponent: React.FC = () => ( <> {netflowRowRenderer.renderRow({ - browserFields: {}, data: getMockNetflowData(), isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/registry.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/registry.tsx index 67859db1a5ea4..8742b0e62dfa3 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/registry.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/registry.tsx @@ -21,7 +21,6 @@ const RegistryExampleComponent: React.FC = () => { return ( <> {registryRowRenderer.renderRow({ - browserFields: {}, data: mockEndpointRegistryModificationEvent, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/suricata.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/suricata.tsx index 1e6caca2effa9..1c26ee13229bd 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/suricata.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/suricata.tsx @@ -14,7 +14,6 @@ import { ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID } from '../constants'; const SuricataExampleComponent: React.FC = () => ( <> {suricataRowRenderer.renderRow({ - browserFields: {}, data: mockTimelineData[2].ecs, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system.tsx index 7d38f8feaace6..649edd08c450f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system.tsx @@ -21,7 +21,6 @@ const SystemExampleComponent: React.FC = () => { return ( <> {systemRowRenderer.renderRow({ - browserFields: {}, data: mockEndgameTerminationEvent, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_dns.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_dns.tsx index 72c5060b27701..0566cf503443b 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_dns.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_dns.tsx @@ -17,7 +17,6 @@ const SystemDnsExampleComponent: React.FC = () => { return ( <> {systemDnsRowRenderer.renderRow({ - browserFields: {}, data: mockEndgameDnsRequest, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_endgame_process.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_endgame_process.tsx index 6103746b3238b..3af5d401bc3ac 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_endgame_process.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_endgame_process.tsx @@ -21,7 +21,6 @@ const SystemEndgameProcessExampleComponent: React.FC = () => { return ( <> {systemEndgameProcessRowRenderer.renderRow({ - browserFields: {}, data: mockEndgameCreationEvent, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_file.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_file.tsx index cb8668536f8d2..d693c7df1b06f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_file.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_file.tsx @@ -21,7 +21,6 @@ const SystemFileExampleComponent: React.FC = () => { return ( <> {systemFileRowRenderer.renderRow({ - browserFields: {}, data: mockEndgameFileDeleteEvent, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_fim.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_fim.tsx index 12ad132131d1b..257719e573986 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_fim.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_fim.tsx @@ -21,7 +21,6 @@ const SystemFimExampleComponent: React.FC = () => { return ( <> {systemFimRowRenderer.renderRow({ - browserFields: {}, data: mockEndgameFileCreateEvent, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_security_event.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_security_event.tsx index 8dfb0bf998738..9490a9e776e73 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_security_event.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_security_event.tsx @@ -19,7 +19,6 @@ const SystemSecurityEventExampleComponent: React.FC = () => { return ( <> {systemSecurityEventRowRenderer.renderRow({ - browserFields: {}, data: mockEndgameUserLogon, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_socket.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_socket.tsx index 7fa430e812625..47dd0122a47fe 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_socket.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/system_socket.tsx @@ -20,7 +20,6 @@ const SystemSocketExampleComponent: React.FC = () => { return ( <> {systemSocketRowRenderer.renderRow({ - browserFields: {}, data: mockEndgameIpv4ConnectionAcceptEvent, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/threat_match.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/threat_match.tsx index 73d458a23ca17..cffa39584a624 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/threat_match.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/threat_match.tsx @@ -14,7 +14,6 @@ import { ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID } from '../constants'; const ThreatMatchExampleComponent: React.FC = () => ( <> {threatMatchRowRenderer.renderRow({ - browserFields: {}, data: mockTimelineData[31].ecs, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/zeek.tsx b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/zeek.tsx index 83d9e0122e971..f47fa275245a6 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/zeek.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/row_renderers_browser/examples/zeek.tsx @@ -14,7 +14,6 @@ import { ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID } from '../constants'; const ZeekExampleComponent: React.FC = () => ( <> {zeekRowRenderer.renderRow({ - browserFields: {}, data: mockTimelineData[13].ecs, isDraggable: false, timelineId: ROW_RENDERER_BROWSER_EXAMPLE_TIMELINE_ID, diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/index.tsx index c09de87c87f32..69d97a4e248ea 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/index.tsx @@ -9,7 +9,6 @@ import React from 'react'; import { isEmpty } from 'lodash'; import { inputsModel } from '../../../../../common/store'; -import { BrowserFields } from '../../../../../common/containers/source'; import { TimelineItem, TimelineNonEcsData, @@ -31,7 +30,6 @@ const ARIA_ROW_INDEX_OFFSET = 2; interface Props { actionsColumnWidth: number; - browserFields: BrowserFields; columnHeaders: ColumnHeaderOptions[]; containerRef: React.MutableRefObject; data: TimelineItem[]; @@ -55,7 +53,6 @@ interface Props { const EventsComponent: React.FC = ({ actionsColumnWidth, - browserFields, columnHeaders, containerRef, data, @@ -81,7 +78,6 @@ const EventsComponent: React.FC = ({ ; - browserFields: BrowserFields; columnHeaders: ColumnHeaderOptions[]; event: TimelineItem; eventIdToNoteIds: Readonly>; @@ -78,7 +76,6 @@ EventsTrSupplementContainerWrapper.displayName = 'EventsTrSupplementContainerWra const StatefulEventComponent: React.FC = ({ actionsColumnWidth, - browserFields, containerRef, columnHeaders, event, @@ -236,31 +233,6 @@ const StatefulEventComponent: React.FC = ({ [dispatch, timelineId] ); - const RowRendererContent = useMemo( - () => ( - - - - ), - [ - ariaRowindex, - browserFields, - containerRef, - event, - lastFocusedAriaColindex, - rowRenderers, - timelineId, - ] - ); - return ( = ({ /> - {RowRendererContent} + + + diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/stateful_row_renderer/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/stateful_row_renderer/index.tsx index d71dfcae1b4e6..9e894613cd3f5 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/stateful_row_renderer/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/stateful_row_renderer/index.tsx @@ -15,7 +15,6 @@ import { getRowRendererClassName, } from '../../../../../../../../timelines/public'; import { RowRenderer } from '../../../../../../../common/types'; -import { BrowserFields } from '../../../../../../common/containers/source'; import { TimelineItem } from '../../../../../../../common/search_strategy/timeline'; import { getRowRenderer } from '../../renderers/get_row_renderer'; import { useStatefulEventFocus } from '../use_stateful_event_focus'; @@ -37,7 +36,6 @@ import * as i18n from '../translations'; */ export const StatefulRowRenderer = ({ ariaRowindex, - browserFields, containerRef, event, lastFocusedAriaColindex, @@ -45,7 +43,6 @@ export const StatefulRowRenderer = ({ timelineId, }: { ariaRowindex: number; - browserFields: BrowserFields; containerRef: React.MutableRefObject; event: TimelineItem; lastFocusedAriaColindex: number; @@ -78,7 +75,6 @@ export const StatefulRowRenderer = ({
{rowRenderer.renderRow({ - browserFields, data: event.ecs, isDraggable: true, timelineId, @@ -90,7 +86,6 @@ export const StatefulRowRenderer = ({ ), [ ariaRowindex, - browserFields, event.ecs, focusOwnership, onFocus, diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/index.tsx index 8501a4327d15b..abcbdf4e1476f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/index.tsx @@ -260,7 +260,6 @@ export const StatefulBody = React.memo( { describe('rendering', () => { test('it renders the default AuditAcquiredCredsDetails', () => { - // I cannot and do not want to use BrowserFields for the mocks for the snapshot tests as they are too heavy - const browserFields: BrowserFields = {}; const wrapper = shallow( @@ -50,7 +45,6 @@ describe('GenericDetails', () => { @@ -66,7 +60,6 @@ describe('GenericDetails', () => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_details.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_details.tsx index fb14d44995c95..bfb4b8677d900 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_details.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_details.tsx @@ -9,7 +9,6 @@ import { EuiFlexGroup, EuiSpacer } from '@elastic/eui'; import { get } from 'lodash/fp'; import React from 'react'; -import { BrowserFields } from '../../../../../../common/containers/source'; import { Ecs } from '../../../../../../../common/ecs'; import { DraggableBadge } from '../../../../../../common/components/draggables'; @@ -116,7 +115,6 @@ export const AuditdGenericLine = React.memo( AuditdGenericLine.displayName = 'AuditdGenericLine'; interface GenericDetailsProps { - browserFields: BrowserFields; data: Ecs; isDraggable?: boolean; contextId: string; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_file_details.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_file_details.test.tsx index a4c5944f50623..a28603d827538 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_file_details.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_file_details.test.tsx @@ -9,8 +9,6 @@ import { shallow } from 'enzyme'; import React from 'react'; import '../../../../../../common/mock/match_media'; -import { BrowserFields } from '../../../../../../common/containers/source'; -import { mockBrowserFields } from '../../../../../../common/containers/source/mock'; import { mockTimelineData, TestProviders } from '../../../../../../common/mock'; import { AuditdGenericFileDetails, AuditdGenericFileLine } from './generic_file_details'; import { useMountAppended } from '../../../../../../common/utils/use_mount_appended'; @@ -30,13 +28,10 @@ describe('GenericFileDetails', () => { describe('rendering', () => { test('it renders the default GenericFileDetails', () => { - // I cannot and do not want to use BrowserFields for the mocks for the snapshot tests as they are too heavy - const browserFields: BrowserFields = {}; const wrapper = shallow( { { ( AuditdGenericFileLine.displayName = 'AuditdGenericFileLine'; interface GenericDetailsProps { - browserFields: BrowserFields; contextId: string; data: Ecs; text: string; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_row_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_row_renderer.test.tsx index dcfb0efc11455..a5571f9c50b43 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_row_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_row_renderer.test.tsx @@ -10,8 +10,6 @@ import { cloneDeep } from 'lodash/fp'; import React from 'react'; import { RowRenderer } from '../../../../../../../common/types'; -import { BrowserFields } from '../../../../../../common/containers/source'; -import { mockBrowserFields } from '../../../../../../common/containers/source/mock'; import { Ecs } from '../../../../../../../common/ecs'; import { mockTimelineData, TestProviders } from '../../../../../../common/mock'; import { useMountAppended } from '../../../../../../common/utils/use_mount_appended'; @@ -49,10 +47,7 @@ describe('GenericRowRenderer', () => { }); }); test('renders correctly against snapshot', () => { - // I cannot and do not want to use BrowserFields mocks for the snapshot tests as they are too heavy - const browserFields: BrowserFields = {}; const children = connectedToRenderer.renderRow({ - browserFields, data: auditd, isDraggable: true, timelineId: 'test', @@ -82,7 +77,6 @@ describe('GenericRowRenderer', () => { test('should render a auditd row', () => { const children = connectedToRenderer.renderRow({ - browserFields: mockBrowserFields, data: auditd, isDraggable: true, timelineId: 'test', @@ -113,10 +107,7 @@ describe('GenericRowRenderer', () => { }); test('renders correctly against snapshot', () => { - // I cannot and do not want to use BrowserFields mocks for the snapshot tests as they are too heavy - const browserFields: BrowserFields = {}; const children = fileToRenderer.renderRow({ - browserFields, data: auditdFile, isDraggable: true, timelineId: 'test', @@ -146,7 +137,6 @@ describe('GenericRowRenderer', () => { test('should render a auditd row', () => { const children = fileToRenderer.renderRow({ - browserFields: mockBrowserFields, data: auditdFile, isDraggable: true, timelineId: 'test', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_row_renderer.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_row_renderer.tsx index 8ac1a24c9d389..87baa4aaffac0 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_row_renderer.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/auditd/generic_row_renderer.tsx @@ -34,10 +34,9 @@ export const createGenericAuditRowRenderer = ({ action.toLowerCase() === actionName ); }, - renderRow: ({ browserFields, data, isDraggable, timelineId }) => ( + renderRow: ({ data, isDraggable, timelineId }) => ( ( + renderRow: ({ data, isDraggable, timelineId }) => ( boolean; renderColumn: ({ - browserFields, className, columnName, eventId, @@ -31,7 +29,6 @@ export interface ColumnRenderer { values, }: { asPlainText?: boolean; - browserFields?: BrowserFields; className?: string; columnName: string; ecsData?: Ecs; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/cti/threat_match_row_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/cti/threat_match_row_renderer.test.tsx index ca15f7f3082a8..8fa827a274fd7 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/cti/threat_match_row_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/cti/threat_match_row_renderer.test.tsx @@ -54,7 +54,6 @@ describe('threatMatchRowRenderer', () => { describe('#renderRow', () => { it('renders correctly against snapshot', () => { const children = threatMatchRowRenderer.renderRow({ - browserFields: {}, data: threatMatchData, isDraggable: true, timelineId: 'test', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/dns/dns_request_event_details.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/dns/dns_request_event_details.test.tsx index 0cf90982c9c31..78a19ba4c1990 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/dns/dns_request_event_details.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/dns/dns_request_event_details.test.tsx @@ -9,7 +9,6 @@ import React from 'react'; import '../../../../../../common/mock/match_media'; import { TestProviders } from '../../../../../../common/mock'; -import { mockBrowserFields } from '../../../../../../common/containers/source/mock'; import { mockEndgameDnsRequest } from '../../../../../../common/mock/mock_endgame_ecs_data'; import { useMountAppended } from '../../../../../../common/utils/use_mount_appended'; @@ -32,7 +31,6 @@ describe('DnsRequestEventDetails', () => { const wrapper = mount( { const wrapper = mount( { const wrapper = mount( { const wrapper = mount( { const wrapper = mount( { test('renders correctly against snapshot', () => { const rowRenderer = getRowRenderer(nonSuricata, defaultRowRenderers); const row = rowRenderer?.renderRow({ - browserFields: mockBrowserFields, data: nonSuricata, isDraggable: true, timelineId: 'test', @@ -70,7 +68,6 @@ describe('get_column_renderer', () => { test('should render plain row data when it is a non suricata row', () => { const rowRenderer = getRowRenderer(nonSuricata, defaultRowRenderers); const row = rowRenderer?.renderRow({ - browserFields: mockBrowserFields, data: nonSuricata, isDraggable: true, timelineId: 'test', @@ -86,7 +83,6 @@ describe('get_column_renderer', () => { test('should render a suricata row data when it is a suricata row', () => { const rowRenderer = getRowRenderer(suricata, defaultRowRenderers); const row = rowRenderer?.renderRow({ - browserFields: mockBrowserFields, data: suricata, isDraggable: true, timelineId: 'test', @@ -105,7 +101,6 @@ describe('get_column_renderer', () => { suricata.event = { ...suricata.event, ...{ category: ['network_traffic'] } }; const rowRenderer = getRowRenderer(suricata, defaultRowRenderers); const row = rowRenderer?.renderRow({ - browserFields: mockBrowserFields, data: suricata, isDraggable: true, timelineId: 'test', @@ -124,7 +119,6 @@ describe('get_column_renderer', () => { zeek.event = { ...zeek.event, ...{ category: ['network_traffic'] } }; const rowRenderer = getRowRenderer(zeek, defaultRowRenderers); const row = rowRenderer?.renderRow({ - browserFields: mockBrowserFields, data: zeek, isDraggable: true, timelineId: 'test', @@ -143,7 +137,6 @@ describe('get_column_renderer', () => { system.event = { ...system.event, ...{ category: ['network_traffic'] } }; const rowRenderer = getRowRenderer(system, defaultRowRenderers); const row = rowRenderer?.renderRow({ - browserFields: mockBrowserFields, data: system, isDraggable: true, timelineId: 'test', @@ -162,7 +155,6 @@ describe('get_column_renderer', () => { auditd.event = { ...auditd.event, ...{ category: ['network_traffic'] } }; const rowRenderer = getRowRenderer(auditd, defaultRowRenderers); const row = rowRenderer?.renderRow({ - browserFields: mockBrowserFields, data: auditd, isDraggable: true, timelineId: 'test', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/netflow/netflow_row_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/netflow/netflow_row_renderer.test.tsx index 01e05bbc365e9..f2f95dec90144 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/netflow/netflow_row_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/netflow/netflow_row_renderer.test.tsx @@ -9,8 +9,6 @@ import { shallow } from 'enzyme'; import React from 'react'; import '../../../../../../common/mock/match_media'; -import { BrowserFields } from '../../../../../../common/containers/source'; -import { mockBrowserFields } from '../../../../../../common/containers/source/mock'; import { Ecs } from '../../../../../../../common/ecs'; import { getMockNetflowData, TestProviders } from '../../../../../../common/mock'; import { useMountAppended } from '../../../../../../common/utils/use_mount_appended'; @@ -34,9 +32,7 @@ describe('netflowRowRenderer', () => { const mount = useMountAppended(); test('renders correctly against snapshot', () => { - const browserFields: BrowserFields = {}; const children = netflowRowRenderer.renderRow({ - browserFields, data: getMockNetflowData(), isDraggable: true, timelineId: 'test', @@ -106,7 +102,6 @@ describe('netflowRowRenderer', () => { test('should render netflow data', () => { const children = netflowRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: getMockNetflowData(), isDraggable: true, timelineId: 'test', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/plain_row_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/plain_row_renderer.test.tsx index f28c72253a4e7..da5a71d4c12f8 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/plain_row_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/plain_row_renderer.test.tsx @@ -9,7 +9,6 @@ import { mount, shallow } from 'enzyme'; import { cloneDeep } from 'lodash'; import React from 'react'; -import { mockBrowserFields } from '../../../../../common/containers/source/mock'; import { Ecs } from '../../../../../../common/ecs'; import { mockTimelineData } from '../../../../../common/mock'; import { plainRowRenderer } from './plain_row_renderer'; @@ -22,7 +21,6 @@ describe('plain_row_renderer', () => { test('renders correctly against snapshot', () => { const children = plainRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockDatum, isDraggable: true, timelineId: 'test', @@ -37,7 +35,6 @@ describe('plain_row_renderer', () => { test('should render a plain row', () => { const children = plainRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockDatum, isDraggable: true, timelineId: 'test', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/reason_column_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/reason_column_renderer.test.tsx index f71db57c1b42a..386bdb46b27e1 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/reason_column_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/reason_column_renderer.test.tsx @@ -14,7 +14,6 @@ import { reasonColumnRenderer } from './reason_column_renderer'; import { plainColumnRenderer } from './plain_column_renderer'; import { RowRendererId, ColumnHeaderOptions, RowRenderer } from '../../../../../../common/types'; -import { BrowserFields } from '../../../../../../common/search_strategy'; import { render } from '@testing-library/react'; import { TestProviders } from '../../../../../../../timelines/public/mock'; @@ -61,7 +60,6 @@ const rowRenderers: RowRenderer[] = [ renderRow: () => , }, ]; -const browserFields: BrowserFields = {}; const defaultProps = { columnName: REASON_FIELD_NAME, @@ -83,19 +81,18 @@ describe('reasonColumnRenderer', () => { }); describe('renderColumn', () => { - it('calls `plainColumnRenderer.renderColumn` when ecsData, rowRenderers or browserFields is empty', () => { + it('calls `plainColumnRenderer.renderColumn` when ecsData, or rowRenderers is empty', () => { reasonColumnRenderer.renderColumn(defaultProps); expect(plainColumnRenderer.renderColumn).toBeCalledTimes(1); }); - it("doesn't call `plainColumnRenderer.renderColumn` in expanded value when ecsData, rowRenderers or browserFields fields are not empty", () => { + it("doesn't call `plainColumnRenderer.renderColumn` in expanded value when ecsData, or rowRenderers fields are not empty", () => { reasonColumnRenderer.renderColumn({ ...defaultProps, isDetails: true, ecsData: invalidEcs, rowRenderers, - browserFields, }); expect(plainColumnRenderer.renderColumn).toBeCalledTimes(0); @@ -107,7 +104,6 @@ describe('reasonColumnRenderer', () => { isDetails: false, ecsData: invalidEcs, rowRenderers, - browserFields, }); expect(plainColumnRenderer.renderColumn).toBeCalledTimes(1); @@ -119,7 +115,6 @@ describe('reasonColumnRenderer', () => { isDetails: true, ecsData: invalidEcs, rowRenderers, - browserFields, }); const wrapper = render({renderedColumn}); @@ -133,7 +128,6 @@ describe('reasonColumnRenderer', () => { isDetails: true, ecsData: validEcs, rowRenderers, - browserFields, }); const wrapper = render({renderedColumn}); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/reason_column_renderer.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/reason_column_renderer.tsx index a5ba7360c966f..72fbc7be19dd2 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/reason_column_renderer.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/reason_column_renderer.tsx @@ -10,7 +10,6 @@ import { isEqual } from 'lodash/fp'; import React, { useMemo } from 'react'; import { ColumnHeaderOptions, RowRenderer } from '../../../../../../common/types'; -import { BrowserFields } from '../../../../../../common/search_strategy'; import { Ecs } from '../../../../../../common/ecs'; import { eventRendererNames } from '../../../row_renderers_browser/catalog/constants'; import { ColumnRenderer } from './column_renderer'; @@ -23,7 +22,6 @@ export const reasonColumnRenderer: ColumnRenderer = { isInstance: isEqual(REASON_FIELD_NAME), renderColumn: ({ - browserFields, columnName, ecsData, eventId, @@ -36,7 +34,6 @@ export const reasonColumnRenderer: ColumnRenderer = { truncate, values, }: { - browserFields?: BrowserFields; columnName: string; ecsData?: Ecs; eventId: string; @@ -49,10 +46,9 @@ export const reasonColumnRenderer: ColumnRenderer = { truncate?: boolean; values: string[] | undefined | null; }) => { - if (isDetails && values && ecsData && rowRenderers && browserFields) { + if (isDetails && values && ecsData && rowRenderers) { return values.map((value, i) => ( = ({ ecsData, rowRenderers, browserFields, timelineId, value }) => { +}> = ({ ecsData, rowRenderers, timelineId, value }) => { const rowRenderer = useMemo(() => getRowRenderer(ecsData, rowRenderers), [ecsData, rowRenderers]); const rowRender = useMemo(() => { return ( rowRenderer && rowRenderer.renderRow({ - browserFields, data: ecsData, isDraggable: false, timelineId, }) ); - }, [rowRenderer, browserFields, ecsData, timelineId]); + }, [rowRenderer, ecsData, timelineId]); return ( <> diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/__snapshots__/suricata_row_renderer.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/__snapshots__/suricata_row_renderer.test.tsx.snap index d6fccadf02e9d..36f62dc5ff728 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/__snapshots__/suricata_row_renderer.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/__snapshots__/suricata_row_renderer.test.tsx.snap @@ -4,596 +4,6 @@ exports[`suricata_row_renderer renders correctly against snapshot 1`] = ` { describe('rendering', () => { test('it renders the default SuricataDetails', () => { - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); test('it returns text if the data does contain suricata data', () => { const wrapper = mount( - + ); const removeEuiIconText = removeExternalLinkText(wrapper.text()).replaceAll( @@ -63,13 +52,7 @@ describe('SuricataDetails', () => { }); test('it returns null for text if the data contains no suricata data', () => { - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper.isEmptyRender()).toBeTruthy(); }); }); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_details.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_details.tsx index f096cd906f619..08eeb4248b6b6 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_details.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_details.tsx @@ -10,7 +10,6 @@ import { get } from 'lodash/fp'; import React from 'react'; import styled from 'styled-components'; -import { BrowserFields } from '../../../../../../common/containers/source'; import { Ecs } from '../../../../../../../common/ecs'; import { NetflowRenderer } from '../netflow'; @@ -24,7 +23,6 @@ const Details = styled.div` Details.displayName = 'Details'; export const SuricataDetails = React.memo<{ - browserFields: BrowserFields; data: Ecs; isDraggable?: boolean; timelineId: string; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_row_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_row_renderer.test.tsx index 2022904e548aa..bde4fb7f592aa 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_row_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_row_renderer.test.tsx @@ -10,7 +10,6 @@ import { cloneDeep } from 'lodash/fp'; import React from 'react'; import { removeExternalLinkText } from '@kbn/securitysolution-io-ts-utils'; -import { mockBrowserFields } from '../../../../../../common/containers/source/mock'; import { Ecs } from '../../../../../../../common/ecs'; import { mockTimelineData } from '../../../../../../common/mock'; import '../../../../../../common/mock/match_media'; @@ -42,7 +41,6 @@ describe('suricata_row_renderer', () => { test('renders correctly against snapshot', () => { const children = suricataRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: nonSuricata, isDraggable: true, timelineId: 'test', @@ -62,7 +60,6 @@ describe('suricata_row_renderer', () => { test('should render a suricata row', () => { const children = suricataRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: suricata, isDraggable: true, timelineId: 'test', @@ -85,7 +82,6 @@ describe('suricata_row_renderer', () => { test('should render a suricata row even if it does not have a suricata signature', () => { delete suricata?.suricata?.eve?.alert?.signature; const children = suricataRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: suricata, isDraggable: true, timelineId: 'test', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_row_renderer.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_row_renderer.tsx index 887ffdd9584a5..303e0e3f78ba1 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_row_renderer.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_row_renderer.tsx @@ -19,14 +19,9 @@ export const suricataRowRenderer: RowRenderer = { const module: string | null | undefined = get('event.module[0]', ecs); return module != null && module.toLowerCase() === 'suricata'; }, - renderRow: ({ browserFields, data, isDraggable, timelineId }) => ( + renderRow: ({ data, isDraggable, timelineId }) => ( - + ), }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/__snapshots__/generic_row_renderer.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/__snapshots__/generic_row_renderer.test.tsx.snap index 15443058f434e..99d495f3cd96d 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/__snapshots__/generic_row_renderer.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/__snapshots__/generic_row_renderer.test.tsx.snap @@ -4,7 +4,6 @@ exports[`GenericRowRenderer #createGenericFileRowRenderer renders correctly agai { describe('rendering', () => { test('it renders the default SystemGenericDetails', () => { - // I cannot and do not want to use BrowserFields for the mocks for the snapshot tests as they are too heavy - const browserFields: BrowserFields = {}; const wrapper = shallow( @@ -52,7 +47,6 @@ describe('SystemGenericDetails', () => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_details.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_details.tsx index 2cf42ecc9c670..10b2c39ab74ca 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_details.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_details.tsx @@ -9,7 +9,6 @@ import { EuiFlexGroup, EuiSpacer } from '@elastic/eui'; import { get } from 'lodash/fp'; import React from 'react'; -import { BrowserFields } from '../../../../../../common/containers/source'; import { Ecs } from '../../../../../../../common/ecs'; import { DraggableBadge } from '../../../../../../common/components/draggables'; import { OverflowField } from '../../../../../../common/components/tables/helpers'; @@ -141,7 +140,6 @@ export const SystemGenericLine = React.memo( SystemGenericLine.displayName = 'SystemGenericLine'; interface GenericDetailsProps { - browserFields: BrowserFields; contextId: string; data: Ecs; isDraggable?: boolean; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_file_details.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_file_details.test.tsx index 20a635a16bbaf..ff6ebcbd9ddde 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_file_details.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_file_details.test.tsx @@ -8,8 +8,6 @@ import { shallow } from 'enzyme'; import React from 'react'; -import { BrowserFields } from '../../../../../../common/containers/source'; -import { mockBrowserFields } from '../../../../../../common/containers/source/mock'; import '../../../../../../common/mock/match_media'; import { mockTimelineData, TestProviders } from '../../../../../../common/mock'; import { mockEndgameCreationEvent } from '../../../../../../common/mock/mock_endgame_ecs_data'; @@ -43,13 +41,10 @@ describe('SystemGenericFileDetails', () => { describe('rendering', () => { test('it renders the default SystemGenericDetails', () => { - // I cannot and do not want to use BrowserFields for the mocks for the snapshot tests as they are too heavy - const browserFields: BrowserFields = {}; const wrapper = shallow( @@ -63,7 +58,6 @@ describe('SystemGenericFileDetails', () => { @@ -80,7 +74,6 @@ describe('SystemGenericFileDetails', () => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_file_details.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_file_details.tsx index 9722f36e42eb0..d1a29dad8cf23 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_file_details.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_file_details.tsx @@ -9,7 +9,6 @@ import { EuiFlexGroup, EuiSpacer } from '@elastic/eui'; import { get } from 'lodash/fp'; import React from 'react'; -import { BrowserFields } from '../../../../../../common/containers/source'; import { Ecs } from '../../../../../../../common/ecs'; import { DraggableBadge } from '../../../../../../common/components/draggables'; import { OverflowField } from '../../../../../../common/components/tables/helpers'; @@ -251,7 +250,6 @@ export const SystemGenericFileLine = React.memo( SystemGenericFileLine.displayName = 'SystemGenericFileLine'; interface GenericDetailsProps { - browserFields: BrowserFields; contextId: string; data: Ecs; isDraggable?: boolean; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_row_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_row_renderer.test.tsx index 4b93c5accb590..3b2b17fc4cc38 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_row_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_row_renderer.test.tsx @@ -10,8 +10,6 @@ import { cloneDeep } from 'lodash/fp'; import React from 'react'; import { removeExternalLinkText } from '@kbn/securitysolution-io-ts-utils'; -import { BrowserFields } from '../../../../../../common/containers/source'; -import { mockBrowserFields } from '../../../../../../common/containers/source/mock'; import { Ecs } from '../../../../../../../common/ecs'; import { mockDnsEvent, @@ -118,10 +116,7 @@ describe('GenericRowRenderer', () => { }); }); test('renders correctly against snapshot', () => { - // I cannot and do not want to use BrowserFields mocks for the snapshot tests as they are too heavy - const browserFields: BrowserFields = {}; const children = connectedToRenderer.renderRow({ - browserFields, data: system, isDraggable: true, timelineId: 'test', @@ -151,7 +146,6 @@ describe('GenericRowRenderer', () => { }); test('should render a system row', () => { const children = connectedToRenderer.renderRow({ - browserFields: mockBrowserFields, data: system, isDraggable: true, timelineId: 'test', @@ -182,10 +176,7 @@ describe('GenericRowRenderer', () => { }); test('renders correctly against snapshot', () => { - // I cannot and do not want to use BrowserFields mocks for the snapshot tests as they are too heavy - const browserFields: BrowserFields = {}; const children = fileToRenderer.renderRow({ - browserFields, data: systemFile, isDraggable: true, timelineId: 'test', @@ -214,7 +205,6 @@ describe('GenericRowRenderer', () => { test('should render a system row', () => { const children = fileToRenderer.renderRow({ - browserFields: mockBrowserFields, data: systemFile, isDraggable: true, timelineId: 'test', @@ -246,7 +236,6 @@ describe('GenericRowRenderer', () => { {endpointAlertsRowRenderer.isInstance(mockEndpointFileCreationMalwarePreventionAlert) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileCreationMalwarePreventionAlert, isDraggable: true, timelineId: 'test', @@ -274,7 +263,6 @@ describe('GenericRowRenderer', () => { {endpointAlertsRowRenderer.isInstance(mockEndpointFileCreationMalwareDetectionAlert) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileCreationMalwareDetectionAlert, isDraggable: true, timelineId: 'test', @@ -304,7 +292,6 @@ describe('GenericRowRenderer', () => { mockEndpointFilesEncryptedRansomwarePreventionAlert ) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFilesEncryptedRansomwarePreventionAlert, isDraggable: true, timelineId: 'test', @@ -334,7 +321,6 @@ describe('GenericRowRenderer', () => { mockEndpointFilesEncryptedRansomwareDetectionAlert ) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFilesEncryptedRansomwareDetectionAlert, isDraggable: true, timelineId: 'test', @@ -364,7 +350,6 @@ describe('GenericRowRenderer', () => { mockEndpointFileModificationMalwarePreventionAlert ) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileModificationMalwarePreventionAlert, isDraggable: true, timelineId: 'test', @@ -394,7 +379,6 @@ describe('GenericRowRenderer', () => { mockEndpointFileModificationMalwareDetectionAlert ) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileModificationMalwareDetectionAlert, isDraggable: true, timelineId: 'test', @@ -422,7 +406,6 @@ describe('GenericRowRenderer', () => { {endpointAlertsRowRenderer.isInstance(mockEndpointFileRenameMalwarePreventionAlert) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileRenameMalwarePreventionAlert, isDraggable: true, timelineId: 'test', @@ -450,7 +433,6 @@ describe('GenericRowRenderer', () => { {endpointAlertsRowRenderer.isInstance(mockEndpointFileRenameMalwareDetectionAlert) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileRenameMalwareDetectionAlert, isDraggable: true, timelineId: 'test', @@ -480,7 +462,6 @@ describe('GenericRowRenderer', () => { mockEndpointProcessExecutionMalwarePreventionAlert ) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointProcessExecutionMalwarePreventionAlert, isDraggable: true, timelineId: 'test', @@ -510,7 +491,6 @@ describe('GenericRowRenderer', () => { mockEndpointProcessExecutionMalwareDetectionAlert ) && endpointAlertsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointProcessExecutionMalwareDetectionAlert, isDraggable: true, timelineId: 'test', @@ -538,7 +518,6 @@ describe('GenericRowRenderer', () => { {endpointProcessStartRowRenderer.isInstance(mockEndpointProcessExecEvent) && endpointProcessStartRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointProcessExecEvent, isDraggable: true, timelineId: 'test', @@ -564,7 +543,6 @@ describe('GenericRowRenderer', () => { {endpointProcessStartRowRenderer.isInstance(mockEndpointProcessForkEvent) && endpointProcessStartRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointProcessForkEvent, isDraggable: true, timelineId: 'test', @@ -590,7 +568,6 @@ describe('GenericRowRenderer', () => { {endpointProcessStartRowRenderer.isInstance(mockEndpointProcessStartEvent) && endpointProcessStartRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointProcessStartEvent, isDraggable: true, timelineId: 'test', @@ -619,7 +596,6 @@ describe('GenericRowRenderer', () => { {endgameProcessCreationEventRowRenderer.isInstance(endgameCreationEvent) && endgameProcessCreationEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameCreationEvent, isDraggable: true, timelineId: 'test', @@ -645,7 +621,6 @@ describe('GenericRowRenderer', () => { {endpointProcessEndRowRenderer.isInstance(mockEndpointProcessEndEvent) && endpointProcessEndRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointProcessEndEvent, isDraggable: true, timelineId: 'test', @@ -674,7 +649,6 @@ describe('GenericRowRenderer', () => { {endgameProcessTerminationEventRowRenderer.isInstance(endgameTerminationEvent) && endgameProcessTerminationEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameTerminationEvent, isDraggable: true, timelineId: 'test', @@ -703,7 +677,6 @@ describe('GenericRowRenderer', () => { {endgameProcessCreationEventRowRenderer.isInstance(endgameCreationEvent) && endgameProcessCreationEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameCreationEvent, isDraggable: true, timelineId: 'test', @@ -734,7 +707,6 @@ describe('GenericRowRenderer', () => { {endgameProcessCreationEventRowRenderer.isInstance(endgameCreationEvent) && endgameProcessCreationEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameCreationEvent, isDraggable: true, timelineId: 'test', @@ -765,7 +737,6 @@ describe('GenericRowRenderer', () => { {endgameProcessCreationEventRowRenderer.isInstance(endgameCreationEvent) && endgameProcessCreationEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameCreationEvent, isDraggable: true, timelineId: 'test', @@ -791,7 +762,6 @@ describe('GenericRowRenderer', () => { {endpointFileCreationRowRenderer.isInstance(mockEndpointFileCreationEvent) && endpointFileCreationRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileCreationEvent, isDraggable: true, timelineId: 'test', @@ -820,7 +790,6 @@ describe('GenericRowRenderer', () => { {endgameFileCreateEventRowRenderer.isInstance(endgameFileCreateEvent) && endgameFileCreateEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameFileCreateEvent, isDraggable: true, timelineId: 'test', @@ -846,7 +815,6 @@ describe('GenericRowRenderer', () => { {endpointFileDeletionRowRenderer.isInstance(mockEndpointFileDeletionEvent) && endpointFileDeletionRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileDeletionEvent, isDraggable: true, timelineId: 'test', @@ -872,7 +840,6 @@ describe('GenericRowRenderer', () => { {endpointFileModificationRowRenderer.isInstance(mockEndpointFileModificationEvent) && endpointFileModificationRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileModificationEvent, isDraggable: true, timelineId: 'test', @@ -898,7 +865,6 @@ describe('GenericRowRenderer', () => { {endpointFileOverwriteRowRenderer.isInstance(mockEndpointFileOverwriteEvent) && endpointFileOverwriteRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileOverwriteEvent, isDraggable: true, timelineId: 'test', @@ -924,7 +890,6 @@ describe('GenericRowRenderer', () => { {endpointFileRenameRowRenderer.isInstance(mockEndpointFileRenameEvent) && endpointFileRenameRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointFileRenameEvent, isDraggable: true, timelineId: 'test', @@ -953,7 +918,6 @@ describe('GenericRowRenderer', () => { {endgameFileDeleteEventRowRenderer.isInstance(endgameFileDeleteEvent) && endgameFileDeleteEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameFileDeleteEvent, isDraggable: true, timelineId: 'test', @@ -982,7 +946,6 @@ describe('GenericRowRenderer', () => { {fileCreatedEventRowRenderer.isInstance(fimFileCreatedEvent) && fileCreatedEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: fimFileCreatedEvent, isDraggable: true, timelineId: 'test', @@ -1009,7 +972,6 @@ describe('GenericRowRenderer', () => { {fileDeletedEventRowRenderer.isInstance(fimFileDeletedEvent) && fileDeletedEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: fimFileDeletedEvent, isDraggable: true, timelineId: 'test', @@ -1038,7 +1000,6 @@ describe('GenericRowRenderer', () => { {endgameFileCreateEventRowRenderer.isInstance(endgameFileCreateEvent) && endgameFileCreateEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameFileCreateEvent, isDraggable: true, timelineId: 'test', @@ -1069,7 +1030,6 @@ describe('GenericRowRenderer', () => { {endgameFileCreateEventRowRenderer.isInstance(endgameFileCreateEvent) && endgameFileCreateEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: endgameFileCreateEvent, isDraggable: true, timelineId: 'test', @@ -1100,7 +1060,6 @@ describe('GenericRowRenderer', () => { {fileCreatedEventRowRenderer.isInstance(fimFileCreatedEvent) && fileCreatedEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: fimFileCreatedEvent, isDraggable: true, timelineId: 'test', @@ -1128,7 +1087,6 @@ describe('GenericRowRenderer', () => { mockEndpointNetworkConnectionAcceptedEvent ) && endpointConnectionAcceptedRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointNetworkConnectionAcceptedEvent, isDraggable: true, timelineId: 'test', @@ -1157,7 +1115,6 @@ describe('GenericRowRenderer', () => { mockEndpointRegistryModificationEvent ) && endpointRegistryModificationRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointRegistryModificationEvent, isDraggable: true, timelineId: 'test', @@ -1185,7 +1142,6 @@ describe('GenericRowRenderer', () => { {endpointLibraryLoadRowRenderer.isInstance(mockEndpointLibraryLoadEvent) && endpointLibraryLoadRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointLibraryLoadEvent, isDraggable: true, timelineId: 'test', @@ -1212,7 +1168,6 @@ describe('GenericRowRenderer', () => { {endpointHttpRequestEventRowRenderer.isInstance(mockEndpointNetworkHttpRequestEvent) && endpointHttpRequestEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointNetworkHttpRequestEvent, isDraggable: true, timelineId: 'test', @@ -1241,7 +1196,6 @@ describe('GenericRowRenderer', () => { {endgameIpv4ConnectionAcceptEventRowRenderer.isInstance(ipv4ConnectionAcceptEvent) && endgameIpv4ConnectionAcceptEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: ipv4ConnectionAcceptEvent, isDraggable: true, timelineId: 'test', @@ -1270,7 +1224,6 @@ describe('GenericRowRenderer', () => { {endgameIpv6ConnectionAcceptEventRowRenderer.isInstance(ipv6ConnectionAcceptEvent) && endgameIpv6ConnectionAcceptEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: ipv6ConnectionAcceptEvent, isDraggable: true, timelineId: 'test', @@ -1296,7 +1249,6 @@ describe('GenericRowRenderer', () => { {endpointDisconnectReceivedRowRenderer.isInstance(mockEndpointDisconnectReceivedEvent) && endpointDisconnectReceivedRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointDisconnectReceivedEvent, isDraggable: true, timelineId: 'test', @@ -1325,7 +1277,6 @@ describe('GenericRowRenderer', () => { {endgameIpv4DisconnectReceivedEventRowRenderer.isInstance(ipv4DisconnectReceivedEvent) && endgameIpv4DisconnectReceivedEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: ipv4DisconnectReceivedEvent, isDraggable: true, timelineId: 'test', @@ -1354,7 +1305,6 @@ describe('GenericRowRenderer', () => { {endgameIpv6DisconnectReceivedEventRowRenderer.isInstance(ipv6DisconnectReceivedEvent) && endgameIpv6DisconnectReceivedEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: ipv6DisconnectReceivedEvent, isDraggable: true, timelineId: 'test', @@ -1383,7 +1333,6 @@ describe('GenericRowRenderer', () => { {socketOpenedEventRowRenderer.isInstance(socketOpenedEvent) && socketOpenedEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: socketOpenedEvent, isDraggable: true, timelineId: 'test', @@ -1412,7 +1361,6 @@ describe('GenericRowRenderer', () => { {socketClosedEventRowRenderer.isInstance(socketClosedEvent) && socketClosedEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: socketClosedEvent, isDraggable: true, timelineId: 'test', @@ -1441,7 +1389,6 @@ describe('GenericRowRenderer', () => { {endgameIpv4ConnectionAcceptEventRowRenderer.isInstance(ipv4ConnectionAcceptEvent) && endgameIpv4ConnectionAcceptEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: ipv4ConnectionAcceptEvent, isDraggable: true, timelineId: 'test', @@ -1463,7 +1410,6 @@ describe('GenericRowRenderer', () => { {securityLogOnRowRenderer.isInstance(mockEndpointSecurityLogOnSuccessEvent) && securityLogOnRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointSecurityLogOnSuccessEvent, isDraggable: true, timelineId: 'test', @@ -1485,7 +1431,6 @@ describe('GenericRowRenderer', () => { {securityLogOnRowRenderer.isInstance(mockEndpointSecurityLogOnFailureEvent) && securityLogOnRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointSecurityLogOnFailureEvent, isDraggable: true, timelineId: 'test', @@ -1510,7 +1455,6 @@ describe('GenericRowRenderer', () => { {userLogonEventRowRenderer.isInstance(userLogonEvent) && userLogonEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: userLogonEvent, isDraggable: true, timelineId: 'test', @@ -1535,7 +1479,6 @@ describe('GenericRowRenderer', () => { {adminLogonEventRowRenderer.isInstance(adminLogonEvent) && adminLogonEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: adminLogonEvent, isDraggable: true, timelineId: 'test', @@ -1560,7 +1503,6 @@ describe('GenericRowRenderer', () => { {explicitUserLogonEventRowRenderer.isInstance(explicitUserLogonEvent) && explicitUserLogonEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: explicitUserLogonEvent, isDraggable: true, timelineId: 'test', @@ -1582,7 +1524,6 @@ describe('GenericRowRenderer', () => { {securityLogOffRowRenderer.isInstance(mockEndpointSecurityLogOffEvent) && securityLogOffRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointSecurityLogOffEvent, isDraggable: true, timelineId: 'test', @@ -1607,7 +1548,6 @@ describe('GenericRowRenderer', () => { {userLogoffEventRowRenderer.isInstance(userLogoffEvent) && userLogoffEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: userLogoffEvent, isDraggable: true, timelineId: 'test', @@ -1632,7 +1572,6 @@ describe('GenericRowRenderer', () => { {userLogonEventRowRenderer.isInstance(userLogonEvent) && userLogonEventRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: userLogonEvent, isDraggable: true, timelineId: 'test', @@ -1652,7 +1591,6 @@ describe('GenericRowRenderer', () => { {dnsRowRenderer.isInstance(mockEndpointNetworkLookupRequestedEvent) && dnsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointNetworkLookupRequestedEvent, isDraggable: true, timelineId: 'test', @@ -1672,7 +1610,6 @@ describe('GenericRowRenderer', () => { {dnsRowRenderer.isInstance(mockEndpointNetworkLookupResultEvent) && dnsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockEndpointNetworkLookupResultEvent, isDraggable: true, timelineId: 'test', @@ -1696,7 +1633,6 @@ describe('GenericRowRenderer', () => { {dnsRowRenderer.isInstance(requestEvent) && dnsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: requestEvent, isDraggable: true, timelineId: 'test', @@ -1720,7 +1656,6 @@ describe('GenericRowRenderer', () => { {dnsRowRenderer.isInstance(dnsEvent) && dnsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: dnsEvent, isDraggable: true, timelineId: 'test', @@ -1750,7 +1685,6 @@ describe('GenericRowRenderer', () => { {dnsRowRenderer.isInstance(requestEvent) && dnsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: requestEvent, isDraggable: true, timelineId: 'test', @@ -1778,7 +1712,6 @@ describe('GenericRowRenderer', () => { {dnsRowRenderer.isInstance(requestEvent) && dnsRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: requestEvent, isDraggable: true, timelineId: 'test', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_row_renderer.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_row_renderer.tsx index ba791aae4b86c..36ba6adb06917 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_row_renderer.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/system/generic_row_renderer.tsx @@ -38,10 +38,9 @@ export const createGenericSystemRowRenderer = ({ action.toLowerCase() === actionName ); }, - renderRow: ({ browserFields, data, isDraggable, timelineId }) => ( + renderRow: ({ data, isDraggable, timelineId }) => ( ( + renderRow: ({ data, isDraggable, timelineId }) => ( ( + renderRow: ({ data, isDraggable, timelineId }) => ( ( + renderRow: ({ data, isDraggable, timelineId }) => ( ( + renderRow: ({ data, isDraggable, timelineId }) => ( ( + renderRow: ({ data, isDraggable, timelineId }) => ( ( + renderRow: ({ data, isDraggable, timelineId }) => ( ( + renderRow: ({ data, isDraggable, timelineId }) => ( ({ const dnsQuestionName: string | null | undefined = get('dns.question.name[0]', ecs); return !isNillEmptyOrNotFinite(dnsQuestionType) && !isNillEmptyOrNotFinite(dnsQuestionName); }, - renderRow: ({ browserFields, data, isDraggable, timelineId }) => ( + renderRow: ({ data, isDraggable, timelineId }) => ( { test('it renders the default ZeekDetails', () => { const wrapper = mount( - + ); expect(wrapper.find('ZeekDetails')).toMatchSnapshot(); @@ -52,11 +47,7 @@ describe('ZeekDetails', () => { test('it returns zeek.connection if the data does contain zeek.connection data', () => { const wrapper = mount( - + ); expect(extractEuiIconText(removeExternalLinkText(wrapper.text()))).toEqual( @@ -67,11 +58,7 @@ describe('ZeekDetails', () => { test('it returns zeek.dns if the data does contain zeek.dns data', () => { const wrapper = mount( - + ); expect(extractEuiIconText(removeExternalLinkText(wrapper.text()))).toEqual( @@ -82,11 +69,7 @@ describe('ZeekDetails', () => { test('it returns zeek.http if the data does contain zeek.http data', () => { const wrapper = mount( - + ); expect(extractEuiIconText(removeExternalLinkText(wrapper.text()))).toEqual( @@ -97,11 +80,7 @@ describe('ZeekDetails', () => { test('it returns zeek.notice if the data does contain zeek.notice data', () => { const wrapper = mount( - + ); expect(extractEuiIconText(removeExternalLinkText(wrapper.text()))).toEqual( @@ -112,11 +91,7 @@ describe('ZeekDetails', () => { test('it returns zeek.ssl if the data does contain zeek.ssl data', () => { const wrapper = mount( - + ); expect(extractEuiIconText(removeExternalLinkText(wrapper.text()))).toEqual( @@ -127,11 +102,7 @@ describe('ZeekDetails', () => { test('it returns zeek.files if the data does contain zeek.files data', () => { const wrapper = mount( - + ); expect(wrapper.text()).toEqual('Cu0n232QMyvNtzb75jfilessha1: fa5195a...md5: f7653f1...'); @@ -140,11 +111,7 @@ describe('ZeekDetails', () => { test('it returns null for text if the data contains no zeek data', () => { const wrapper = mount( - + ); expect(wrapper.find('ZeekDetails').children().exists()).toBeFalsy(); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_details.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_details.tsx index a4dbde1a5626d..ac899cad8521e 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_details.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_details.tsx @@ -9,7 +9,6 @@ import { EuiSpacer } from '@elastic/eui'; import React from 'react'; import styled from 'styled-components'; -import { BrowserFields } from '../../../../../../common/containers/source'; import { Ecs } from '../../../../../../../common/ecs'; import { NetflowRenderer } from '../netflow'; @@ -22,7 +21,6 @@ const Details = styled.div` Details.displayName = 'Details'; interface ZeekDetailsProps { - browserFields: BrowserFields; data: Ecs; isDraggable?: boolean; timelineId: string; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_row_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_row_renderer.test.tsx index fda83c0ade12b..80f4aafbcfeb7 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_row_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_row_renderer.test.tsx @@ -10,7 +10,6 @@ import { cloneDeep } from 'lodash/fp'; import React from 'react'; import { removeExternalLinkText } from '@kbn/securitysolution-io-ts-utils'; -import { mockBrowserFields } from '../../../../../../common/containers/source/mock'; import { Ecs } from '../../../../../../../common/ecs'; import { mockTimelineData, TestProviders } from '../../../../../../common/mock'; import '../../../../../../common/mock/match_media'; @@ -41,7 +40,6 @@ describe('zeek_row_renderer', () => { test('renders correctly against snapshot', () => { const children = zeekRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: nonZeek, isDraggable: true, timelineId: 'test', @@ -61,7 +59,6 @@ describe('zeek_row_renderer', () => { test('should render a zeek row', () => { const children = zeekRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: zeek, isDraggable: true, timelineId: 'test', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_row_renderer.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_row_renderer.tsx index 6786bb996325c..5fd2acd852804 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_row_renderer.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/zeek/zeek_row_renderer.tsx @@ -19,14 +19,9 @@ export const zeekRowRenderer: RowRenderer = { const module: string | null | undefined = get('event.module[0]', ecs); return module != null && module.toLowerCase() === 'zeek'; }, - renderRow: ({ browserFields, data, isDraggable, timelineId }) => ( + renderRow: ({ data, isDraggable, timelineId }) => ( - + ), }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/cell_rendering/default_cell_renderer.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/cell_rendering/default_cell_renderer.test.tsx index 9e74fa84a5adc..566fcb5808e14 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/cell_rendering/default_cell_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/cell_rendering/default_cell_renderer.test.tsx @@ -114,7 +114,6 @@ describe('DefaultCellRenderer', () => { expect(mockImplementation.renderColumn).toBeCalledWith({ asPlainText: false, - browserFields, columnName: header.id, ecsData, eventId, diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/cell_rendering/default_cell_renderer.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/cell_rendering/default_cell_renderer.tsx index e075712b0bea2..88de4a9c2c6df 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/cell_rendering/default_cell_renderer.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/cell_rendering/default_cell_renderer.tsx @@ -60,7 +60,6 @@ export const DefaultCellRenderer: React.FC = ({ {getColumnRenderer(header.id, columnRenderers, data).renderColumn({ asPlainText, // we want to render value with links as plain text but keep other formatters like badge. - browserFields, columnName: header.id, ecsData, eventId, diff --git a/x-pack/plugins/timelines/common/types/timeline/rows/index.ts b/x-pack/plugins/timelines/common/types/timeline/rows/index.ts index 089f886e1c221..b65f4d19c5abb 100644 --- a/x-pack/plugins/timelines/common/types/timeline/rows/index.ts +++ b/x-pack/plugins/timelines/common/types/timeline/rows/index.ts @@ -7,18 +7,15 @@ import { RowRendererId } from '..'; import { Ecs } from '../../../ecs'; -import { BrowserFields } from '../../../search_strategy/index_fields'; export interface RowRenderer { id: RowRendererId; isInstance: (data: Ecs) => boolean; renderRow: ({ - browserFields, data, isDraggable, timelineId, }: { - browserFields: BrowserFields; data: Ecs; isDraggable: boolean; timelineId: string; diff --git a/x-pack/plugins/timelines/public/components/t_grid/body/events/stateful_event.tsx b/x-pack/plugins/timelines/public/components/t_grid/body/events/stateful_event.tsx index 9655c61c8f155..8ad15580d7bfe 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/body/events/stateful_event.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/body/events/stateful_event.tsx @@ -161,7 +161,6 @@ const StatefulEventComponent: React.FC = ({ = ({ /> ), - [ - ariaRowindex, - browserFields, - containerRef, - event, - lastFocusedAriaColindex, - rowRenderers, - timelineId, - ] + [ariaRowindex, containerRef, event, lastFocusedAriaColindex, rowRenderers, timelineId] ); return ( diff --git a/x-pack/plugins/timelines/public/components/t_grid/body/events/stateful_row_renderer/index.tsx b/x-pack/plugins/timelines/public/components/t_grid/body/events/stateful_row_renderer/index.tsx index 31b1963a24edd..80b6e332e4fcd 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/body/events/stateful_row_renderer/index.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/body/events/stateful_row_renderer/index.tsx @@ -17,7 +17,6 @@ import { import { useStatefulEventFocus } from '../use_stateful_event_focus'; import * as i18n from '../translations'; -import type { BrowserFields } from '../../../../../../common/search_strategy/index_fields'; import type { TimelineItem } from '../../../../../../common/search_strategy'; import type { RowRenderer } from '../../../../../../common/types/timeline'; import { getRowRenderer } from '../../renderers/get_row_renderer'; @@ -37,7 +36,6 @@ import { getRowRenderer } from '../../renderers/get_row_renderer'; */ export const StatefulRowRenderer = ({ ariaRowindex, - browserFields, containerRef, event, lastFocusedAriaColindex, @@ -45,7 +43,6 @@ export const StatefulRowRenderer = ({ timelineId, }: { ariaRowindex: number; - browserFields: BrowserFields; containerRef: React.MutableRefObject; event: TimelineItem; lastFocusedAriaColindex: number; @@ -78,7 +75,6 @@ export const StatefulRowRenderer = ({
{rowRenderer.renderRow({ - browserFields, data: event.ecs, isDraggable: false, timelineId, @@ -90,7 +86,6 @@ export const StatefulRowRenderer = ({ ), [ ariaRowindex, - browserFields, event.ecs, focusOwnership, onFocus, diff --git a/x-pack/plugins/timelines/public/components/t_grid/body/index.tsx b/x-pack/plugins/timelines/public/components/t_grid/body/index.tsx index a3d5a35321e80..841b30f3075ee 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/body/index.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/body/index.tsx @@ -851,7 +851,6 @@ export const BodyComponent = React.memo( { test('renders correctly against snapshot', () => { const children = plainRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockDatum, isDraggable: false, timelineId: 'test', @@ -36,7 +35,6 @@ describe('plain_row_renderer', () => { test('should render a plain row', () => { const children = plainRowRenderer.renderRow({ - browserFields: mockBrowserFields, data: mockDatum, isDraggable: false, timelineId: 'test', diff --git a/x-pack/plugins/timelines/public/components/t_grid/event_rendered_view/index.tsx b/x-pack/plugins/timelines/public/components/t_grid/event_rendered_view/index.tsx index ef27a6a4c7aed..34ecf37b9471d 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/event_rendered_view/index.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/event_rendered_view/index.tsx @@ -23,7 +23,7 @@ import styled from 'styled-components'; import { useUiSetting } from '../../../../../../../src/plugins/kibana_react/public'; -import type { BrowserFields, TimelineItem } from '../../../../common/search_strategy'; +import type { TimelineItem } from '../../../../common/search_strategy'; import type { RowRenderer } from '../../../../common/types'; import { RuleName } from '../../rule_name'; import { isEventBuildingBlockType } from '../body/helpers'; @@ -62,7 +62,6 @@ const StyledEuiBasicTable = styled(EuiBasicTable as BasicTableType)` export interface EventRenderedViewProps { alertToolbar: React.ReactNode; appId: string; - browserFields: BrowserFields; events: TimelineItem[]; leadingControlColumns: EuiDataGridControlColumn[]; onChangePage: (newActivePage: number) => void; @@ -85,7 +84,6 @@ export const PreferenceFormattedDate = React.memo(PreferenceFormattedDateCompone const EventRenderedViewComponent = ({ alertToolbar, appId, - browserFields, events, leadingControlColumns, onChangePage, @@ -192,7 +190,6 @@ const EventRenderedViewComponent = ({
{rowRenderer.renderRow({ - browserFields, data: ecsData, isDraggable: false, timelineId: 'NONE', @@ -207,7 +204,7 @@ const EventRenderedViewComponent = ({ width: '60%', }, ], - [ActionTitle, browserFields, events, leadingControlColumns, rowRenderers, appId] + [ActionTitle, events, leadingControlColumns, rowRenderers, appId] ); const handleTableChange = useCallback( diff --git a/x-pack/plugins/timelines/public/mock/t_grid.tsx b/x-pack/plugins/timelines/public/mock/t_grid.tsx index 4d2ee5c7f8d67..d856cd43cadaf 100644 --- a/x-pack/plugins/timelines/public/mock/t_grid.tsx +++ b/x-pack/plugins/timelines/public/mock/t_grid.tsx @@ -134,7 +134,6 @@ export const tGridIntegratedProps: TGridIntegratedProps = { export const eventRenderedProps: EventRenderedViewProps = { alertToolbar: <>, appId: '', - browserFields: mockBrowserFields, events: mockTimelineData, leadingControlColumns: [], onChangePage: () => null, From 1f05cd606dede35ab9a29e6ddeff7d0725c374e6 Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Thu, 14 Apr 2022 14:15:48 +0200 Subject: [PATCH 058/305] [Discover] Discover Classic View Filter In/Out placement when `truncate:maxHeight` is set to 0 (#129942) * Change global injected CSS for truncating height * Optimize CSS code * Add requiresPageReload for TRUNCATE_MAX_HEIGHT --- .../components/doc_table/_doc_table.scss | 4 ++++ .../discover/public/utils/truncate_styles.ts | 20 ++++++++----------- src/plugins/discover/server/ui_settings.ts | 1 + 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/plugins/discover/public/components/doc_table/_doc_table.scss b/src/plugins/discover/public/components/doc_table/_doc_table.scss index 164b61d42df19..4553cdc05fdad 100644 --- a/src/plugins/discover/public/components/doc_table/_doc_table.scss +++ b/src/plugins/discover/public/components/doc_table/_doc_table.scss @@ -124,3 +124,7 @@ } } } + +.dscTruncateByHeight { + display: inline-block; +} diff --git a/src/plugins/discover/public/utils/truncate_styles.ts b/src/plugins/discover/public/utils/truncate_styles.ts index dbe8b770e1793..95a615b5d1cb3 100644 --- a/src/plugins/discover/public/utils/truncate_styles.ts +++ b/src/plugins/discover/public/utils/truncate_styles.ts @@ -18,12 +18,19 @@ const TRUNCATE_GRADIENT_HEIGHT = 15; const globalThemeCache = createCache({ key: 'truncation' }); const buildStylesheet = (maxHeight: number) => { + if (!maxHeight) { + return [ + ` + .dscTruncateByHeight { + max-height: none; + }`, + ]; + } return [ ` .dscTruncateByHeight { overflow: hidden; max-height: ${maxHeight}px !important; - display: inline-block; } .dscTruncateByHeight:before { top: ${maxHeight - TRUNCATE_GRADIENT_HEIGHT}px; @@ -32,18 +39,7 @@ const buildStylesheet = (maxHeight: number) => { ]; }; -const flushThemedGlobals = () => { - globalThemeCache.sheet.flush(); - globalThemeCache.inserted = {}; - globalThemeCache.registered = {}; -}; - export const injectTruncateStyles = (maxHeight: number) => { - if (maxHeight <= 0) { - flushThemedGlobals(); - return; - } - const serialized = serializeStyles(buildStylesheet(maxHeight), cache.registered); if (!globalThemeCache.inserted[serialized.name]) { globalThemeCache.insert('', serialized, globalThemeCache.sheet, true); diff --git a/src/plugins/discover/server/ui_settings.ts b/src/plugins/discover/server/ui_settings.ts index 94c85e42673ec..a7609f9b8901b 100644 --- a/src/plugins/discover/server/ui_settings.ts +++ b/src/plugins/discover/server/ui_settings.ts @@ -286,5 +286,6 @@ export const getUiSettings: (docLinks: DocLinksServiceSetup) => Record Date: Thu, 14 Apr 2022 08:17:33 -0400 Subject: [PATCH 059/305] [Ingest Pipelines] add tests for grok processor (#130123) --- .../__jest__/processors/grok.test.ts | 107 ++++++++++++++++++ .../__jest__/processors/processor.helpers.tsx | 7 +- .../drag_and_drop_text_list.tsx | 15 ++- .../processor_form/processors/grok.test.tsx | 57 ---------- 4 files changed, 125 insertions(+), 61 deletions(-) create mode 100644 x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/grok.test.ts delete mode 100644 x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/processors/grok.test.tsx diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/grok.test.ts b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/grok.test.ts new file mode 100644 index 0000000000000..b488e69ed84da --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/grok.test.ts @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { act } from 'react-dom/test-utils'; +import { setup, SetupResult, getProcessorValue, setupEnvironment } from './processor.helpers'; + +const GROK_TYPE = 'grok'; + +describe('Processor: Grok', () => { + let onUpdate: jest.Mock; + let testBed: SetupResult; + let clickAddPattern: () => Promise; + const { httpSetup } = setupEnvironment(); + + beforeAll(() => { + jest.useFakeTimers(); + // disable all react-beautiful-dnd development warnings + (window as any)['__react-beautiful-dnd-disable-dev-warnings'] = true; + }); + + afterAll(() => { + jest.useRealTimers(); + // enable all react-beautiful-dnd development warnings + (window as any)['__react-beautiful-dnd-disable-dev-warnings'] = false; + }); + + beforeEach(async () => { + onUpdate = jest.fn(); + + await act(async () => { + testBed = await setup(httpSetup, { + value: { + processors: [], + }, + onFlyoutOpen: jest.fn(), + onUpdate, + }); + }); + + const { find, component, actions } = testBed; + + clickAddPattern = async () => { + await act(async () => { + find('droppableList.addButton').simulate('click'); + }); + component.update(); + }; + + component.update(); + + // Open flyout to add new processor + actions.addProcessor(); + // Add type (the other fields are not visible until a type is selected) + await actions.addProcessorType(GROK_TYPE); + }); + + test('prevents form submission if required fields are not provided', async () => { + const { + actions: { saveNewProcessor }, + form, + exists, + } = testBed; + + // Click submit button with only the type defined + await saveNewProcessor(); + + // Expect form error as "field" is a required parameter + expect(form.getErrorsMessages()).toEqual(['A field value is required.']); + // Patterns field is also required; it uses EuiDraggable and only shows an error icon when invalid + expect(exists('droppableList.errorIcon')).toBe(true); + }); + + test('saves with default parameter values', async () => { + const { + actions: { saveNewProcessor }, + form, + } = testBed; + + // Add "field" value + form.setInputValue('fieldNameField.input', 'test_grok_processor'); + + // Add pattern 1 + form.setInputValue('droppableList.input-0', 'pattern1'); + + // Add pattern 2 + await clickAddPattern(); + form.setInputValue('droppableList.input-1', 'pattern2'); + + // Add pattern 3 + await clickAddPattern(); + form.setInputValue('droppableList.input-2', 'pattern3'); + + // Save the field + await saveNewProcessor(); + + const processors = getProcessorValue(onUpdate, GROK_TYPE); + + expect(processors[0][GROK_TYPE]).toEqual({ + field: 'test_grok_processor', + patterns: ['pattern1', 'pattern2', 'pattern3'], + }); + }); +}); diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor.helpers.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor.helpers.tsx index 0e7431964c84b..89a7be5ca5cae 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor.helpers.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/processors/processor.helpers.tsx @@ -180,4 +180,9 @@ type TestSubject = | 'transportField.input' | 'seedField.input' | 'copyFromInput' - | 'trimSwitch.input'; + | 'trimSwitch.input' + | 'droppableList.addButton' + | 'droppableList.errorIcon' + | 'droppableList.input-0' + | 'droppableList.input-1' + | 'droppableList.input-2'; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/field_components/drag_and_drop_text_list.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/field_components/drag_and_drop_text_list.tsx index 7a0ea533b0d68..d574479b03e7b 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/field_components/drag_and_drop_text_list.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/field_components/drag_and_drop_text_list.tsx @@ -87,7 +87,12 @@ function DragAndDropTextListComponent({ [onMove] ); return ( - + <> {/* Label and help text. Also wire up the htmlFor so the label points to the first text field. */} {typeof errorMessage === 'string' && ( -
+
- + {addLabel}
diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/processors/grok.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/processors/grok.test.tsx deleted file mode 100644 index 7d556cc41d109..0000000000000 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/processors/grok.test.tsx +++ /dev/null @@ -1,57 +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 - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { mount } from 'enzyme'; - -import { - uiSettingsServiceMock, - i18nServiceMock, -} from '../../../../../../../../../../src/core/public/mocks'; - -import { Form, useForm, KibanaContextProvider } from '../../../../../../shared_imports'; -import { Grok } from './grok'; - -// @ts-ignore -window.Worker = function () { - this.postMessage = () => {}; - (this as any).terminate = () => {}; -}; - -describe('', () => { - const setup = (props?: { defaultValue: Record }) => { - function MyComponent() { - const { form } = useForm({ defaultValue: props?.defaultValue }); - const i18n = i18nServiceMock.createStartContract(); - return ( - - -
- - -
-
- ); - } - return mount(); - }; - - beforeAll(() => { - // disable all react-beautiful-dnd development warnings - (window as any)['__react-beautiful-dnd-disable-dev-warnings'] = true; - }); - - afterAll(() => { - // enable all react-beautiful-dnd development warnings - (window as any)['__react-beautiful-dnd-disable-dev-warnings'] = false; - }); - test('smoke', () => { - setup({ defaultValue: { type: 'grok', fields: { patterns: ['test'] } } }); - }); -}); From 0ed2f5ba1776608f6f0ced9f6791b24a44cd0205 Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Thu, 14 Apr 2022 15:32:21 +0300 Subject: [PATCH 060/305] [Cases] Use the bulk create attachment endpoint on the UI (#130124) --- .../components/add_comment/index.test.tsx | 33 ++++--- .../public/components/add_comment/index.tsx | 10 +-- .../all_cases/all_cases_list.test.tsx | 11 ++- ..._cases_add_to_existing_case_modal.test.tsx | 45 +++++----- .../use_cases_add_to_existing_case_modal.tsx | 21 +++-- .../create/flyout/create_case_flyout.tsx | 7 +- .../cases/public/components/create/form.tsx | 7 +- .../components/create/form_context.test.tsx | 51 ++++++++--- .../public/components/create/form_context.tsx | 31 +++---- .../cases/public/containers/__mocks__/api.ts | 2 +- .../cases/public/containers/api.test.tsx | 49 ++++++---- x-pack/plugins/cases/public/containers/api.ts | 18 ++++ ...st.tsx => use_create_attachments.test.tsx} | 90 ++++++++++++------- ...comment.tsx => use_create_attachments.tsx} | 18 ++-- 14 files changed, 248 insertions(+), 145 deletions(-) rename x-pack/plugins/cases/public/containers/{use_post_comment.test.tsx => use_create_attachments.test.tsx} (60%) rename x-pack/plugins/cases/public/containers/{use_post_comment.tsx => use_create_attachments.tsx} (82%) diff --git a/x-pack/plugins/cases/public/components/add_comment/index.test.tsx b/x-pack/plugins/cases/public/components/add_comment/index.test.tsx index f7535e6f52071..b9a253adc76f5 100644 --- a/x-pack/plugins/cases/public/components/add_comment/index.test.tsx +++ b/x-pack/plugins/cases/public/components/add_comment/index.test.tsx @@ -14,17 +14,17 @@ import { TestProviders } from '../../common/mock'; import { CommentRequest, CommentType } from '../../../common/api'; import { SECURITY_SOLUTION_OWNER } from '../../../common/constants'; -import { usePostComment } from '../../containers/use_post_comment'; +import { useCreateAttachments } from '../../containers/use_create_attachments'; import { AddComment, AddCommentProps, AddCommentRefObject } from '.'; import { CasesTimelineIntegrationProvider } from '../timeline_context'; import { timelineIntegrationMock } from '../__mock__/timeline'; -jest.mock('../../containers/use_post_comment'); +jest.mock('../../containers/use_create_attachments'); -const usePostCommentMock = usePostComment as jest.Mock; +const useCreateAttachmentsMock = useCreateAttachments as jest.Mock; const onCommentSaving = jest.fn(); const onCommentPosted = jest.fn(); -const postComment = jest.fn(); +const createAttachments = jest.fn(); const addCommentProps: AddCommentProps = { id: 'newComment', @@ -36,10 +36,10 @@ const addCommentProps: AddCommentProps = { statusActionButton: null, }; -const defaultPostComment = { +const defaultResponse = { isLoading: false, isError: false, - postComment, + createAttachments, }; const sampleData: CommentRequest = { @@ -51,7 +51,7 @@ const sampleData: CommentRequest = { describe('AddComment ', () => { beforeEach(() => { jest.clearAllMocks(); - usePostCommentMock.mockImplementation(() => defaultPostComment); + useCreateAttachmentsMock.mockImplementation(() => defaultResponse); }); it('should post comment on submit click', async () => { @@ -72,9 +72,9 @@ describe('AddComment ', () => { wrapper.find(`[data-test-subj="submit-comment"]`).first().simulate('click'); await waitFor(() => { expect(onCommentSaving).toBeCalled(); - expect(postComment).toBeCalledWith({ + expect(createAttachments).toBeCalledWith({ caseId: addCommentProps.caseId, - data: sampleData, + data: [sampleData], updateCase: onCommentPosted, }); expect(wrapper.find(`[data-test-subj="add-comment"] textarea`).text()).toBe(''); @@ -82,7 +82,10 @@ describe('AddComment ', () => { }); it('should render spinner and disable submit when loading', () => { - usePostCommentMock.mockImplementation(() => ({ ...defaultPostComment, isLoading: true })); + useCreateAttachmentsMock.mockImplementation(() => ({ + ...defaultResponse, + isLoading: true, + })); const wrapper = mount( @@ -96,7 +99,10 @@ describe('AddComment ', () => { }); it('should disable submit button when isLoading is true', () => { - usePostCommentMock.mockImplementation(() => ({ ...defaultPostComment, isLoading: true })); + useCreateAttachmentsMock.mockImplementation(() => ({ + ...defaultResponse, + isLoading: true, + })); const wrapper = mount( @@ -109,7 +115,10 @@ describe('AddComment ', () => { }); it('should hide the component when the user does not have crud permissions', () => { - usePostCommentMock.mockImplementation(() => ({ ...defaultPostComment, isLoading: true })); + useCreateAttachmentsMock.mockImplementation(() => ({ + ...defaultResponse, + isLoading: true, + })); const wrapper = mount( diff --git a/x-pack/plugins/cases/public/components/add_comment/index.tsx b/x-pack/plugins/cases/public/components/add_comment/index.tsx index dea692f7c71a1..f3630d16cda79 100644 --- a/x-pack/plugins/cases/public/components/add_comment/index.tsx +++ b/x-pack/plugins/cases/public/components/add_comment/index.tsx @@ -18,7 +18,7 @@ import styled from 'styled-components'; import { isEmpty } from 'lodash'; import { CommentType } from '../../../common/api'; -import { usePostComment } from '../../containers/use_post_comment'; +import { useCreateAttachments } from '../../containers/use_create_attachments'; import { Case } from '../../containers/types'; import { EuiMarkdownEditorRef, MarkdownEditorForm } from '../markdown_editor'; import { Form, useForm, UseField, useFormData } from '../../common/shared_imports'; @@ -71,7 +71,7 @@ export const AddComment = React.memo( const editorRef = useRef(null); const [focusOnContext, setFocusOnContext] = useState(false); const { owner } = useCasesContext(); - const { isLoading, postComment } = usePostComment(); + const { isLoading, createAttachments } = useCreateAttachments(); const { form } = useForm({ defaultValue: initialCommentValue, @@ -112,14 +112,14 @@ export const AddComment = React.memo( if (onCommentSaving != null) { onCommentSaving(); } - postComment({ + createAttachments({ caseId, - data: { ...data, type: CommentType.user, owner: owner[0] }, + data: [{ ...data, type: CommentType.user, owner: owner[0] }], updateCase: onCommentPosted, }); reset(); } - }, [submit, onCommentSaving, postComment, caseId, owner, onCommentPosted, reset]); + }, [submit, onCommentSaving, createAttachments, caseId, owner, onCommentPosted, reset]); /** * Focus on the text area when a quote has been added. diff --git a/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx b/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx index b1f5af86cf8ab..a3d91617a20c4 100644 --- a/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx @@ -33,11 +33,11 @@ import { triggersActionsUiMock } from '../../../../triggers_actions_ui/public/mo import { registerConnectorsToMockActionRegistry } from '../../common/mock/register_connectors'; import { createStartServicesMock } from '../../common/lib/kibana/kibana_react.mock'; import { waitForComponentToUpdate } from '../../common/test_utils'; -import { usePostComment } from '../../containers/use_post_comment'; +import { useCreateAttachments } from '../../containers/use_create_attachments'; import { useGetTags } from '../../containers/use_get_tags'; import { useGetReporters } from '../../containers/use_get_reporters'; -jest.mock('../../containers/use_post_comment'); +jest.mock('../../containers/use_create_attachments'); jest.mock('../../containers/use_bulk_update_case'); jest.mock('../../containers/use_delete_cases'); jest.mock('../../containers/use_get_cases'); @@ -61,7 +61,7 @@ const useGetTagsMock = useGetTags as jest.Mock; const useGetReportersMock = useGetReporters as jest.Mock; const useKibanaMock = useKibana as jest.MockedFunction; const useConnectorsMock = useConnectors as jest.Mock; -const usePostCommentMock = usePostComment as jest.Mock; +const useCreateAttachmentsMock = useCreateAttachments as jest.Mock; const mockTriggersActionsUiService = triggersActionsUiMock.createStart(); @@ -88,7 +88,10 @@ describe('AllCasesListGeneric', () => { const fetchCasesStatus = jest.fn(); const onRowClick = jest.fn(); const emptyTag = getEmptyTagValue().props.children; - usePostCommentMock.mockReturnValue({ status: { isLoading: false }, postComment: jest.fn() }); + useCreateAttachmentsMock.mockReturnValue({ + status: { isLoading: false }, + createAttachments: jest.fn(), + }); const defaultGetCases = { ...useGetCasesMockState, diff --git a/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.test.tsx b/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.test.tsx index 25360800554b2..f0eea39d551a7 100644 --- a/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.test.tsx @@ -14,14 +14,14 @@ import { Case, CaseStatuses, StatusAll } from '../../../../common'; import { AppMockRenderer, createAppMockRenderer } from '../../../common/mock'; import { useCasesToast } from '../../../common/use_cases_toast'; import { alertComment } from '../../../containers/mock'; -import { usePostComment } from '../../../containers/use_post_comment'; +import { useCreateAttachments } from '../../../containers/use_create_attachments'; import { SupportedCaseAttachment } from '../../../types'; import { CasesContext } from '../../cases_context'; import { CasesContextStoreActionsList } from '../../cases_context/cases_context_reducer'; import { useCasesAddToExistingCaseModal } from './use_cases_add_to_existing_case_modal'; jest.mock('../../../common/use_cases_toast'); -jest.mock('../../../containers/use_post_comment'); +jest.mock('../../../containers/use_create_attachments'); // dummy mock, will call onRowclick when rendering jest.mock('./all_cases_selector_modal', () => { return { @@ -46,11 +46,11 @@ const TestComponent: React.FC = () => { return

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